Name: series-workflow4pbng Phase: Failed StartedAt: 2026-08-12 18:09:22 +0000 UTC FinishedAt: 2026-08-12 18:12:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pbng[0] Phase: Succeeded StartedAt: 2026-08-12 18:09:22 +0000 UTC FinishedAt: 2026-08-12 18:12:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pbng[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 18:09:22 +0000 UTC FinishedAt: 2026-08-12 18:12:15 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0NjllNDlmY2RlMmIzMjMyNmFiNzVhMzhmNmM2NzE1NWYzODBkNDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDUwOGI2Y2M4ZWRkY2YuLjJlYzkxNDY2YWNkZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuQEAgLTUxNiw2ICYjNDM7NTE2LDE1IEBAIHN0YXRpYyB2b2lkIHNmcF9xdWlya191Ym50X3VmX2luc3RhbnQoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkLFxuIFx0eyAudmVuZG9yID0gX3YsIC5wYXJ0ID0gX3AsIC5zdXBwb3J0ID0gX3MsIC5maXh1cCA9IF9mLCB9XG4gI2RlZmluZSBTRlBfUVVJUktfUyhfdiwgX3AsIF9zKSBTRlBfUVVJUksoX3YsIF9wLCBfcywgTlVMTClcbiAjZGVmaW5lIFNGUF9RVUlSS19GKF92LCBfcCwgX2YpIFNGUF9RVUlSSyhfdiwgX3AsIE5VTEwsIF9mKVxuJiM0MzsvKiBMaWtlIFNGUF9RVUlSS19GLCBidXQgbWF0Y2hlcyB0aGUgcGFydCBhcyBhIHByZWZpeDsgdGhlIHZlbmRvciBuYW1lXG4mIzQzOyAqIGlzIHN0aWxsIG1hdGNoZWQgZXhhY3RseS4gVXNlIGZvciBtb2R1bGVzIHdob3NlIEVFUFJPTSB2ZW5kb3IgUE5cbiYjNDM7ICogZmllbGQgcmVhZHMgYmFjayB3aXRoIGdhcmJhZ2UgcGFzdCB0aGUgbGVnaXRpbWF0ZSBjaGFyYWN0ZXJzIGluc3RlYWRcbiYjNDM7ICogb2YgdGhlIFNGRi04NDcyLW1hbmRhdGVkIHNwYWNlIHBhZGRpbmcsIHNvIHNmcF9zdHJsZW4gY2FuJiMzOTt0IHRyaW0gdGhlXG4mIzQzOyAqIGZpZWxkIGRvd24gdG8gdGhlIGxlZ2l0aW1hdGUgbGVuZ3RoLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXFxcbiYjNDM7XHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBOVUxMLCAuZml4dXAgPSBfZiwgXFxcbiYjNDM7XHQgIC5wYXJ0X3ByZWZpeF9tYXRjaCA9IHRydWUgfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdC8vIEFsY2F0ZWwgTHVjZW50IEctMDEwUy1QIGNhbiBvcGVyYXRlIGF0IDI1MDBiYXNlLVgsIGJ1dCBpbmNvcnJlY3RseVxuQEAgLTU0OCw2ICYjNDM7NTU3LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdFNGUF9RVUlSSyhcJiMzNDtGU1wmIzM0OywgXCYjMzQ7R1BPTi1PTlUtMzQtMjBCSVwmIzM0Oywgc2ZwX3F1aXJrXzI1MDBiYXNleCxcbiBcdFx0ICBzZnBfZml4dXBfaWdub3JlX3R4X2ZhdWx0KSxcbiBcbiYjNDM7XHQvLyBGaWJlcnN0b3JlIFhHUy1TRlAtT05ULU1BQ0kgaXMgYSBNQUMtbW9kZSBYR1MtUE9OIE9OVCBzdGljayB3aXRoXG4mIzQzO1x0Ly8gT05ULWNsYXNzIHNlcmlhbC1wYXNzdGhyb3VnaCBUWF9GQVVMVC9MT1Mgd2lyaW5nIGFuZCBzbG93IHN0YXJ0dXA7XG4mIzQzO1x0Ly8gbWFzayBib3RoIHNpZ25hbHMgYW5kIGV4dGVuZCBUX1NUQVJUX1VQIHZpYSB0aGUgcG90cm9uIGZpeHVwLiBUaGVcbiYjNDM7XHQvLyBQTiBpcyB0aGUgcHJvZHVjdCBuYW1lIChYR1MtU0ZQLU9OVC1NQUMtSSkgdHJ1bmNhdGVkIGF0IHRoZSAxNi1ieXRlXG4mIzQzO1x0Ly8gZmllbGQgd2lkdGgsIHNvIHRoZSBmaWVsZCBpcyBmdWxseSBvY2N1cGllZCBhbmQgbWF0Y2hlcyBleGFjdGx5LlxuJiM0MztcdFNGUF9RVUlSS19GKFwmIzM0O0ZTXCYjMzQ7LCBcJiMzNDtYR1MtU0ZQLU9OVC1NQUNJXCYjMzQ7LCBzZnBfZml4dXBfcG90cm9uKSxcbiYjNDM7XG4gXHRTRlBfUVVJUktfRihcJiMzNDtIQUxOeVwmIzM0OywgXCYjMzQ7SEwtR1NGUFwmIzM0Oywgc2ZwX2ZpeHVwX2hhbG55X2dzZnApLFxuIFxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7SC1DT01cJiMzNDssIFwmIzM0O1NQUDQyNUgtR0FCNFwmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksXG5AQCAtNjA4LDYgJiM0Mzs2MjQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xuIFx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1MSDIwLUFcJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLFxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMFwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKSxcbiBcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7UlRTRlAtMTBHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuJiM0MztcbiYjNDM7XHQvLyBPRU0gWEdTUE9OU1QyMDAxIGlzIGFuIFhHUy1QT04gT05UIHN0aWNrIHdpdGggYnJva2VuIFRYX0ZBVUxUIGFuZFxuJiM0MztcdC8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGRcbiYjNDM7XHQvLyBwb3dlci11cCB0aGUgRUVQUk9NIHZlbmRvciBQTiBmaWVsZCByZWFkcyBiYWNrIHdpdGggbm9uLXByaW50YWJsZVxuJiM0MztcdC8vIGdhcmJhZ2UgcGFzdCB0aGUgbGVnaXRpbWF0ZSBzdHJpbmcgaW5zdGVhZCBvZiBzcGFjZSBwYWRkaW5nLCBzb1xuJiM0MztcdC8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LlxuJiM0MztcdFNGUF9RVUlSS19GX1BSRUZJWChcJiMzNDtPRU1cJiMzNDssIFwmIzM0O1hHU1BPTlNUMjAwMVwmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksXG4mIzQzO1xuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0yLjVHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMFwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbiBcdFNGUF9RVUlSS19GKFwmIzM0O1R1cnJpc1wmIzM0OywgXCYjMzQ7UlRTRlAtMTBHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuQEAgLTYyOSwxMyAmIzQzOzY1MywxNiBAQCBzdGF0aWMgc2l6ZV90IHNmcF9zdHJsZW4oY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbWF4bGVuKVxuIFx0cmV0dXJuIHNpemU7XG4gfVxuIFxuLXN0YXRpYyBib29sIHNmcF9tYXRjaChjb25zdCBjaGFyICpxcywgY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKVxuJiM0MztzdGF0aWMgYm9vbCBzZnBfbWF0Y2goY29uc3QgY2hhciAqcXMsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgYm9vbCBwcmVmaXgpXG4ge1xuJiM0MztcdHNpemVfdCBxc19sZW47XG4mIzQzO1xuIFx0aWYgKCFxcylcbiBcdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAoc3RybGVuKHFzKSAhPSBsZW4pXG4mIzQzO1x0cXNfbGVuID0gc3RybGVuKHFzKTtcbiYjNDM7XHRpZiAocHJlZml4ID8gcXNfbGVuIFx1MDAzZSBsZW4gOiBxc19sZW4gIT0gbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTtcbiYjNDM7XHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgcXNfbGVuKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxuQEAgLTY0OCw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxuIFx0cHMgPSBzZnBfc3RybGVuKGlkLVx1MDAzZWJhc2UudmVuZG9yX3BuLCBBUlJBWV9TSVpFKGlkLVx1MDAzZWJhc2UudmVuZG9yX3BuKSk7XG4gXG4gXHRmb3IgKGkgPSAwLCBxID0gc2ZwX3F1aXJrczsgaSBcdTAwM2MgQVJSQVlfU0laRShzZnBfcXVpcmtzKTsgaSYjNDM7JiM0MzssIHEmIzQzOyYjNDM7KVxuLVx0XHRpZiAoc2ZwX21hdGNoKHEtXHUwMDNldmVuZG9yLCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9uYW1lLCB2cykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzZnBfbWF0Y2gocS1cdTAwM2VwYXJ0LCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMpKVxuJiM0MztcdFx0aWYgKHNmcF9tYXRjaChxLVx1MDAzZXZlbmRvciwgaWQtXHUwMDNlYmFzZS52ZW5kb3JfbmFtZSwgdnMsIGZhbHNlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzZnBfbWF0Y2gocS1cdTAwM2VwYXJ0LCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMsXG4mIzQzO1x0XHRcdCAgICAgIHEtXHUwMDNlcGFydF9wcmVmaXhfbWF0Y2gpKVxuIFx0XHRcdHJldHVybiBxO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG5pbmRleCA4NzlkZmY3YWZlNmE0Li4xOWZlMjlkODQ0YTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQCBzdHJ1Y3Qgc2ZwX3F1aXJrIHtcbiBcdHZvaWQgKCpzdXBwb3J0KShjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsXG4gXHRcdFx0c3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2Fwcyk7XG4gXHR2b2lkICgqZml4dXApKHN0cnVjdCBzZnAgKnNmcCk7XG4mIzQzO1x0Ym9vbCBwYXJ0X3ByZWZpeF9tYXRjaDtcbiB9O1xuIFxuIHN0cnVjdCBzZnBfc29ja2V0X29wcyB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmtzIGZvciBTRlAgbW9kdWxlcyAoRlMgWEdTLVNGUC1PTlQtTUFDSSBhbmQgT0VNIFhHU1BPTlNUMjAwMSkgYW5kIGEgdHJpdmlhbCBwcmVmaXggbWF0Y2hpbmcgbG9naWMgZm9yIHRoZSBwYXJ0IG5hbWUgaW4gdGhlIFNGUCBFRVBST00gSUQuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHNwZWNpZmljIHBoeXNpY2FsIFNGUCBtb2R1bGVzIGFyZSBwcm9iZWQgb3ZlciBJMkMsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNDY5ZTQ5ZmNkZTJiMzIzMjZhYjc1YTM4ZjZjNjcxNTVmMzgwZDQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTA6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKaW5kZXggNTA4YjZjYzhlZGRjZi4uMmVjOTE0NjZhY2RmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwpAQCAtNTE2LDYgJiM0Mzs1MTYsMTUgQEAgc3RhdGljIHZvaWQgc2ZwX3F1aXJrX3VibnRfdWZfaW5zdGFudChjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCiAJeyAudmVuZG9yID0gX3YsIC5wYXJ0ID0gX3AsIC5zdXBwb3J0ID0gX3MsIC5maXh1cCA9IF9mLCB9CiAjZGVmaW5lIFNGUF9RVUlSS19TKF92LCBfcCwgX3MpIFNGUF9RVUlSSyhfdiwgX3AsIF9zLCBOVUxMKQogI2RlZmluZSBTRlBfUVVJUktfRihfdiwgX3AsIF9mKSBTRlBfUVVJUksoX3YsIF9wLCBOVUxMLCBfZikKJiM0MzsvKiBMaWtlIFNGUF9RVUlSS19GLCBidXQgbWF0Y2hlcyB0aGUgcGFydCBhcyBhIHByZWZpeDsgdGhlIHZlbmRvciBuYW1lCiYjNDM7ICogaXMgc3RpbGwgbWF0Y2hlZCBleGFjdGx5LiBVc2UgZm9yIG1vZHVsZXMgd2hvc2UgRUVQUk9NIHZlbmRvciBQTgomIzQzOyAqIGZpZWxkIHJlYWRzIGJhY2sgd2l0aCBnYXJiYWdlIHBhc3QgdGhlIGxlZ2l0aW1hdGUgY2hhcmFjdGVycyBpbnN0ZWFkCiYjNDM7ICogb2YgdGhlIFNGRi04NDcyLW1hbmRhdGVkIHNwYWNlIHBhZGRpbmcsIHNvIHNmcF9zdHJsZW4gY2FuJiMzOTt0IHRyaW0gdGhlCiYjNDM7ICogZmllbGQgZG93biB0byB0aGUgbGVnaXRpbWF0ZSBsZW5ndGguCiYjNDM7ICovCiYjNDM7I2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXAomIzQzOwl7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBOVUxMLCAuZml4dXAgPSBfZiwgXAomIzQzOwkgIC5wYXJ0X3ByZWZpeF9tYXRjaCA9IHRydWUgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7CiAJLy8gQWxjYXRlbCBMdWNlbnQgRy0wMTBTLVAgY2FuIG9wZXJhdGUgYXQgMjUwMGJhc2UtWCwgYnV0IGluY29ycmVjdGx5CkBAIC01NDgsNiAmIzQzOzU1NywxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7CiAJU0ZQX1FVSVJLKCYjMzQ7RlMmIzM0OywgJiMzNDtHUE9OLU9OVS0zNC0yMEJJJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgsCiAJCSAgc2ZwX2ZpeHVwX2lnbm9yZV90eF9mYXVsdCksCiAKJiM0MzsJLy8gRmliZXJzdG9yZSBYR1MtU0ZQLU9OVC1NQUNJIGlzIGEgTUFDLW1vZGUgWEdTLVBPTiBPTlQgc3RpY2sgd2l0aAomIzQzOwkvLyBPTlQtY2xhc3Mgc2VyaWFsLXBhc3N0aHJvdWdoIFRYX0ZBVUxUL0xPUyB3aXJpbmcgYW5kIHNsb3cgc3RhcnR1cDsKJiM0MzsJLy8gbWFzayBib3RoIHNpZ25hbHMgYW5kIGV4dGVuZCBUX1NUQVJUX1VQIHZpYSB0aGUgcG90cm9uIGZpeHVwLiBUaGUKJiM0MzsJLy8gUE4gaXMgdGhlIHByb2R1Y3QgbmFtZSAoWEdTLVNGUC1PTlQtTUFDLUkpIHRydW5jYXRlZCBhdCB0aGUgMTYtYnl0ZQomIzQzOwkvLyBmaWVsZCB3aWR0aCwgc28gdGhlIGZpZWxkIGlzIGZ1bGx5IG9jY3VwaWVkIGFuZCBtYXRjaGVzIGV4YWN0bHkuCiYjNDM7CVNGUF9RVUlSS19GKCYjMzQ7RlMmIzM0OywgJiMzNDtYR1MtU0ZQLU9OVC1NQUNJJiMzNDssIHNmcF9maXh1cF9wb3Ryb24pLAomIzQzOwogCVNGUF9RVUlSS19GKCYjMzQ7SEFMTnkmIzM0OywgJiMzNDtITC1HU0ZQJiMzNDssIHNmcF9maXh1cF9oYWxueV9nc2ZwKSwKIAogCVNGUF9RVUlSS19GKCYjMzQ7SC1DT00mIzM0OywgJiMzNDtTUFA0MjVILUdBQjQmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksCkBAIC02MDgsNiAmIzQzOzYyNCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7CiAJU0ZQX1FVSVJLX1MoJiMzNDtPRU0mIzM0OywgJiMzNDtTRlAtMi41Ry1MSDIwLUEmIzM0Oywgc2ZwX3F1aXJrXzI1MDBiYXNleCksCiAJU0ZQX1FVSVJLX0YoJiMzNDtPRU0mIzM0OywgJiMzNDtSVFNGUC0xMCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLAogCVNGUF9RVUlSS19GKCYjMzQ7T0VNJiMzNDssICYjMzQ7UlRTRlAtMTBHJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksCiYjNDM7CiYjNDM7CS8vIE9FTSBYR1NQT05TVDIwMDEgaXMgYW4gWEdTLVBPTiBPTlQgc3RpY2sgd2l0aCBicm9rZW4gVFhfRkFVTFQgYW5kCiYjNDM7CS8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGQKJiM0MzsJLy8gcG93ZXItdXAgdGhlIEVFUFJPTSB2ZW5kb3IgUE4gZmllbGQgcmVhZHMgYmFjayB3aXRoIG5vbi1wcmludGFibGUKJiM0MzsJLy8gZ2FyYmFnZSBwYXN0IHRoZSBsZWdpdGltYXRlIHN0cmluZyBpbnN0ZWFkIG9mIHNwYWNlIHBhZGRpbmcsIHNvCiYjNDM7CS8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LgomIzQzOwlTRlBfUVVJUktfRl9QUkVGSVgoJiMzNDtPRU0mIzM0OywgJiMzNDtYR1NQT05TVDIwMDEmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksCiYjNDM7CiAJU0ZQX1FVSVJLX0YoJiMzNDtUdXJyaXMmIzM0OywgJiMzNDtSVFNGUC0yLjVHJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksCiAJU0ZQX1FVSVJLX0YoJiMzNDtUdXJyaXMmIzM0OywgJiMzNDtSVFNGUC0xMCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLAogCVNGUF9RVUlSS19GKCYjMzQ7VHVycmlzJiMzNDssICYjMzQ7UlRTRlAtMTBHJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksCkBAIC02MjksMTMgJiM0Mzs2NTMsMTYgQEAgc3RhdGljIHNpemVfdCBzZnBfc3RybGVuKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG1heGxlbikKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCiYjNDM7c3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KQogewomIzQzOwlzaXplX3QgcXNfbGVuOwomIzQzOwogCWlmICghcXMpCiAJCXJldHVybiB0cnVlOwotCWlmIChzdHJsZW4ocXMpICE9IGxlbikKJiM0MzsJcXNfbGVuID0gc3RybGVuKHFzKTsKJiM0MzsJaWYgKHByZWZpeCA/IHFzX2xlbiAmZ3Q7IGxlbiA6IHFzX2xlbiAhPSBsZW4pCiAJCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTsKJiM0MzsJcmV0dXJuICFzdHJuY21wKHFzLCBzdHIsIHFzX2xlbik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCkKQEAgLTY0OCw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKQogCXBzID0gc2ZwX3N0cmxlbihpZC0mZ3Q7YmFzZS52ZW5kb3JfcG4sIEFSUkFZX1NJWkUoaWQtJmd0O2Jhc2UudmVuZG9yX3BuKSk7CiAKIAlmb3IgKGkgPSAwLCBxID0gc2ZwX3F1aXJrczsgaSAmbHQ7IEFSUkFZX1NJWkUoc2ZwX3F1aXJrcyk7IGkmIzQzOyYjNDM7LCBxJiM0MzsmIzQzOykKLQkJaWYgKHNmcF9tYXRjaChxLSZndDt2ZW5kb3IsIGlkLSZndDtiYXNlLnZlbmRvcl9uYW1lLCB2cykgJmFtcDsmYW1wOwotCQkgICAgc2ZwX21hdGNoKHEtJmd0O3BhcnQsIGlkLSZndDtiYXNlLnZlbmRvcl9wbiwgcHMpKQomIzQzOwkJaWYgKHNmcF9tYXRjaChxLSZndDt2ZW5kb3IsIGlkLSZndDtiYXNlLnZlbmRvcl9uYW1lLCB2cywgZmFsc2UpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBzZnBfbWF0Y2gocS0mZ3Q7cGFydCwgaWQtJmd0O2Jhc2UudmVuZG9yX3BuLCBwcywKJiM0MzsJCQkgICAgICBxLSZndDtwYXJ0X3ByZWZpeF9tYXRjaCkpCiAJCQlyZXR1cm4gcTsKIAogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oCmluZGV4IDg3OWRmZjdhZmU2YTQuLjE5ZmUyOWQ4NDRhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBAIHN0cnVjdCBzZnBfcXVpcmsgewogCXZvaWQgKCpzdXBwb3J0KShjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCiAJCQlzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzKTsKIAl2b2lkICgqZml4dXApKHN0cnVjdCBzZnAgKnNmcCk7CiYjNDM7CWJvb2wgcGFydF9wcmVmaXhfbWF0Y2g7CiB9OwogCiBzdHJ1Y3Qgc2ZwX3NvY2tldF9vcHMgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0ZQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5oYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBuZXcgcXVpcmsgbWFjcm8sIGBTRlBfUVVJUktfRl9QUkVGSVhgLiBUaGlzIG1hY3JvIGlzIHNldHRpbmcgYSBgcGFydF9wcmVmaXhfbWF0Y2hgIGZpZWxkIGluIHRoZSBgc3RydWN0IHNmcF9xdWlya2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyBhIGNoYW5nZSBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIG1hdGNoaW5nIFNGUCBtb2R1bGUgcGFydCBuYW1lcy4KClRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgc2ZwX21hdGNoYCBmdW5jdGlvbiwgdG9vLiBOb3csIGl0IHRha2VzIGEgYGJvb2wgcHJlZml4YCBhcmd1bWVudC4gU28sIGl0JiMzOTtzIGVpdGhlciBnb2luZyB0byBtYXRjaCB0aGUgZnVsbCBwYXJ0IG5hbWUgb3IganVzdCBhIHByZWZpeCwgZGVwZW5kaW5nIG9uIHRoYXQgYXJndW1lbnQuIFRoaXMgaXMgY2xlYXJseSB0aGUga2V5IGNoYW5nZSBpbiB0aGUgbWF0Y2hpbmcgbG9naWMuIFRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZXhwYW5kaW5nIHRoZSBtYXRjaGluZyBjcml0ZXJpYS4KClRoZW4sIHRoZXJlIGFyZSB0aGUgdHdvIG5ldyBxdWlya3MgYWRkZWQgdG8gdGhlIGBzZnBfcXVpcmtzYCBhcnJheS4gVGhlIGZpcnN0LCB1c2luZyBgU0ZQX1FVSVJLX0ZgLCBsb29rcyBwcmV0dHkgc3RhbmRhcmQuIEJ1dCB0aGUgc2Vjb25kLCAqdXNpbmcqIHRoZSBuZXcgYFNGUF9RVUlSS19GX1BSRUZJWGAsIGlzIHRoZSBpbXBvcnRhbnQgb25lLiBJdCYjMzk7cyBtYXRjaGluZyBhIHByZWZpeCBvZiAmIzM0O09FTSYjMzQ7IGFuZCAmIzM0O1hHU1BPTlNUMjAwMSYjMzQ7LiBBbmQgdGhlIGBzZnBfZml4dXBfcG90cm9uYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBzbyB0aGlzIG11c3QgYmUgcmVsYXRlZCB0byBzb21lIFBPVFJPTiBtb2R1bGVzLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAuIFRoaXMgaXMgYWxsIGluIHRoZSBTRlAgbW9kdWxlIGRyaXZlciDigJMgdGhhdCYjMzk7cyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcGFydC4gTXkgZmlyc3QgdGhvdWdodCBpczogY2FuIHdlIGZ1enogdGhpcz8gQ2FuIHdlIGVtdWxhdGUgU0ZQIG1vZHVsZXMgb3Igc2VuZCBjcmFmdGVkIEkyQyBjb21tYW5kcz8gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBjb2RlIGJlY2F1c2UgdGhpcyBsb29rcyBsaWtlIGFuIEkyQyBkcml2ZXIuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXR5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaTJjX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNmcC5jYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIGhvdyBgc2ZwLmNgIGlzIGFjdHVhbGx5IGJyb3VnaHQgdG8gbGlmZS4gSSB3YW50IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZG9lcyBpdCBiZWdpbj8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcG9wdWxhdGVkPyYjMzQ7IEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgc3RhcnR1cCBwcm9jZXNzIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBhbmQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBkZXNpZ24gaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBiZSBtaXNzZWQuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBjb3JlIGBzZnAuY2Agc2V0dXAgdG8gY29uZmlybSBkYXRhIHN0cnVjdHVyZXMgYXJlIHZhbGlkIGFuZCBjb25maWd1cmVkIGFzIGV4cGVjdGVkLCBzbyBJIGNhbiBjb25maXJtIG15IHRoZW9yeSBvZiBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNmcC5jYCAtIExldCYjMzk7cyBHZXQgdG8gdGhlIENvcmUqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhlIGZpbmFsIHNlY3Rpb24gb2YgYHNmcC5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBoZWFydCBvZiB3aGF0ZXZlciYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgbGlicmFyeSBvciBtb2R1bGUgcmVzaWRlcyBpbiB0aGlzIGZpbGUuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgdGhlcmUgYXJlIHByb2JhYmx5IGZ1bmN0aW9uIGNhbGxzIHRoZXJlLCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZmlsZSBlbmRzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBxdWljayBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGFzc3VtaW5nIHRoYXQgdGhlIG1haW4gbWV0aG9kIGlzIGluIHRoaXMgZmlsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY29kZSB0byByZXZpZXcuIEkga25vdyB0aGF0IGlmIEkgdW5kZXJzdGFuZCB3aGF0IHRoZSBtb2R1bGUgZG9lcyBpbiBnZW5lcmFsLCBhbmQgdGhlbiBjYW4gZHJpbGwgZG93biBpbnRvIHRoZSBtZXRob2QsIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGFuZCB0aGVuIGdldCB0byB0aGUgYnVzaW5lc3Mgb2Ygc29sdmluZyB3aGF0ZXZlciB0aGlzIG1vZHVsZSBpcyBtZWFudCB0byBzb2x2ZS4KCkkgYW0gdXNpbmcgbXkgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIHRvIGd1aWRlIG15IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTM0ODg9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5Ny1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozNDk4Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2ZwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBsYXRmb3JtIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBxdWlyaywgc3BlY2lmaWNhbGx5IGZvciBzb21lIFNGUCBtb2R1bGVzLiBUaGUgdHdvIG1lbnRpb25lZCwgRlMgWEdTLVNGUC1PTlQtTUFDSSBhbmQgT0VNIFhHU1BPTlNUMjAwMSwgYXJlIHRoZSB0YXJnZXRzIG9mIHRoaXMgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgc2ZwX21hdGNoYCB0byBhbGxvdyBmb3IgcHJlZml4IG1hdGNoaW5nIG9mIHRoZSBwYXJ0IG5hbWUsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBldmVuIHJlYWNoYWJsZSB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBwcmVzZW50LiBTRlAgbW9kdWxlcyBhcmUgdHlwaWNhbGx5IGRlc2NyaWJlZCB1c2luZyBkZXZpY2UgdHJlZSBvciBBQ1BJLCBzbyB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoZSBzeXN0ZW0ga25vdyBhYm91dCB0aGUgcHJlc2VuY2Ugb2YgdGhvc2Ugc3BlY2lmaWMgbW9kdWxlcz8gQ2FuIHRoaXMgYmUgZnV6emVkIGJ5IHN5emthbGxlcj8gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gaW5qZWN0IHRoZXNlIHBsYXRmb3JtIGRldmljZXMgdXNpbmcgYHN5el9kZXZgIG9yIHRocm91Z2ggbmV0bGluayBvciBldGh0b29sIGludGVyZmFjZXMsIGFzc3VtaW5nIHRoZXkmIzM5O3JlIGV4cG9zZWQuCgpIb3dldmVyLCB0aGlzIGlzIHJlYWxseSBqdXN0IGEgc2ltcGxlIHRhYmxlIGxvb2t1cCBiYXNlZCBvbiB0aGUgRUVQUk9NIElEIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgbW9kdWxlLiBUaGlzIElEIGlzIHJlYWQgZnJvbSB0aGUgSTJDIGJ1cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIHdoZXJlIGBzZnBfbG9va3VwX3F1aXJrYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCB0aGUgcGF0aCBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGV2ZW50IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBjYWxsLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9sb29rdXBfcXVpcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTY1Nj1zdGF0aWMgYm9vbCBzZnBfbWF0Y2goY29uc3QgY2hhciAqcXMsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgYm9vbCBwcmVmaXgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTY2Ny1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTY2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTI1MDI9c3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKnNmcCwgYm9vbCByZXBvcnQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI2NzYtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjY3NzpcdHNmcC1cdTAwM2VxdWlyayA9IHNmcF9sb29rdXBfcXVpcmsoXHUwMDI2aWQpO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI2NzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTAKCQkJCQkJCW91dHB1dDogMTEzCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1GYWxzZTogU0ZQIE1vZHVsZSBRdWlyayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYSBmZXcgbmV3IHF1aXJrcyByZWxhdGVkIHRvIFNGUCBtb2R1bGVzLiBUaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGBzZnBfc21fbW9kX3Byb2JlYCwgaXMgdHJpZ2dlcmVkIHdoZW4gYSBTeXN0ZW0gRmFicmljIFBsdWcgKFNGUCkgbW9kdWxlIGlzIHByb2JlZC4gVGhpcyBpbXBsaWVzIHRoZSBwcmVzZW5jZSBvZiBhbiBJMkMgYnVzIGFuZCBhIHBoeXNpY2FsbHkgY29ubmVjdGVkIFNGUCBtb2R1bGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBJMkMgZGV2aWNlIHRoYXQmIzM5O3MgcmVzcG9uZGluZyBhdCB0aGUgU0ZQIEVFUFJPTSBhZGRyZXNzLiBBIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgU3l6a2FsbGVyLCB0aGUgZnV6emVyIHdlJiMzOTtyZSB1c2luZywgZG9lc24mIzM5O3QgY3VycmVudGx5IGVtdWxhdGUgdGhlc2UgU0ZQIEkyQyBFRVBST01zLgoKR2l2ZW4gdGhlIHNldHVwIHJlcXVpcmVkLCBteSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0LiBUaGUgY2hhbmdlIGl0c2VsZiBsb29rcyBleGNlZWRpbmdseSB0cml2aWFsOiBhIHByZWZpeCBtYXRjaCBmb3IgYSBxdWlyayBhbmQgdHdvIGJyYW5kLW5ldyBxdWlya3MgYXJlIGJlaW5nIGludHJvZHVjZWQuIElzIHRoZXJlIGFueSByZWFsIGJlbmVmaXQgdG8gZGVkaWNhdGUgZnV6emVyIGN5Y2xlcyB0byB0aGlzPwoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZnBfbWF0Y2hgIGZ1bmN0aW9uLCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gaGlkZGVuIGNvbXBsZXhpdHkuIEFoLCBpdCYjMzk7cyBqdXN0IGRvaW5nIGEgYHN0cm5jbXBgLiBWZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4KCkJhc2VkIG9uIGV2ZXJ5dGhpbmcgSSYjMzk7dmUgc2VlbiwgSSYjMzk7bSBnb2luZyB0byBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwcmltYXJ5IHJlYXNvbiBpcyB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlyayB0YWlsb3JlZCB0byBTRlAgbW9kdWxlcy4gSXQgd291bGQgZWl0aGVyIG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgb3IgSTJDIGVtdWxhdGlvbiBvZiB0aGUgU0ZQJiMzOTtzIEVFUFJPTSwgYW5kIG5laXRoZXIgb2YgdGhvc2UgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBbHNvLCB0aGUgY2hhbmdlIGluIHRoZSBsb2dpYyBpcyBuZWdsaWdpYmxlLiBJdCYjMzk7cyBzaW1wbHkgbm90IHdvcnRoIHRoZSBlZmZvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjM4LjA5NTU5NjY0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTkwNzc1MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTA6MzguMDk1NjAwOTA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MDYyMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ2OWU0OWZjZGUyYjMyMzI2YWI3NWEzOGY2YzY3MTU1ZjM4MGQ0OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG5pbmRleCA1MDhiNmNjOGVkZGNmLi4yZWM5MTQ2NmFjZGYzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbkBAIC01MTYsNiArNTE2LDE1IEBAIHN0YXRpYyB2b2lkIHNmcF9xdWlya191Ym50X3VmX2luc3RhbnQoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkLFxcbiBcXHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBfcywgLmZpeHVwID0gX2YsIH1cXG4gI2RlZmluZSBTRlBfUVVJUktfUyhfdiwgX3AsIF9zKSBTRlBfUVVJUksoX3YsIF9wLCBfcywgTlVMTClcXG4gI2RlZmluZSBTRlBfUVVJUktfRihfdiwgX3AsIF9mKSBTRlBfUVVJUksoX3YsIF9wLCBOVUxMLCBfZilcXG4rLyogTGlrZSBTRlBfUVVJUktfRiwgYnV0IG1hdGNoZXMgdGhlIHBhcnQgYXMgYSBwcmVmaXg7IHRoZSB2ZW5kb3IgbmFtZVxcbisgKiBpcyBzdGlsbCBtYXRjaGVkIGV4YWN0bHkuIFVzZSBmb3IgbW9kdWxlcyB3aG9zZSBFRVBST00gdmVuZG9yIFBOXFxuKyAqIGZpZWxkIHJlYWRzIGJhY2sgd2l0aCBnYXJiYWdlIHBhc3QgdGhlIGxlZ2l0aW1hdGUgY2hhcmFjdGVycyBpbnN0ZWFkXFxuKyAqIG9mIHRoZSBTRkYtODQ3Mi1tYW5kYXRlZCBzcGFjZSBwYWRkaW5nLCBzbyBzZnBfc3RybGVuIGNhbid0IHRyaW0gdGhlXFxuKyAqIGZpZWxkIGRvd24gdG8gdGhlIGxlZ2l0aW1hdGUgbGVuZ3RoLlxcbisgKi9cXG4rI2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXFxcXFxcbitcXHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBOVUxMLCAuZml4dXAgPSBfZiwgXFxcXFxcbitcXHQgIC5wYXJ0X3ByZWZpeF9tYXRjaCA9IHRydWUgfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xcbiBcXHQvLyBBbGNhdGVsIEx1Y2VudCBHLTAxMFMtUCBjYW4gb3BlcmF0ZSBhdCAyNTAwYmFzZS1YLCBidXQgaW5jb3JyZWN0bHlcXG5AQCAtNTQ4LDYgKzU1NywxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7XFxuIFxcdFNGUF9RVUlSSyhcXFwiRlNcXFwiLCBcXFwiR1BPTi1PTlUtMzQtMjBCSVxcXCIsIHNmcF9xdWlya18yNTAwYmFzZXgsXFxuIFxcdFxcdCAgc2ZwX2ZpeHVwX2lnbm9yZV90eF9mYXVsdCksXFxuIFxcbitcXHQvLyBGaWJlcnN0b3JlIFhHUy1TRlAtT05ULU1BQ0kgaXMgYSBNQUMtbW9kZSBYR1MtUE9OIE9OVCBzdGljayB3aXRoXFxuK1xcdC8vIE9OVC1jbGFzcyBzZXJpYWwtcGFzc3Rocm91Z2ggVFhfRkFVTFQvTE9TIHdpcmluZyBhbmQgc2xvdyBzdGFydHVwO1xcbitcXHQvLyBtYXNrIGJvdGggc2lnbmFscyBhbmQgZXh0ZW5kIFRfU1RBUlRfVVAgdmlhIHRoZSBwb3Ryb24gZml4dXAuIFRoZVxcbitcXHQvLyBQTiBpcyB0aGUgcHJvZHVjdCBuYW1lIChYR1MtU0ZQLU9OVC1NQUMtSSkgdHJ1bmNhdGVkIGF0IHRoZSAxNi1ieXRlXFxuK1xcdC8vIGZpZWxkIHdpZHRoLCBzbyB0aGUgZmllbGQgaXMgZnVsbHkgb2NjdXBpZWQgYW5kIG1hdGNoZXMgZXhhY3RseS5cXG4rXFx0U0ZQX1FVSVJLX0YoXFxcIkZTXFxcIiwgXFxcIlhHUy1TRlAtT05ULU1BQ0lcXFwiLCBzZnBfZml4dXBfcG90cm9uKSxcXG4rXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJIQUxOeVxcXCIsIFxcXCJITC1HU0ZQXFxcIiwgc2ZwX2ZpeHVwX2hhbG55X2dzZnApLFxcbiBcXG4gXFx0U0ZQX1FVSVJLX0YoXFxcIkgtQ09NXFxcIiwgXFxcIlNQUDQyNUgtR0FCNFxcXCIsIHNmcF9maXh1cF9wb3Ryb24pLFxcbkBAIC02MDgsNiArNjI0LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcXG4gXFx0U0ZQX1FVSVJLX1MoXFxcIk9FTVxcXCIsIFxcXCJTRlAtMi41Ry1MSDIwLUFcXFwiLCBzZnBfcXVpcmtfMjUwMGJhc2V4KSxcXG4gXFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJSVFNGUC0xMFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJPRU1cXFwiLCBcXFwiUlRTRlAtMTBHXFxcIiwgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKSxcXG4rXFxuK1xcdC8vIE9FTSBYR1NQT05TVDIwMDEgaXMgYW4gWEdTLVBPTiBPTlQgc3RpY2sgd2l0aCBicm9rZW4gVFhfRkFVTFQgYW5kXFxuK1xcdC8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGRcXG4rXFx0Ly8gcG93ZXItdXAgdGhlIEVFUFJPTSB2ZW5kb3IgUE4gZmllbGQgcmVhZHMgYmFjayB3aXRoIG5vbi1wcmludGFibGVcXG4rXFx0Ly8gZ2FyYmFnZSBwYXN0IHRoZSBsZWdpdGltYXRlIHN0cmluZyBpbnN0ZWFkIG9mIHNwYWNlIHBhZGRpbmcsIHNvXFxuK1xcdC8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LlxcbitcXHRTRlBfUVVJUktfRl9QUkVGSVgoXFxcIk9FTVxcXCIsIFxcXCJYR1NQT05TVDIwMDFcXFwiLCBzZnBfZml4dXBfcG90cm9uKSxcXG4rXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJUdXJyaXNcXFwiLCBcXFwiUlRTRlAtMi41R1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJUdXJyaXNcXFwiLCBcXFwiUlRTRlAtMTBcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbiBcXHRTRlBfUVVJUktfRihcXFwiVHVycmlzXFxcIiwgXFxcIlJUU0ZQLTEwR1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuQEAgLTYyOSwxMyArNjUzLDE2IEBAIHN0YXRpYyBzaXplX3Qgc2ZwX3N0cmxlbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pXFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBzZnBfbWF0Y2goY29uc3QgY2hhciAqcXMsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbilcXG4rc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KVxcbiB7XFxuK1xcdHNpemVfdCBxc19sZW47XFxuK1xcbiBcXHRpZiAoIXFzKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0aWYgKHN0cmxlbihxcykgIT0gbGVuKVxcbitcXHRxc19sZW4gPSBzdHJsZW4ocXMpO1xcbitcXHRpZiAocHJlZml4ID8gcXNfbGVuIFxcdTAwM2UgbGVuIDogcXNfbGVuICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTtcXG4rXFx0cmV0dXJuICFzdHJuY21wKHFzLCBzdHIsIHFzX2xlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcXG5AQCAtNjQ4LDggKzY3NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcXG4gXFx0cHMgPSBzZnBfc3RybGVuKGlkLVxcdTAwM2ViYXNlLnZlbmRvcl9wbiwgQVJSQVlfU0laRShpZC1cXHUwMDNlYmFzZS52ZW5kb3JfcG4pKTtcXG4gXFxuIFxcdGZvciAoaSA9IDAsIHEgPSBzZnBfcXVpcmtzOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzZnBfcXVpcmtzKTsgaSsrLCBxKyspXFxuLVxcdFxcdGlmIChzZnBfbWF0Y2gocS1cXHUwMDNldmVuZG9yLCBpZC1cXHUwMDNlYmFzZS52ZW5kb3JfbmFtZSwgdnMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBzZnBfbWF0Y2gocS1cXHUwMDNlcGFydCwgaWQtXFx1MDAzZWJhc2UudmVuZG9yX3BuLCBwcykpXFxuK1xcdFxcdGlmIChzZnBfbWF0Y2gocS1cXHUwMDNldmVuZG9yLCBpZC1cXHUwMDNlYmFzZS52ZW5kb3JfbmFtZSwgdnMsIGZhbHNlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc2ZwX21hdGNoKHEtXFx1MDAzZXBhcnQsIGlkLVxcdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMsXFxuK1xcdFxcdFxcdCAgICAgIHEtXFx1MDAzZXBhcnRfcHJlZml4X21hdGNoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHE7XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oXFxuaW5kZXggODc5ZGZmN2FmZTZhNC4uMTlmZTI5ZDg0NGExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmhcXG5AQCAtMTIsNiArMTIsNyBAQCBzdHJ1Y3Qgc2ZwX3F1aXJrIHtcXG4gXFx0dm9pZCAoKnN1cHBvcnQpKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCxcXG4gXFx0XFx0XFx0c3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2Fwcyk7XFxuIFxcdHZvaWQgKCpmaXh1cCkoc3RydWN0IHNmcCAqc2ZwKTtcXG4rXFx0Ym9vbCBwYXJ0X3ByZWZpeF9tYXRjaDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzZnBfc29ja2V0X29wcyB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjM5LjM0MzQwNzA5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0OTQyOTUyNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBmb3IgU0ZQIG1vZHVsZXMgKEZTIFhHUy1TRlAtT05ULU1BQ0kgYW5kIE9FTSBYR1NQT05TVDIwMDEpIGFuZCBhIHRyaXZpYWwgcHJlZml4IG1hdGNoaW5nIGxvZ2ljIGZvciB0aGUgcGFydCBuYW1lIGluIHRoZSBTRlAgRUVQUk9NIElELiBUaGlzIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBzcGVjaWZpYyBwaHlzaWNhbCBTRlAgbW9kdWxlcyBhcmUgcHJvYmVkIG92ZXIgSTJDLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDY5ZTQ5ZmNkZTJiMzIzMjZhYjc1YTM4ZjZjNjcxNTVmMzgwZDQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTA6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDUwOGI2Y2M4ZWRkY2YuLjJlYzkxNDY2YWNkZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuQEAgLTUxNiw2ICs1MTYsMTUgQEAgc3RhdGljIHZvaWQgc2ZwX3F1aXJrX3VibnRfdWZfaW5zdGFudChjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsXG4gXHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBfcywgLmZpeHVwID0gX2YsIH1cbiAjZGVmaW5lIFNGUF9RVUlSS19TKF92LCBfcCwgX3MpIFNGUF9RVUlSSyhfdiwgX3AsIF9zLCBOVUxMKVxuICNkZWZpbmUgU0ZQX1FVSVJLX0YoX3YsIF9wLCBfZikgU0ZQX1FVSVJLKF92LCBfcCwgTlVMTCwgX2YpXG4rLyogTGlrZSBTRlBfUVVJUktfRiwgYnV0IG1hdGNoZXMgdGhlIHBhcnQgYXMgYSBwcmVmaXg7IHRoZSB2ZW5kb3IgbmFtZVxuKyAqIGlzIHN0aWxsIG1hdGNoZWQgZXhhY3RseS4gVXNlIGZvciBtb2R1bGVzIHdob3NlIEVFUFJPTSB2ZW5kb3IgUE5cbisgKiBmaWVsZCByZWFkcyBiYWNrIHdpdGggZ2FyYmFnZSBwYXN0IHRoZSBsZWdpdGltYXRlIGNoYXJhY3RlcnMgaW5zdGVhZFxuKyAqIG9mIHRoZSBTRkYtODQ3Mi1tYW5kYXRlZCBzcGFjZSBwYWRkaW5nLCBzbyBzZnBfc3RybGVuIGNhbid0IHRyaW0gdGhlXG4rICogZmllbGQgZG93biB0byB0aGUgbGVnaXRpbWF0ZSBsZW5ndGguXG4rICovXG4rI2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXFxcbitcdHsgLnZlbmRvciA9IF92LCAucGFydCA9IF9wLCAuc3VwcG9ydCA9IE5VTEwsIC5maXh1cCA9IF9mLCBcXFxuK1x0ICAucGFydF9wcmVmaXhfbWF0Y2ggPSB0cnVlIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7XG4gXHQvLyBBbGNhdGVsIEx1Y2VudCBHLTAxMFMtUCBjYW4gb3BlcmF0ZSBhdCAyNTAwYmFzZS1YLCBidXQgaW5jb3JyZWN0bHlcbkBAIC01NDgsNiArNTU3LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdFNGUF9RVUlSSyhcIkZTXCIsIFwiR1BPTi1PTlUtMzQtMjBCSVwiLCBzZnBfcXVpcmtfMjUwMGJhc2V4LFxuIFx0XHQgIHNmcF9maXh1cF9pZ25vcmVfdHhfZmF1bHQpLFxuIFxuK1x0Ly8gRmliZXJzdG9yZSBYR1MtU0ZQLU9OVC1NQUNJIGlzIGEgTUFDLW1vZGUgWEdTLVBPTiBPTlQgc3RpY2sgd2l0aFxuK1x0Ly8gT05ULWNsYXNzIHNlcmlhbC1wYXNzdGhyb3VnaCBUWF9GQVVMVC9MT1Mgd2lyaW5nIGFuZCBzbG93IHN0YXJ0dXA7XG4rXHQvLyBtYXNrIGJvdGggc2lnbmFscyBhbmQgZXh0ZW5kIFRfU1RBUlRfVVAgdmlhIHRoZSBwb3Ryb24gZml4dXAuIFRoZVxuK1x0Ly8gUE4gaXMgdGhlIHByb2R1Y3QgbmFtZSAoWEdTLVNGUC1PTlQtTUFDLUkpIHRydW5jYXRlZCBhdCB0aGUgMTYtYnl0ZVxuK1x0Ly8gZmllbGQgd2lkdGgsIHNvIHRoZSBmaWVsZCBpcyBmdWxseSBvY2N1cGllZCBhbmQgbWF0Y2hlcyBleGFjdGx5LlxuK1x0U0ZQX1FVSVJLX0YoXCJGU1wiLCBcIlhHUy1TRlAtT05ULU1BQ0lcIiwgc2ZwX2ZpeHVwX3BvdHJvbiksXG4rXG4gXHRTRlBfUVVJUktfRihcIkhBTE55XCIsIFwiSEwtR1NGUFwiLCBzZnBfZml4dXBfaGFsbnlfZ3NmcCksXG4gXG4gXHRTRlBfUVVJUktfRihcIkgtQ09NXCIsIFwiU1BQNDI1SC1HQUI0XCIsIHNmcF9maXh1cF9wb3Ryb24pLFxuQEAgLTYwOCw2ICs2MjQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xuIFx0U0ZQX1FVSVJLX1MoXCJPRU1cIiwgXCJTRlAtMi41Ry1MSDIwLUFcIiwgc2ZwX3F1aXJrXzI1MDBiYXNleCksXG4gXHRTRlBfUVVJUktfRihcIk9FTVwiLCBcIlJUU0ZQLTEwXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXG4gXHRTRlBfUVVJUktfRihcIk9FTVwiLCBcIlJUU0ZQLTEwR1wiLCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuK1xuK1x0Ly8gT0VNIFhHU1BPTlNUMjAwMSBpcyBhbiBYR1MtUE9OIE9OVCBzdGljayB3aXRoIGJyb2tlbiBUWF9GQVVMVCBhbmRcbitcdC8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGRcbitcdC8vIHBvd2VyLXVwIHRoZSBFRVBST00gdmVuZG9yIFBOIGZpZWxkIHJlYWRzIGJhY2sgd2l0aCBub24tcHJpbnRhYmxlXG4rXHQvLyBnYXJiYWdlIHBhc3QgdGhlIGxlZ2l0aW1hdGUgc3RyaW5nIGluc3RlYWQgb2Ygc3BhY2UgcGFkZGluZywgc29cbitcdC8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LlxuK1x0U0ZQX1FVSVJLX0ZfUFJFRklYKFwiT0VNXCIsIFwiWEdTUE9OU1QyMDAxXCIsIHNmcF9maXh1cF9wb3Ryb24pLFxuK1xuIFx0U0ZQX1FVSVJLX0YoXCJUdXJyaXNcIiwgXCJSVFNGUC0yLjVHXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXG4gXHRTRlBfUVVJUktfRihcIlR1cnJpc1wiLCBcIlJUU0ZQLTEwXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXG4gXHRTRlBfUVVJUktfRihcIlR1cnJpc1wiLCBcIlJUU0ZQLTEwR1wiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuQEAgLTYyOSwxMyArNjUzLDE2IEBAIHN0YXRpYyBzaXplX3Qgc2ZwX3N0cmxlbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pXG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pXG4rc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KVxuIHtcbitcdHNpemVfdCBxc19sZW47XG4rXG4gXHRpZiAoIXFzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGlmIChzdHJsZW4ocXMpICE9IGxlbilcbitcdHFzX2xlbiA9IHN0cmxlbihxcyk7XG4rXHRpZiAocHJlZml4ID8gcXNfbGVuIFx1MDAzZSBsZW4gOiBxc19sZW4gIT0gbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTtcbitcdHJldHVybiAhc3RybmNtcChxcywgc3RyLCBxc19sZW4pO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayAqc2ZwX2xvb2t1cF9xdWlyayhjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpXG5AQCAtNjQ4LDggKzY3NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcbiBcdHBzID0gc2ZwX3N0cmxlbihpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgQVJSQVlfU0laRShpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbikpO1xuIFxuIFx0Zm9yIChpID0gMCwgcSA9IHNmcF9xdWlya3M7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2ZwX3F1aXJrcyk7IGkrKywgcSsrKVxuLVx0XHRpZiAoc2ZwX21hdGNoKHEtXHUwMDNldmVuZG9yLCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9uYW1lLCB2cykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzZnBfbWF0Y2gocS1cdTAwM2VwYXJ0LCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMpKVxuK1x0XHRpZiAoc2ZwX21hdGNoKHEtXHUwMDNldmVuZG9yLCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9uYW1lLCB2cywgZmFsc2UpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgc2ZwX21hdGNoKHEtXHUwMDNlcGFydCwgaWQtXHUwMDNlYmFzZS52ZW5kb3JfcG4sIHBzLFxuK1x0XHRcdCAgICAgIHEtXHUwMDNlcGFydF9wcmVmaXhfbWF0Y2gpKVxuIFx0XHRcdHJldHVybiBxO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG5pbmRleCA4NzlkZmY3YWZlNmE0Li4xOWZlMjlkODQ0YTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmhcbkBAIC0xMiw2ICsxMiw3IEBAIHN0cnVjdCBzZnBfcXVpcmsge1xuIFx0dm9pZCAoKnN1cHBvcnQpKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCxcbiBcdFx0XHRzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzKTtcbiBcdHZvaWQgKCpmaXh1cCkoc3RydWN0IHNmcCAqc2ZwKTtcbitcdGJvb2wgcGFydF9wcmVmaXhfbWF0Y2g7XG4gfTtcbiBcbiBzdHJ1Y3Qgc2ZwX3NvY2tldF9vcHMge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTA6MzkuMzQzNDE0NjQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczMDkxMTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNGUCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5oYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIG5ldyBxdWlyayBtYWNybywgYFNGUF9RVUlSS19GX1BSRUZJWGAuIFRoaXMgbWFjcm8gaXMgc2V0dGluZyBhIGBwYXJ0X3ByZWZpeF9tYXRjaGAgZmllbGQgaW4gdGhlIGBzdHJ1Y3Qgc2ZwX3F1aXJrYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgbWF0Y2hpbmcgU0ZQIG1vZHVsZSBwYXJ0IG5hbWVzLlxuXG5UaGV5J3ZlIG1vZGlmaWVkIHRoZSBgc2ZwX21hdGNoYCBmdW5jdGlvbiwgdG9vLiBOb3csIGl0IHRha2VzIGEgYGJvb2wgcHJlZml4YCBhcmd1bWVudC4gU28sIGl0J3MgZWl0aGVyIGdvaW5nIHRvIG1hdGNoIHRoZSBmdWxsIHBhcnQgbmFtZSBvciBqdXN0IGEgcHJlZml4LCBkZXBlbmRpbmcgb24gdGhhdCBhcmd1bWVudC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBrZXkgY2hhbmdlIGluIHRoZSBtYXRjaGluZyBsb2dpYy4gVGhleSdyZSBleHBsaWNpdGx5IGV4cGFuZGluZyB0aGUgbWF0Y2hpbmcgY3JpdGVyaWEuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgdHdvIG5ldyBxdWlya3MgYWRkZWQgdG8gdGhlIGBzZnBfcXVpcmtzYCBhcnJheS4gVGhlIGZpcnN0LCB1c2luZyBgU0ZQX1FVSVJLX0ZgLCBsb29rcyBwcmV0dHkgc3RhbmRhcmQuIEJ1dCB0aGUgc2Vjb25kLCAqdXNpbmcqIHRoZSBuZXcgYFNGUF9RVUlSS19GX1BSRUZJWGAsIGlzIHRoZSBpbXBvcnRhbnQgb25lLiBJdCdzIG1hdGNoaW5nIGEgcHJlZml4IG9mIFwiT0VNXCIgYW5kIFwiWEdTUE9OU1QyMDAxXCIuIEFuZCB0aGUgYHNmcF9maXh1cF9wb3Ryb25gIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIHNvIHRoaXMgbXVzdCBiZSByZWxhdGVkIHRvIHNvbWUgUE9UUk9OIG1vZHVsZXMuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAuIFRoaXMgaXMgYWxsIGluIHRoZSBTRlAgbW9kdWxlIGRyaXZlciDigJMgdGhhdCdzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwYXJ0LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBDYW4gd2UgZW11bGF0ZSBTRlAgbW9kdWxlcyBvciBzZW5kIGNyYWZ0ZWQgSTJDIGNvbW1hbmRzPyBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYW5kIHRoZSBhc3NvY2lhdGVkIGNvZGUgYmVjYXVzZSB0aGlzIGxvb2tzIGxpa2UgYW4gSTJDIGRyaXZlci4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdHkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjQ2LjA3NDMyOTAzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg4OTIzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2kyY19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMDo0Ni4xMjIyMjcyNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk2ODQ3ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzZnAuY2AgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIGhvdyBgc2ZwLmNgIGlzIGFjdHVhbGx5IGJyb3VnaHQgdG8gbGlmZS4gSSB3YW50IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEknbSB0aGlua2luZywgXCJXaGVyZSBkb2VzIGl0IGJlZ2luPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwb3B1bGF0ZWQ/XCIgSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBzdGFydHVwIHByb2Nlc3MgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGRlc2lnbiBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGJlIG1pc3NlZC4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgY29yZSBgc2ZwLmNgIHNldHVwIHRvIGNvbmZpcm0gZGF0YSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZCBhbmQgY29uZmlndXJlZCBhcyBleHBlY3RlZCwgc28gSSBjYW4gY29uZmlybSBteSB0aGVvcnkgb2Ygb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTA6NDkuMDE5MDc4MTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjQyNjgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjQ5LjA2NTMyODQ1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzM4MTE4NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzZnAuY2AgLSBMZXQncyBHZXQgdG8gdGhlIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIHRoZSBmaW5hbCBzZWN0aW9uIG9mIGBzZnAuY2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaGVhcnQgb2Ygd2hhdGV2ZXIncyBnb2luZyBvbiB3aXRoIHRoaXMgbGlicmFyeSBvciBtb2R1bGUgcmVzaWRlcyBpbiB0aGlzIGZpbGUuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGVyZSBhcmUgcHJvYmFibHkgZnVuY3Rpb24gY2FsbHMgdGhlcmUsIHNvIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZpbGUgZW5kcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgZ29pbmcgb24gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYXNzdW1pbmcgdGhhdCB0aGUgbWFpbiBtZXRob2QgaXMgaW4gdGhpcyBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjb2RlIHRvIHJldmlldy4gSSBrbm93IHRoYXQgaWYgSSB1bmRlcnN0YW5kIHdoYXQgdGhlIG1vZHVsZSBkb2VzIGluIGdlbmVyYWwsIGFuZCB0aGVuIGNhbiBkcmlsbCBkb3duIGludG8gdGhlIG1ldGhvZCwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgbG9naWMgYW5kIHRoZW4gZ2V0IHRvIHRoZSBidXNpbmVzcyBvZiBzb2x2aW5nIHdoYXRldmVyIHRoaXMgbW9kdWxlIGlzIG1lYW50IHRvIHNvbHZlLlxuXG5JIGFtIHVzaW5nIG15IG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSB0byBndWlkZSBteSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjExOjUyLjgwMzQ0OTg3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc1MzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9zZnAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ4OD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTM0OTctXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0OTg6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzZnBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTE6NTIuODg0MjA3ODY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNjExMDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQbGF0Zm9ybSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBxdWlyaywgc3BlY2lmaWNhbGx5IGZvciBzb21lIFNGUCBtb2R1bGVzLiBUaGUgdHdvIG1lbnRpb25lZCwgRlMgWEdTLVNGUC1PTlQtTUFDSSBhbmQgT0VNIFhHU1BPTlNUMjAwMSwgYXJlIHRoZSB0YXJnZXRzIG9mIHRoaXMgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgc2ZwX21hdGNoYCB0byBhbGxvdyBmb3IgcHJlZml4IG1hdGNoaW5nIG9mIHRoZSBwYXJ0IG5hbWUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGlzIGV2ZW4gcmVhY2hhYmxlIHdpdGhvdXQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHByZXNlbnQuIFNGUCBtb2R1bGVzIGFyZSB0eXBpY2FsbHkgZGVzY3JpYmVkIHVzaW5nIGRldmljZSB0cmVlIG9yIEFDUEksIHNvIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhlIHN5c3RlbSBrbm93IGFib3V0IHRoZSBwcmVzZW5jZSBvZiB0aG9zZSBzcGVjaWZpYyBtb2R1bGVzPyBDYW4gdGhpcyBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBpbmplY3QgdGhlc2UgcGxhdGZvcm0gZGV2aWNlcyB1c2luZyBgc3l6X2RldmAgb3IgdGhyb3VnaCBuZXRsaW5rIG9yIGV0aHRvb2wgaW50ZXJmYWNlcywgYXNzdW1pbmcgdGhleSdyZSBleHBvc2VkLlxuXG5Ib3dldmVyLCB0aGlzIGlzIHJlYWxseSBqdXN0IGEgc2ltcGxlIHRhYmxlIGxvb2t1cCBiYXNlZCBvbiB0aGUgRUVQUk9NIElEIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgbW9kdWxlLiBUaGlzIElEIGlzIHJlYWQgZnJvbSB0aGUgSTJDIGJ1cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIHdoZXJlIGBzZnBfbG9va3VwX3F1aXJrYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCB0aGUgcGF0aCBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGV2ZW50IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBjYWxsLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMTo1OC4wMTAzMjExMTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjU2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9sb29rdXBfcXVpcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9zZnAuYz02NTY9c3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTY2Ny1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjY4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yNTAyPXN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICpzZnAsIGJvb2wgcmVwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI2NzYtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjI2Nzc6XFx0c2ZwLVxcdTAwM2VxdWlyayA9IHNmcF9sb29rdXBfcXVpcmsoXFx1MDAyNmlkKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjY3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTE6NTguMDg5OTgyMTI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTYzNTI0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPUZhbHNlOiBTRlAgTW9kdWxlIFF1aXJrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYSBmZXcgbmV3IHF1aXJrcyByZWxhdGVkIHRvIFNGUCBtb2R1bGVzLiBUaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGBzZnBfc21fbW9kX3Byb2JlYCwgaXMgdHJpZ2dlcmVkIHdoZW4gYSBTeXN0ZW0gRmFicmljIFBsdWcgKFNGUCkgbW9kdWxlIGlzIHByb2JlZC4gVGhpcyBpbXBsaWVzIHRoZSBwcmVzZW5jZSBvZiBhbiBJMkMgYnVzIGFuZCBhIHBoeXNpY2FsbHkgY29ubmVjdGVkIFNGUCBtb2R1bGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBJMkMgZGV2aWNlIHRoYXQncyByZXNwb25kaW5nIGF0IHRoZSBTRlAgRUVQUk9NIGFkZHJlc3MuIEEga2V5IHBvaW50IGhlcmUgaXMgdGhhdCBTeXprYWxsZXIsIHRoZSBmdXp6ZXIgd2UncmUgdXNpbmcsIGRvZXNuJ3QgY3VycmVudGx5IGVtdWxhdGUgdGhlc2UgU0ZQIEkyQyBFRVBST01zLlxuXG5HaXZlbiB0aGUgc2V0dXAgcmVxdWlyZWQsIG15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdGhhdCB0aGlzIGlzbid0IGEgaGlnaC1wcmlvcml0eSBmdXp6aW5nIHRhcmdldC4gVGhlIGNoYW5nZSBpdHNlbGYgbG9va3MgZXhjZWVkaW5nbHkgdHJpdmlhbDogYSBwcmVmaXggbWF0Y2ggZm9yIGEgcXVpcmsgYW5kIHR3byBicmFuZC1uZXcgcXVpcmtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLiBJcyB0aGVyZSBhbnkgcmVhbCBiZW5lZml0IHRvIGRlZGljYXRlIGZ1enplciBjeWNsZXMgdG8gdGhpcz9cblxuTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZnBfbWF0Y2hgIGZ1bmN0aW9uLCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBoaWRkZW4gY29tcGxleGl0eS4gQWgsIGl0J3MganVzdCBkb2luZyBhIGBzdHJuY21wYC4gVmVyeSBzdHJhaWdodGZvcndhcmQuXG5cbkJhc2VkIG9uIGV2ZXJ5dGhpbmcgSSd2ZSBzZWVuLCBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcHJpbWFyeSByZWFzb24gaXMgdGhhdCB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmsgdGFpbG9yZWQgdG8gU0ZQIG1vZHVsZXMuIEl0IHdvdWxkIGVpdGhlciBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIG9yIEkyQyBlbXVsYXRpb24gb2YgdGhlIFNGUCdzIEVFUFJPTSwgYW5kIG5laXRoZXIgb2YgdGhvc2UgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBbHNvLCB0aGUgY2hhbmdlIGluIHRoZSBsb2dpYyBpcyBuZWdsaWdpYmxlLiBJdCdzIHNpbXBseSBub3Qgd29ydGggdGhlIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1MCwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MDQuMjg2MzM3NDg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MDQuMjg2MzYxNDM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pbng[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 18:09:22 +0000 UTC FinishedAt: 2026-08-12 18:12:05 +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+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0NjllNDlmY2RlMmIzMjMyNmFiNzVhMzhmNmM2NzE1NWYzODBkNDhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMDozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDUwOGI2Y2M4ZWRkY2YuLjJlYzkxNDY2YWNkZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuQEAgLTUxNiw2ICYjNDM7NTE2LDE1IEBAIHN0YXRpYyB2b2lkIHNmcF9xdWlya191Ym50X3VmX2luc3RhbnQoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkLFxuIFx0eyAudmVuZG9yID0gX3YsIC5wYXJ0ID0gX3AsIC5zdXBwb3J0ID0gX3MsIC5maXh1cCA9IF9mLCB9XG4gI2RlZmluZSBTRlBfUVVJUktfUyhfdiwgX3AsIF9zKSBTRlBfUVVJUksoX3YsIF9wLCBfcywgTlVMTClcbiAjZGVmaW5lIFNGUF9RVUlSS19GKF92LCBfcCwgX2YpIFNGUF9RVUlSSyhfdiwgX3AsIE5VTEwsIF9mKVxuJiM0MzsvKiBMaWtlIFNGUF9RVUlSS19GLCBidXQgbWF0Y2hlcyB0aGUgcGFydCBhcyBhIHByZWZpeDsgdGhlIHZlbmRvciBuYW1lXG4mIzQzOyAqIGlzIHN0aWxsIG1hdGNoZWQgZXhhY3RseS4gVXNlIGZvciBtb2R1bGVzIHdob3NlIEVFUFJPTSB2ZW5kb3IgUE5cbiYjNDM7ICogZmllbGQgcmVhZHMgYmFjayB3aXRoIGdhcmJhZ2UgcGFzdCB0aGUgbGVnaXRpbWF0ZSBjaGFyYWN0ZXJzIGluc3RlYWRcbiYjNDM7ICogb2YgdGhlIFNGRi04NDcyLW1hbmRhdGVkIHNwYWNlIHBhZGRpbmcsIHNvIHNmcF9zdHJsZW4gY2FuJiMzOTt0IHRyaW0gdGhlXG4mIzQzOyAqIGZpZWxkIGRvd24gdG8gdGhlIGxlZ2l0aW1hdGUgbGVuZ3RoLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXFxcbiYjNDM7XHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBOVUxMLCAuZml4dXAgPSBfZiwgXFxcbiYjNDM7XHQgIC5wYXJ0X3ByZWZpeF9tYXRjaCA9IHRydWUgfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdC8vIEFsY2F0ZWwgTHVjZW50IEctMDEwUy1QIGNhbiBvcGVyYXRlIGF0IDI1MDBiYXNlLVgsIGJ1dCBpbmNvcnJlY3RseVxuQEAgLTU0OCw2ICYjNDM7NTU3LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdFNGUF9RVUlSSyhcJiMzNDtGU1wmIzM0OywgXCYjMzQ7R1BPTi1PTlUtMzQtMjBCSVwmIzM0Oywgc2ZwX3F1aXJrXzI1MDBiYXNleCxcbiBcdFx0ICBzZnBfZml4dXBfaWdub3JlX3R4X2ZhdWx0KSxcbiBcbiYjNDM7XHQvLyBGaWJlcnN0b3JlIFhHUy1TRlAtT05ULU1BQ0kgaXMgYSBNQUMtbW9kZSBYR1MtUE9OIE9OVCBzdGljayB3aXRoXG4mIzQzO1x0Ly8gT05ULWNsYXNzIHNlcmlhbC1wYXNzdGhyb3VnaCBUWF9GQVVMVC9MT1Mgd2lyaW5nIGFuZCBzbG93IHN0YXJ0dXA7XG4mIzQzO1x0Ly8gbWFzayBib3RoIHNpZ25hbHMgYW5kIGV4dGVuZCBUX1NUQVJUX1VQIHZpYSB0aGUgcG90cm9uIGZpeHVwLiBUaGVcbiYjNDM7XHQvLyBQTiBpcyB0aGUgcHJvZHVjdCBuYW1lIChYR1MtU0ZQLU9OVC1NQUMtSSkgdHJ1bmNhdGVkIGF0IHRoZSAxNi1ieXRlXG4mIzQzO1x0Ly8gZmllbGQgd2lkdGgsIHNvIHRoZSBmaWVsZCBpcyBmdWxseSBvY2N1cGllZCBhbmQgbWF0Y2hlcyBleGFjdGx5LlxuJiM0MztcdFNGUF9RVUlSS19GKFwmIzM0O0ZTXCYjMzQ7LCBcJiMzNDtYR1MtU0ZQLU9OVC1NQUNJXCYjMzQ7LCBzZnBfZml4dXBfcG90cm9uKSxcbiYjNDM7XG4gXHRTRlBfUVVJUktfRihcJiMzNDtIQUxOeVwmIzM0OywgXCYjMzQ7SEwtR1NGUFwmIzM0Oywgc2ZwX2ZpeHVwX2hhbG55X2dzZnApLFxuIFxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7SC1DT01cJiMzNDssIFwmIzM0O1NQUDQyNUgtR0FCNFwmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksXG5AQCAtNjA4LDYgJiM0Mzs2MjQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xuIFx0U0ZQX1FVSVJLX1MoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtTRlAtMi41Ry1MSDIwLUFcJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgpLFxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7T0VNXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMFwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKSxcbiBcdFNGUF9RVUlSS19GKFwmIzM0O09FTVwmIzM0OywgXCYjMzQ7UlRTRlAtMTBHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuJiM0MztcbiYjNDM7XHQvLyBPRU0gWEdTUE9OU1QyMDAxIGlzIGFuIFhHUy1QT04gT05UIHN0aWNrIHdpdGggYnJva2VuIFRYX0ZBVUxUIGFuZFxuJiM0MztcdC8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGRcbiYjNDM7XHQvLyBwb3dlci11cCB0aGUgRUVQUk9NIHZlbmRvciBQTiBmaWVsZCByZWFkcyBiYWNrIHdpdGggbm9uLXByaW50YWJsZVxuJiM0MztcdC8vIGdhcmJhZ2UgcGFzdCB0aGUgbGVnaXRpbWF0ZSBzdHJpbmcgaW5zdGVhZCBvZiBzcGFjZSBwYWRkaW5nLCBzb1xuJiM0MztcdC8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LlxuJiM0MztcdFNGUF9RVUlSS19GX1BSRUZJWChcJiMzNDtPRU1cJiMzNDssIFwmIzM0O1hHU1BPTlNUMjAwMVwmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksXG4mIzQzO1xuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0yLjVHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuIFx0U0ZQX1FVSVJLX0YoXCYjMzQ7VHVycmlzXCYjMzQ7LCBcJiMzNDtSVFNGUC0xMFwmIzM0Oywgc2ZwX2ZpeHVwX3JvbGxiYWxsKSxcbiBcdFNGUF9RVUlSS19GKFwmIzM0O1R1cnJpc1wmIzM0OywgXCYjMzQ7UlRTRlAtMTBHXCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuQEAgLTYyOSwxMyAmIzQzOzY1MywxNiBAQCBzdGF0aWMgc2l6ZV90IHNmcF9zdHJsZW4oY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbWF4bGVuKVxuIFx0cmV0dXJuIHNpemU7XG4gfVxuIFxuLXN0YXRpYyBib29sIHNmcF9tYXRjaChjb25zdCBjaGFyICpxcywgY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKVxuJiM0MztzdGF0aWMgYm9vbCBzZnBfbWF0Y2goY29uc3QgY2hhciAqcXMsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgYm9vbCBwcmVmaXgpXG4ge1xuJiM0MztcdHNpemVfdCBxc19sZW47XG4mIzQzO1xuIFx0aWYgKCFxcylcbiBcdFx0cmV0dXJuIHRydWU7XG4tXHRpZiAoc3RybGVuKHFzKSAhPSBsZW4pXG4mIzQzO1x0cXNfbGVuID0gc3RybGVuKHFzKTtcbiYjNDM7XHRpZiAocHJlZml4ID8gcXNfbGVuIFx1MDAzZSBsZW4gOiBxc19sZW4gIT0gbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTtcbiYjNDM7XHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgcXNfbGVuKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxuQEAgLTY0OCw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxuIFx0cHMgPSBzZnBfc3RybGVuKGlkLVx1MDAzZWJhc2UudmVuZG9yX3BuLCBBUlJBWV9TSVpFKGlkLVx1MDAzZWJhc2UudmVuZG9yX3BuKSk7XG4gXG4gXHRmb3IgKGkgPSAwLCBxID0gc2ZwX3F1aXJrczsgaSBcdTAwM2MgQVJSQVlfU0laRShzZnBfcXVpcmtzKTsgaSYjNDM7JiM0MzssIHEmIzQzOyYjNDM7KVxuLVx0XHRpZiAoc2ZwX21hdGNoKHEtXHUwMDNldmVuZG9yLCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9uYW1lLCB2cykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzZnBfbWF0Y2gocS1cdTAwM2VwYXJ0LCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMpKVxuJiM0MztcdFx0aWYgKHNmcF9tYXRjaChxLVx1MDAzZXZlbmRvciwgaWQtXHUwMDNlYmFzZS52ZW5kb3JfbmFtZSwgdnMsIGZhbHNlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBzZnBfbWF0Y2gocS1cdTAwM2VwYXJ0LCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMsXG4mIzQzO1x0XHRcdCAgICAgIHEtXHUwMDNlcGFydF9wcmVmaXhfbWF0Y2gpKVxuIFx0XHRcdHJldHVybiBxO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG5pbmRleCA4NzlkZmY3YWZlNmE0Li4xOWZlMjlkODQ0YTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmhcbkBAIC0xMiw2ICYjNDM7MTIsNyBAQCBzdHJ1Y3Qgc2ZwX3F1aXJrIHtcbiBcdHZvaWQgKCpzdXBwb3J0KShjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsXG4gXHRcdFx0c3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2Fwcyk7XG4gXHR2b2lkICgqZml4dXApKHN0cnVjdCBzZnAgKnNmcCk7XG4mIzQzO1x0Ym9vbCBwYXJ0X3ByZWZpeF9tYXRjaDtcbiB9O1xuIFxuIHN0cnVjdCBzZnBfc29ja2V0X29wcyB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmtzIGZvciBTRlAgbW9kdWxlcyAoRlMgWEdTLVNGUC1PTlQtTUFDSSBhbmQgT0VNIFhHU1BPTlNUMjAwMSkgYW5kIGEgdHJpdmlhbCBwcmVmaXggbWF0Y2hpbmcgbG9naWMgZm9yIHRoZSBwYXJ0IG5hbWUgaW4gdGhlIFNGUCBFRVBST00gSUQuIFRoaXMgY29kZSBpcyBvbmx5IHJlYWNoYWJsZSB3aGVuIHNwZWNpZmljIHBoeXNpY2FsIFNGUCBtb2R1bGVzIGFyZSBwcm9iZWQgb3ZlciBJMkMsIHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNDY5ZTQ5ZmNkZTJiMzIzMjZhYjc1YTM4ZjZjNjcxNTVmMzgwZDQ4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTA6MzYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmMKaW5kZXggNTA4YjZjYzhlZGRjZi4uMmVjOTE0NjZhY2RmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuYwpAQCAtNTE2LDYgJiM0Mzs1MTYsMTUgQEAgc3RhdGljIHZvaWQgc2ZwX3F1aXJrX3VibnRfdWZfaW5zdGFudChjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCiAJeyAudmVuZG9yID0gX3YsIC5wYXJ0ID0gX3AsIC5zdXBwb3J0ID0gX3MsIC5maXh1cCA9IF9mLCB9CiAjZGVmaW5lIFNGUF9RVUlSS19TKF92LCBfcCwgX3MpIFNGUF9RVUlSSyhfdiwgX3AsIF9zLCBOVUxMKQogI2RlZmluZSBTRlBfUVVJUktfRihfdiwgX3AsIF9mKSBTRlBfUVVJUksoX3YsIF9wLCBOVUxMLCBfZikKJiM0MzsvKiBMaWtlIFNGUF9RVUlSS19GLCBidXQgbWF0Y2hlcyB0aGUgcGFydCBhcyBhIHByZWZpeDsgdGhlIHZlbmRvciBuYW1lCiYjNDM7ICogaXMgc3RpbGwgbWF0Y2hlZCBleGFjdGx5LiBVc2UgZm9yIG1vZHVsZXMgd2hvc2UgRUVQUk9NIHZlbmRvciBQTgomIzQzOyAqIGZpZWxkIHJlYWRzIGJhY2sgd2l0aCBnYXJiYWdlIHBhc3QgdGhlIGxlZ2l0aW1hdGUgY2hhcmFjdGVycyBpbnN0ZWFkCiYjNDM7ICogb2YgdGhlIFNGRi04NDcyLW1hbmRhdGVkIHNwYWNlIHBhZGRpbmcsIHNvIHNmcF9zdHJsZW4gY2FuJiMzOTt0IHRyaW0gdGhlCiYjNDM7ICogZmllbGQgZG93biB0byB0aGUgbGVnaXRpbWF0ZSBsZW5ndGguCiYjNDM7ICovCiYjNDM7I2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXAomIzQzOwl7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBOVUxMLCAuZml4dXAgPSBfZiwgXAomIzQzOwkgIC5wYXJ0X3ByZWZpeF9tYXRjaCA9IHRydWUgfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7CiAJLy8gQWxjYXRlbCBMdWNlbnQgRy0wMTBTLVAgY2FuIG9wZXJhdGUgYXQgMjUwMGJhc2UtWCwgYnV0IGluY29ycmVjdGx5CkBAIC01NDgsNiAmIzQzOzU1NywxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7CiAJU0ZQX1FVSVJLKCYjMzQ7RlMmIzM0OywgJiMzNDtHUE9OLU9OVS0zNC0yMEJJJiMzNDssIHNmcF9xdWlya18yNTAwYmFzZXgsCiAJCSAgc2ZwX2ZpeHVwX2lnbm9yZV90eF9mYXVsdCksCiAKJiM0MzsJLy8gRmliZXJzdG9yZSBYR1MtU0ZQLU9OVC1NQUNJIGlzIGEgTUFDLW1vZGUgWEdTLVBPTiBPTlQgc3RpY2sgd2l0aAomIzQzOwkvLyBPTlQtY2xhc3Mgc2VyaWFsLXBhc3N0aHJvdWdoIFRYX0ZBVUxUL0xPUyB3aXJpbmcgYW5kIHNsb3cgc3RhcnR1cDsKJiM0MzsJLy8gbWFzayBib3RoIHNpZ25hbHMgYW5kIGV4dGVuZCBUX1NUQVJUX1VQIHZpYSB0aGUgcG90cm9uIGZpeHVwLiBUaGUKJiM0MzsJLy8gUE4gaXMgdGhlIHByb2R1Y3QgbmFtZSAoWEdTLVNGUC1PTlQtTUFDLUkpIHRydW5jYXRlZCBhdCB0aGUgMTYtYnl0ZQomIzQzOwkvLyBmaWVsZCB3aWR0aCwgc28gdGhlIGZpZWxkIGlzIGZ1bGx5IG9jY3VwaWVkIGFuZCBtYXRjaGVzIGV4YWN0bHkuCiYjNDM7CVNGUF9RVUlSS19GKCYjMzQ7RlMmIzM0OywgJiMzNDtYR1MtU0ZQLU9OVC1NQUNJJiMzNDssIHNmcF9maXh1cF9wb3Ryb24pLAomIzQzOwogCVNGUF9RVUlSS19GKCYjMzQ7SEFMTnkmIzM0OywgJiMzNDtITC1HU0ZQJiMzNDssIHNmcF9maXh1cF9oYWxueV9nc2ZwKSwKIAogCVNGUF9RVUlSS19GKCYjMzQ7SC1DT00mIzM0OywgJiMzNDtTUFA0MjVILUdBQjQmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksCkBAIC02MDgsNiAmIzQzOzYyNCwxNCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7CiAJU0ZQX1FVSVJLX1MoJiMzNDtPRU0mIzM0OywgJiMzNDtTRlAtMi41Ry1MSDIwLUEmIzM0Oywgc2ZwX3F1aXJrXzI1MDBiYXNleCksCiAJU0ZQX1FVSVJLX0YoJiMzNDtPRU0mIzM0OywgJiMzNDtSVFNGUC0xMCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLAogCVNGUF9RVUlSS19GKCYjMzQ7T0VNJiMzNDssICYjMzQ7UlRTRlAtMTBHJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksCiYjNDM7CiYjNDM7CS8vIE9FTSBYR1NQT05TVDIwMDEgaXMgYW4gWEdTLVBPTiBPTlQgc3RpY2sgd2l0aCBicm9rZW4gVFhfRkFVTFQgYW5kCiYjNDM7CS8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGQKJiM0MzsJLy8gcG93ZXItdXAgdGhlIEVFUFJPTSB2ZW5kb3IgUE4gZmllbGQgcmVhZHMgYmFjayB3aXRoIG5vbi1wcmludGFibGUKJiM0MzsJLy8gZ2FyYmFnZSBwYXN0IHRoZSBsZWdpdGltYXRlIHN0cmluZyBpbnN0ZWFkIG9mIHNwYWNlIHBhZGRpbmcsIHNvCiYjNDM7CS8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LgomIzQzOwlTRlBfUVVJUktfRl9QUkVGSVgoJiMzNDtPRU0mIzM0OywgJiMzNDtYR1NQT05TVDIwMDEmIzM0Oywgc2ZwX2ZpeHVwX3BvdHJvbiksCiYjNDM7CiAJU0ZQX1FVSVJLX0YoJiMzNDtUdXJyaXMmIzM0OywgJiMzNDtSVFNGUC0yLjVHJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksCiAJU0ZQX1FVSVJLX0YoJiMzNDtUdXJyaXMmIzM0OywgJiMzNDtSVFNGUC0xMCYjMzQ7LCBzZnBfZml4dXBfcm9sbGJhbGwpLAogCVNGUF9RVUlSS19GKCYjMzQ7VHVycmlzJiMzNDssICYjMzQ7UlRTRlAtMTBHJiMzNDssIHNmcF9maXh1cF9yb2xsYmFsbCksCkBAIC02MjksMTMgJiM0Mzs2NTMsMTYgQEAgc3RhdGljIHNpemVfdCBzZnBfc3RybGVuKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IG1heGxlbikKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pCiYjNDM7c3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KQogewomIzQzOwlzaXplX3QgcXNfbGVuOwomIzQzOwogCWlmICghcXMpCiAJCXJldHVybiB0cnVlOwotCWlmIChzdHJsZW4ocXMpICE9IGxlbikKJiM0MzsJcXNfbGVuID0gc3RybGVuKHFzKTsKJiM0MzsJaWYgKHByZWZpeCA/IHFzX2xlbiAmZ3Q7IGxlbiA6IHFzX2xlbiAhPSBsZW4pCiAJCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTsKJiM0MzsJcmV0dXJuICFzdHJuY21wKHFzLCBzdHIsIHFzX2xlbik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCkKQEAgLTY0OCw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKQogCXBzID0gc2ZwX3N0cmxlbihpZC0mZ3Q7YmFzZS52ZW5kb3JfcG4sIEFSUkFZX1NJWkUoaWQtJmd0O2Jhc2UudmVuZG9yX3BuKSk7CiAKIAlmb3IgKGkgPSAwLCBxID0gc2ZwX3F1aXJrczsgaSAmbHQ7IEFSUkFZX1NJWkUoc2ZwX3F1aXJrcyk7IGkmIzQzOyYjNDM7LCBxJiM0MzsmIzQzOykKLQkJaWYgKHNmcF9tYXRjaChxLSZndDt2ZW5kb3IsIGlkLSZndDtiYXNlLnZlbmRvcl9uYW1lLCB2cykgJmFtcDsmYW1wOwotCQkgICAgc2ZwX21hdGNoKHEtJmd0O3BhcnQsIGlkLSZndDtiYXNlLnZlbmRvcl9wbiwgcHMpKQomIzQzOwkJaWYgKHNmcF9tYXRjaChxLSZndDt2ZW5kb3IsIGlkLSZndDtiYXNlLnZlbmRvcl9uYW1lLCB2cywgZmFsc2UpICZhbXA7JmFtcDsKJiM0MzsJCSAgICBzZnBfbWF0Y2gocS0mZ3Q7cGFydCwgaWQtJmd0O2Jhc2UudmVuZG9yX3BuLCBwcywKJiM0MzsJCQkgICAgICBxLSZndDtwYXJ0X3ByZWZpeF9tYXRjaCkpCiAJCQlyZXR1cm4gcTsKIAogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oCmluZGV4IDg3OWRmZjdhZmU2YTQuLjE5ZmUyOWQ4NDRhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmgKQEAgLTEyLDYgJiM0MzsxMiw3IEBAIHN0cnVjdCBzZnBfcXVpcmsgewogCXZvaWQgKCpzdXBwb3J0KShjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsCiAJCQlzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzKTsKIAl2b2lkICgqZml4dXApKHN0cnVjdCBzZnAgKnNmcCk7CiYjNDM7CWJvb2wgcGFydF9wcmVmaXhfbWF0Y2g7CiB9OwogCiBzdHJ1Y3Qgc2ZwX3NvY2tldF9vcHMgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTU2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU0ZQIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5oYC4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBhZGRpbmcgYSBuZXcgcXVpcmsgbWFjcm8sIGBTRlBfUVVJUktfRl9QUkVGSVhgLiBUaGlzIG1hY3JvIGlzIHNldHRpbmcgYSBgcGFydF9wcmVmaXhfbWF0Y2hgIGZpZWxkIGluIHRoZSBgc3RydWN0IHNmcF9xdWlya2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgaW50ZXJlc3RpbmcuIEl0IGluZGljYXRlcyBhIGNoYW5nZSBpbiBob3cgdGhlIGRyaXZlciBoYW5kbGVzIG1hdGNoaW5nIFNGUCBtb2R1bGUgcGFydCBuYW1lcy4KClRoZXkmIzM5O3ZlIG1vZGlmaWVkIHRoZSBgc2ZwX21hdGNoYCBmdW5jdGlvbiwgdG9vLiBOb3csIGl0IHRha2VzIGEgYGJvb2wgcHJlZml4YCBhcmd1bWVudC4gU28sIGl0JiMzOTtzIGVpdGhlciBnb2luZyB0byBtYXRjaCB0aGUgZnVsbCBwYXJ0IG5hbWUgb3IganVzdCBhIHByZWZpeCwgZGVwZW5kaW5nIG9uIHRoYXQgYXJndW1lbnQuIFRoaXMgaXMgY2xlYXJseSB0aGUga2V5IGNoYW5nZSBpbiB0aGUgbWF0Y2hpbmcgbG9naWMuIFRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgZXhwYW5kaW5nIHRoZSBtYXRjaGluZyBjcml0ZXJpYS4KClRoZW4sIHRoZXJlIGFyZSB0aGUgdHdvIG5ldyBxdWlya3MgYWRkZWQgdG8gdGhlIGBzZnBfcXVpcmtzYCBhcnJheS4gVGhlIGZpcnN0LCB1c2luZyBgU0ZQX1FVSVJLX0ZgLCBsb29rcyBwcmV0dHkgc3RhbmRhcmQuIEJ1dCB0aGUgc2Vjb25kLCAqdXNpbmcqIHRoZSBuZXcgYFNGUF9RVUlSS19GX1BSRUZJWGAsIGlzIHRoZSBpbXBvcnRhbnQgb25lLiBJdCYjMzk7cyBtYXRjaGluZyBhIHByZWZpeCBvZiAmIzM0O09FTSYjMzQ7IGFuZCAmIzM0O1hHU1BPTlNUMjAwMSYjMzQ7LiBBbmQgdGhlIGBzZnBfZml4dXBfcG90cm9uYCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLCBzbyB0aGlzIG11c3QgYmUgcmVsYXRlZCB0byBzb21lIFBPVFJPTiBtb2R1bGVzLgoKT2theSwgbGV0JiMzOTtzIGJhY2sgdXAuIFRoaXMgaXMgYWxsIGluIHRoZSBTRlAgbW9kdWxlIGRyaXZlciDigJMgdGhhdCYjMzk7cyB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgcGFydC4gTXkgZmlyc3QgdGhvdWdodCBpczogY2FuIHdlIGZ1enogdGhpcz8gQ2FuIHdlIGVtdWxhdGUgU0ZQIG1vZHVsZXMgb3Igc2VuZCBjcmFmdGVkIEkyQyBjb21tYW5kcz8gSSBuZWVkIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCB0aGUgYXNzb2NpYXRlZCBjb2RlIGJlY2F1c2UgdGhpcyBsb29rcyBsaWtlIGFuIEkyQyBkcml2ZXIuIEkgd2FudCB0byBzZWUgaWYgdGhlcmUgaXMgcG90ZW50aWFsIGZvciB2dWxuZXJhYmlsaXR5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaTJjX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHNmcC5jYCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIGhvdyBgc2ZwLmNgIGlzIGFjdHVhbGx5IGJyb3VnaHQgdG8gbGlmZS4gSSB3YW50IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgZG9lcyBpdCBiZWdpbj8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcG9wdWxhdGVkPyYjMzQ7IEkgbmVlZCB0byBtYXAgb3V0IHRoZSBlbnRpcmUgc3RhcnR1cCBwcm9jZXNzIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBhbmQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBkZXNpZ24gaXNzdWVzIG9yIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBiZSBtaXNzZWQuIEkmIzM5O20gZm9jdXNpbmcgc3BlY2lmaWNhbGx5IG9uIHRoZSBjb3JlIGBzZnAuY2Agc2V0dXAgdG8gY29uZmlybSBkYXRhIHN0cnVjdHVyZXMgYXJlIHZhbGlkIGFuZCBjb25maWd1cmVkIGFzIGV4cGVjdGVkLCBzbyBJIGNhbiBjb25maXJtIG15IHRoZW9yeSBvZiBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9zZnAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ3MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHNmcC5jYCAtIExldCYjMzk7cyBHZXQgdG8gdGhlIENvcmUqKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gb24gdGhlIGZpbmFsIHNlY3Rpb24gb2YgYHNmcC5jYC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBoZWFydCBvZiB3aGF0ZXZlciYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgbGlicmFyeSBvciBtb2R1bGUgcmVzaWRlcyBpbiB0aGlzIGZpbGUuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgdGhlcmUgYXJlIHByb2JhYmx5IGZ1bmN0aW9uIGNhbGxzIHRoZXJlLCBzbyBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgZmlsZSBlbmRzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBxdWljayBvdmVydmlldyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGFzc3VtaW5nIHRoYXQgdGhlIG1haW4gbWV0aG9kIGlzIGluIHRoaXMgZmlsZS4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY29kZSB0byByZXZpZXcuIEkga25vdyB0aGF0IGlmIEkgdW5kZXJzdGFuZCB3aGF0IHRoZSBtb2R1bGUgZG9lcyBpbiBnZW5lcmFsLCBhbmQgdGhlbiBjYW4gZHJpbGwgZG93biBpbnRvIHRoZSBtZXRob2QsIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGFuZCB0aGVuIGdldCB0byB0aGUgYnVzaW5lc3Mgb2Ygc29sdmluZyB3aGF0ZXZlciB0aGlzIG1vZHVsZSBpcyBtZWFudCB0byBzb2x2ZS4KCkkgYW0gdXNpbmcgbXkgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtIHRvIGd1aWRlIG15IGZvY3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wbGF0Zm9ybV9kcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTM0ODg9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2ZwX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5Ny1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzozNDk4Om1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2ZwX2RyaXZlcik7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODI2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBsYXRmb3JtIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBxdWlyaywgc3BlY2lmaWNhbGx5IGZvciBzb21lIFNGUCBtb2R1bGVzLiBUaGUgdHdvIG1lbnRpb25lZCwgRlMgWEdTLVNGUC1PTlQtTUFDSSBhbmQgT0VNIFhHU1BPTlNUMjAwMSwgYXJlIHRoZSB0YXJnZXRzIG9mIHRoaXMgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgc2ZwX21hdGNoYCB0byBhbGxvdyBmb3IgcHJlZml4IG1hdGNoaW5nIG9mIHRoZSBwYXJ0IG5hbWUsIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBldmVuIHJlYWNoYWJsZSB3aXRob3V0IHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBwcmVzZW50LiBTRlAgbW9kdWxlcyBhcmUgdHlwaWNhbGx5IGRlc2NyaWJlZCB1c2luZyBkZXZpY2UgdHJlZSBvciBBQ1BJLCBzbyB0aGUgcXVlc3Rpb24gaXMsIGhvdyBkb2VzIHRoZSBzeXN0ZW0ga25vdyBhYm91dCB0aGUgcHJlc2VuY2Ugb2YgdGhvc2Ugc3BlY2lmaWMgbW9kdWxlcz8gQ2FuIHRoaXMgYmUgZnV6emVkIGJ5IHN5emthbGxlcj8gSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gaW5qZWN0IHRoZXNlIHBsYXRmb3JtIGRldmljZXMgdXNpbmcgYHN5el9kZXZgIG9yIHRocm91Z2ggbmV0bGluayBvciBldGh0b29sIGludGVyZmFjZXMsIGFzc3VtaW5nIHRoZXkmIzM5O3JlIGV4cG9zZWQuCgpIb3dldmVyLCB0aGlzIGlzIHJlYWxseSBqdXN0IGEgc2ltcGxlIHRhYmxlIGxvb2t1cCBiYXNlZCBvbiB0aGUgRUVQUk9NIElEIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgbW9kdWxlLiBUaGlzIElEIGlzIHJlYWQgZnJvbSB0aGUgSTJDIGJ1cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIHdoZXJlIGBzZnBfbG9va3VwX3F1aXJrYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCB0aGUgcGF0aCBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGV2ZW50IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBjYWxsLiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcF9sb29rdXBfcXVpcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvc2ZwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3NmcC5jPTY1Nj1zdGF0aWMgYm9vbCBzZnBfbWF0Y2goY29uc3QgY2hhciAqcXMsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgYm9vbCBwcmVmaXgpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTY2Ny1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzo2Njg6c3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgKnNmcF9sb29rdXBfcXVpcmsoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTY2OS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTI1MDI9c3RhdGljIGludCBzZnBfc21fbW9kX3Byb2JlKHN0cnVjdCBzZnAgKnNmcCwgYm9vbCByZXBvcnQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI2NzYtXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6MjY3NzpcdHNmcC1cdTAwM2VxdWlyayA9IHNmcF9sb29rdXBfcXVpcmsoXHUwMDI2aWQpO1xuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI2NzgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTAKCQkJCQkJCW91dHB1dDogMTEzCgkJCQkJCQl0aG91Z2h0czogMTk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKldvcnRoRnV6emluZz1GYWxzZTogU0ZQIE1vZHVsZSBRdWlyayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYSBmZXcgbmV3IHF1aXJrcyByZWxhdGVkIHRvIFNGUCBtb2R1bGVzLiBUaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGBzZnBfc21fbW9kX3Byb2JlYCwgaXMgdHJpZ2dlcmVkIHdoZW4gYSBTeXN0ZW0gRmFicmljIFBsdWcgKFNGUCkgbW9kdWxlIGlzIHByb2JlZC4gVGhpcyBpbXBsaWVzIHRoZSBwcmVzZW5jZSBvZiBhbiBJMkMgYnVzIGFuZCBhIHBoeXNpY2FsbHkgY29ubmVjdGVkIFNGUCBtb2R1bGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBJMkMgZGV2aWNlIHRoYXQmIzM5O3MgcmVzcG9uZGluZyBhdCB0aGUgU0ZQIEVFUFJPTSBhZGRyZXNzLiBBIGtleSBwb2ludCBoZXJlIGlzIHRoYXQgU3l6a2FsbGVyLCB0aGUgZnV6emVyIHdlJiMzOTtyZSB1c2luZywgZG9lc24mIzM5O3QgY3VycmVudGx5IGVtdWxhdGUgdGhlc2UgU0ZQIEkyQyBFRVBST01zLgoKR2l2ZW4gdGhlIHNldHVwIHJlcXVpcmVkLCBteSBpbml0aWFsIGluY2xpbmF0aW9uIGlzIHRoYXQgdGhpcyBpc24mIzM5O3QgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0LiBUaGUgY2hhbmdlIGl0c2VsZiBsb29rcyBleGNlZWRpbmdseSB0cml2aWFsOiBhIHByZWZpeCBtYXRjaCBmb3IgYSBxdWlyayBhbmQgdHdvIGJyYW5kLW5ldyBxdWlya3MgYXJlIGJlaW5nIGludHJvZHVjZWQuIElzIHRoZXJlIGFueSByZWFsIGJlbmVmaXQgdG8gZGVkaWNhdGUgZnV6emVyIGN5Y2xlcyB0byB0aGlzPwoKTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZnBfbWF0Y2hgIGZ1bmN0aW9uLCB0byBtYWtlIHN1cmUgdGhlcmUmIzM5O3Mgbm8gaGlkZGVuIGNvbXBsZXhpdHkuIEFoLCBpdCYjMzk7cyBqdXN0IGRvaW5nIGEgYHN0cm5jbXBgLiBWZXJ5IHN0cmFpZ2h0Zm9yd2FyZC4KCkJhc2VkIG9uIGV2ZXJ5dGhpbmcgSSYjMzk7dmUgc2VlbiwgSSYjMzk7bSBnb2luZyB0byBtYXJrIHRoaXMgYXMgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSBwcmltYXJ5IHJlYXNvbiBpcyB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBxdWlyayB0YWlsb3JlZCB0byBTRlAgbW9kdWxlcy4gSXQgd291bGQgZWl0aGVyIG5lZWQgcGh5c2ljYWwgaGFyZHdhcmUgb3IgSTJDIGVtdWxhdGlvbiBvZiB0aGUgU0ZQJiMzOTtzIEVFUFJPTSwgYW5kIG5laXRoZXIgb2YgdGhvc2UgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBbHNvLCB0aGUgY2hhbmdlIGluIHRoZSBsb2dpYyBpcyBuZWdsaWdpYmxlLiBJdCYjMzk7cyBzaW1wbHkgbm90IHdvcnRoIHRoZSBlZmZvcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE4OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTg6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjM4LjA5NTU5NjY0NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MTkwNzc1MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTA6MzguMDk1NjAwOTA0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MDYyMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ2OWU0OWZjZGUyYjMyMzI2YWI3NWEzOGY2YzY3MTU1ZjM4MGQ0OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxODoxMDozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcXG5pbmRleCA1MDhiNmNjOGVkZGNmLi4yZWM5MTQ2NmFjZGYzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xcbkBAIC01MTYsNiArNTE2LDE1IEBAIHN0YXRpYyB2b2lkIHNmcF9xdWlya191Ym50X3VmX2luc3RhbnQoY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkLFxcbiBcXHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBfcywgLmZpeHVwID0gX2YsIH1cXG4gI2RlZmluZSBTRlBfUVVJUktfUyhfdiwgX3AsIF9zKSBTRlBfUVVJUksoX3YsIF9wLCBfcywgTlVMTClcXG4gI2RlZmluZSBTRlBfUVVJUktfRihfdiwgX3AsIF9mKSBTRlBfUVVJUksoX3YsIF9wLCBOVUxMLCBfZilcXG4rLyogTGlrZSBTRlBfUVVJUktfRiwgYnV0IG1hdGNoZXMgdGhlIHBhcnQgYXMgYSBwcmVmaXg7IHRoZSB2ZW5kb3IgbmFtZVxcbisgKiBpcyBzdGlsbCBtYXRjaGVkIGV4YWN0bHkuIFVzZSBmb3IgbW9kdWxlcyB3aG9zZSBFRVBST00gdmVuZG9yIFBOXFxuKyAqIGZpZWxkIHJlYWRzIGJhY2sgd2l0aCBnYXJiYWdlIHBhc3QgdGhlIGxlZ2l0aW1hdGUgY2hhcmFjdGVycyBpbnN0ZWFkXFxuKyAqIG9mIHRoZSBTRkYtODQ3Mi1tYW5kYXRlZCBzcGFjZSBwYWRkaW5nLCBzbyBzZnBfc3RybGVuIGNhbid0IHRyaW0gdGhlXFxuKyAqIGZpZWxkIGRvd24gdG8gdGhlIGxlZ2l0aW1hdGUgbGVuZ3RoLlxcbisgKi9cXG4rI2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXFxcXFxcbitcXHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBOVUxMLCAuZml4dXAgPSBfZiwgXFxcXFxcbitcXHQgIC5wYXJ0X3ByZWZpeF9tYXRjaCA9IHRydWUgfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xcbiBcXHQvLyBBbGNhdGVsIEx1Y2VudCBHLTAxMFMtUCBjYW4gb3BlcmF0ZSBhdCAyNTAwYmFzZS1YLCBidXQgaW5jb3JyZWN0bHlcXG5AQCAtNTQ4LDYgKzU1NywxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7XFxuIFxcdFNGUF9RVUlSSyhcXFwiRlNcXFwiLCBcXFwiR1BPTi1PTlUtMzQtMjBCSVxcXCIsIHNmcF9xdWlya18yNTAwYmFzZXgsXFxuIFxcdFxcdCAgc2ZwX2ZpeHVwX2lnbm9yZV90eF9mYXVsdCksXFxuIFxcbitcXHQvLyBGaWJlcnN0b3JlIFhHUy1TRlAtT05ULU1BQ0kgaXMgYSBNQUMtbW9kZSBYR1MtUE9OIE9OVCBzdGljayB3aXRoXFxuK1xcdC8vIE9OVC1jbGFzcyBzZXJpYWwtcGFzc3Rocm91Z2ggVFhfRkFVTFQvTE9TIHdpcmluZyBhbmQgc2xvdyBzdGFydHVwO1xcbitcXHQvLyBtYXNrIGJvdGggc2lnbmFscyBhbmQgZXh0ZW5kIFRfU1RBUlRfVVAgdmlhIHRoZSBwb3Ryb24gZml4dXAuIFRoZVxcbitcXHQvLyBQTiBpcyB0aGUgcHJvZHVjdCBuYW1lIChYR1MtU0ZQLU9OVC1NQUMtSSkgdHJ1bmNhdGVkIGF0IHRoZSAxNi1ieXRlXFxuK1xcdC8vIGZpZWxkIHdpZHRoLCBzbyB0aGUgZmllbGQgaXMgZnVsbHkgb2NjdXBpZWQgYW5kIG1hdGNoZXMgZXhhY3RseS5cXG4rXFx0U0ZQX1FVSVJLX0YoXFxcIkZTXFxcIiwgXFxcIlhHUy1TRlAtT05ULU1BQ0lcXFwiLCBzZnBfZml4dXBfcG90cm9uKSxcXG4rXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJIQUxOeVxcXCIsIFxcXCJITC1HU0ZQXFxcIiwgc2ZwX2ZpeHVwX2hhbG55X2dzZnApLFxcbiBcXG4gXFx0U0ZQX1FVSVJLX0YoXFxcIkgtQ09NXFxcIiwgXFxcIlNQUDQyNUgtR0FCNFxcXCIsIHNmcF9maXh1cF9wb3Ryb24pLFxcbkBAIC02MDgsNiArNjI0LDE0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcXG4gXFx0U0ZQX1FVSVJLX1MoXFxcIk9FTVxcXCIsIFxcXCJTRlAtMi41Ry1MSDIwLUFcXFwiLCBzZnBfcXVpcmtfMjUwMGJhc2V4KSxcXG4gXFx0U0ZQX1FVSVJLX0YoXFxcIk9FTVxcXCIsIFxcXCJSVFNGUC0xMFxcXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJPRU1cXFwiLCBcXFwiUlRTRlAtMTBHXFxcIiwgc2ZwX2ZpeHVwX3JvbGxiYWxsX2NjKSxcXG4rXFxuK1xcdC8vIE9FTSBYR1NQT05TVDIwMDEgaXMgYW4gWEdTLVBPTiBPTlQgc3RpY2sgd2l0aCBicm9rZW4gVFhfRkFVTFQgYW5kXFxuK1xcdC8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGRcXG4rXFx0Ly8gcG93ZXItdXAgdGhlIEVFUFJPTSB2ZW5kb3IgUE4gZmllbGQgcmVhZHMgYmFjayB3aXRoIG5vbi1wcmludGFibGVcXG4rXFx0Ly8gZ2FyYmFnZSBwYXN0IHRoZSBsZWdpdGltYXRlIHN0cmluZyBpbnN0ZWFkIG9mIHNwYWNlIHBhZGRpbmcsIHNvXFxuK1xcdC8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LlxcbitcXHRTRlBfUVVJUktfRl9QUkVGSVgoXFxcIk9FTVxcXCIsIFxcXCJYR1NQT05TVDIwMDFcXFwiLCBzZnBfZml4dXBfcG90cm9uKSxcXG4rXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJUdXJyaXNcXFwiLCBcXFwiUlRTRlAtMi41R1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuIFxcdFNGUF9RVUlSS19GKFxcXCJUdXJyaXNcXFwiLCBcXFwiUlRTRlAtMTBcXFwiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxcbiBcXHRTRlBfUVVJUktfRihcXFwiVHVycmlzXFxcIiwgXFxcIlJUU0ZQLTEwR1xcXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXFxuQEAgLTYyOSwxMyArNjUzLDE2IEBAIHN0YXRpYyBzaXplX3Qgc2ZwX3N0cmxlbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pXFxuIFxcdHJldHVybiBzaXplO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBzZnBfbWF0Y2goY29uc3QgY2hhciAqcXMsIGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbilcXG4rc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KVxcbiB7XFxuK1xcdHNpemVfdCBxc19sZW47XFxuK1xcbiBcXHRpZiAoIXFzKVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tXFx0aWYgKHN0cmxlbihxcykgIT0gbGVuKVxcbitcXHRxc19sZW4gPSBzdHJsZW4ocXMpO1xcbitcXHRpZiAocHJlZml4ID8gcXNfbGVuIFxcdTAwM2UgbGVuIDogcXNfbGVuICE9IGxlbilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi1cXHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTtcXG4rXFx0cmV0dXJuICFzdHJuY21wKHFzLCBzdHIsIHFzX2xlbik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcXG5AQCAtNjQ4LDggKzY3NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcXG4gXFx0cHMgPSBzZnBfc3RybGVuKGlkLVxcdTAwM2ViYXNlLnZlbmRvcl9wbiwgQVJSQVlfU0laRShpZC1cXHUwMDNlYmFzZS52ZW5kb3JfcG4pKTtcXG4gXFxuIFxcdGZvciAoaSA9IDAsIHEgPSBzZnBfcXVpcmtzOyBpIFxcdTAwM2MgQVJSQVlfU0laRShzZnBfcXVpcmtzKTsgaSsrLCBxKyspXFxuLVxcdFxcdGlmIChzZnBfbWF0Y2gocS1cXHUwMDNldmVuZG9yLCBpZC1cXHUwMDNlYmFzZS52ZW5kb3JfbmFtZSwgdnMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICBzZnBfbWF0Y2gocS1cXHUwMDNlcGFydCwgaWQtXFx1MDAzZWJhc2UudmVuZG9yX3BuLCBwcykpXFxuK1xcdFxcdGlmIChzZnBfbWF0Y2gocS1cXHUwMDNldmVuZG9yLCBpZC1cXHUwMDNlYmFzZS52ZW5kb3JfbmFtZSwgdnMsIGZhbHNlKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgc2ZwX21hdGNoKHEtXFx1MDAzZXBhcnQsIGlkLVxcdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMsXFxuK1xcdFxcdFxcdCAgICAgIHEtXFx1MDAzZXBhcnRfcHJlZml4X21hdGNoKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHE7XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oXFxuaW5kZXggODc5ZGZmN2FmZTZhNC4uMTlmZTI5ZDg0NGExOCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmhcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmhcXG5AQCAtMTIsNiArMTIsNyBAQCBzdHJ1Y3Qgc2ZwX3F1aXJrIHtcXG4gXFx0dm9pZCAoKnN1cHBvcnQpKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCxcXG4gXFx0XFx0XFx0c3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2Fwcyk7XFxuIFxcdHZvaWQgKCpmaXh1cCkoc3RydWN0IHNmcCAqc2ZwKTtcXG4rXFx0Ym9vbCBwYXJ0X3ByZWZpeF9tYXRjaDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBzZnBfc29ja2V0X29wcyB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjM5LjM0MzQwNzA5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0OTQyOTUyNDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGhhcmR3YXJlLXNwZWNpZmljIHF1aXJrcyBmb3IgU0ZQIG1vZHVsZXMgKEZTIFhHUy1TRlAtT05ULU1BQ0kgYW5kIE9FTSBYR1NQT05TVDIwMDEpIGFuZCBhIHRyaXZpYWwgcHJlZml4IG1hdGNoaW5nIGxvZ2ljIGZvciB0aGUgcGFydCBuYW1lIGluIHRoZSBTRlAgRUVQUk9NIElELiBUaGlzIGNvZGUgaXMgb25seSByZWFjaGFibGUgd2hlbiBzcGVjaWZpYyBwaHlzaWNhbCBTRlAgbW9kdWxlcyBhcmUgcHJvYmVkIG92ZXIgSTJDLCB3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgZnV6emluZyBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDY5ZTQ5ZmNkZTJiMzIzMjZhYjc1YTM4ZjZjNjcxNTVmMzgwZDQ4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMTIgMTg6MTA6MzYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc2ZwLmMgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbmluZGV4IDUwOGI2Y2M4ZWRkY2YuLjJlYzkxNDY2YWNkZjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvc2ZwLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zZnAuY1xuQEAgLTUxNiw2ICs1MTYsMTUgQEAgc3RhdGljIHZvaWQgc2ZwX3F1aXJrX3VibnRfdWZfaW5zdGFudChjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQsXG4gXHR7IC52ZW5kb3IgPSBfdiwgLnBhcnQgPSBfcCwgLnN1cHBvcnQgPSBfcywgLmZpeHVwID0gX2YsIH1cbiAjZGVmaW5lIFNGUF9RVUlSS19TKF92LCBfcCwgX3MpIFNGUF9RVUlSSyhfdiwgX3AsIF9zLCBOVUxMKVxuICNkZWZpbmUgU0ZQX1FVSVJLX0YoX3YsIF9wLCBfZikgU0ZQX1FVSVJLKF92LCBfcCwgTlVMTCwgX2YpXG4rLyogTGlrZSBTRlBfUVVJUktfRiwgYnV0IG1hdGNoZXMgdGhlIHBhcnQgYXMgYSBwcmVmaXg7IHRoZSB2ZW5kb3IgbmFtZVxuKyAqIGlzIHN0aWxsIG1hdGNoZWQgZXhhY3RseS4gVXNlIGZvciBtb2R1bGVzIHdob3NlIEVFUFJPTSB2ZW5kb3IgUE5cbisgKiBmaWVsZCByZWFkcyBiYWNrIHdpdGggZ2FyYmFnZSBwYXN0IHRoZSBsZWdpdGltYXRlIGNoYXJhY3RlcnMgaW5zdGVhZFxuKyAqIG9mIHRoZSBTRkYtODQ3Mi1tYW5kYXRlZCBzcGFjZSBwYWRkaW5nLCBzbyBzZnBfc3RybGVuIGNhbid0IHRyaW0gdGhlXG4rICogZmllbGQgZG93biB0byB0aGUgbGVnaXRpbWF0ZSBsZW5ndGguXG4rICovXG4rI2RlZmluZSBTRlBfUVVJUktfRl9QUkVGSVgoX3YsIF9wLCBfZikgXFxcbitcdHsgLnZlbmRvciA9IF92LCAucGFydCA9IF9wLCAuc3VwcG9ydCA9IE5VTEwsIC5maXh1cCA9IF9mLCBcXFxuK1x0ICAucGFydF9wcmVmaXhfbWF0Y2ggPSB0cnVlIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayBzZnBfcXVpcmtzW10gPSB7XG4gXHQvLyBBbGNhdGVsIEx1Y2VudCBHLTAxMFMtUCBjYW4gb3BlcmF0ZSBhdCAyNTAwYmFzZS1YLCBidXQgaW5jb3JyZWN0bHlcbkBAIC01NDgsNiArNTU3LDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrIHNmcF9xdWlya3NbXSA9IHtcbiBcdFNGUF9RVUlSSyhcIkZTXCIsIFwiR1BPTi1PTlUtMzQtMjBCSVwiLCBzZnBfcXVpcmtfMjUwMGJhc2V4LFxuIFx0XHQgIHNmcF9maXh1cF9pZ25vcmVfdHhfZmF1bHQpLFxuIFxuK1x0Ly8gRmliZXJzdG9yZSBYR1MtU0ZQLU9OVC1NQUNJIGlzIGEgTUFDLW1vZGUgWEdTLVBPTiBPTlQgc3RpY2sgd2l0aFxuK1x0Ly8gT05ULWNsYXNzIHNlcmlhbC1wYXNzdGhyb3VnaCBUWF9GQVVMVC9MT1Mgd2lyaW5nIGFuZCBzbG93IHN0YXJ0dXA7XG4rXHQvLyBtYXNrIGJvdGggc2lnbmFscyBhbmQgZXh0ZW5kIFRfU1RBUlRfVVAgdmlhIHRoZSBwb3Ryb24gZml4dXAuIFRoZVxuK1x0Ly8gUE4gaXMgdGhlIHByb2R1Y3QgbmFtZSAoWEdTLVNGUC1PTlQtTUFDLUkpIHRydW5jYXRlZCBhdCB0aGUgMTYtYnl0ZVxuK1x0Ly8gZmllbGQgd2lkdGgsIHNvIHRoZSBmaWVsZCBpcyBmdWxseSBvY2N1cGllZCBhbmQgbWF0Y2hlcyBleGFjdGx5LlxuK1x0U0ZQX1FVSVJLX0YoXCJGU1wiLCBcIlhHUy1TRlAtT05ULU1BQ0lcIiwgc2ZwX2ZpeHVwX3BvdHJvbiksXG4rXG4gXHRTRlBfUVVJUktfRihcIkhBTE55XCIsIFwiSEwtR1NGUFwiLCBzZnBfZml4dXBfaGFsbnlfZ3NmcCksXG4gXG4gXHRTRlBfUVVJUktfRihcIkgtQ09NXCIsIFwiU1BQNDI1SC1HQUI0XCIsIHNmcF9maXh1cF9wb3Ryb24pLFxuQEAgLTYwOCw2ICs2MjQsMTQgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZnBfcXVpcmsgc2ZwX3F1aXJrc1tdID0ge1xuIFx0U0ZQX1FVSVJLX1MoXCJPRU1cIiwgXCJTRlAtMi41Ry1MSDIwLUFcIiwgc2ZwX3F1aXJrXzI1MDBiYXNleCksXG4gXHRTRlBfUVVJUktfRihcIk9FTVwiLCBcIlJUU0ZQLTEwXCIsIHNmcF9maXh1cF9yb2xsYmFsbF9jYyksXG4gXHRTRlBfUVVJUktfRihcIk9FTVwiLCBcIlJUU0ZQLTEwR1wiLCBzZnBfZml4dXBfcm9sbGJhbGxfY2MpLFxuK1xuK1x0Ly8gT0VNIFhHU1BPTlNUMjAwMSBpcyBhbiBYR1MtUE9OIE9OVCBzdGljayB3aXRoIGJyb2tlbiBUWF9GQVVMVCBhbmRcbitcdC8vIExPUyBpbmRpY2F0b3JzIGFuZCBzbG93IHN0YXJ0dXAsIGp1c3QgbGlrZSBwb3Ryb24uIE9uIGNvbGRcbitcdC8vIHBvd2VyLXVwIHRoZSBFRVBST00gdmVuZG9yIFBOIGZpZWxkIHJlYWRzIGJhY2sgd2l0aCBub24tcHJpbnRhYmxlXG4rXHQvLyBnYXJiYWdlIHBhc3QgdGhlIGxlZ2l0aW1hdGUgc3RyaW5nIGluc3RlYWQgb2Ygc3BhY2UgcGFkZGluZywgc29cbitcdC8vIG1hdGNoIHRoZSBwYXJ0IGFzIGEgcHJlZml4LlxuK1x0U0ZQX1FVSVJLX0ZfUFJFRklYKFwiT0VNXCIsIFwiWEdTUE9OU1QyMDAxXCIsIHNmcF9maXh1cF9wb3Ryb24pLFxuK1xuIFx0U0ZQX1FVSVJLX0YoXCJUdXJyaXNcIiwgXCJSVFNGUC0yLjVHXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXG4gXHRTRlBfUVVJUktfRihcIlR1cnJpc1wiLCBcIlJUU0ZQLTEwXCIsIHNmcF9maXh1cF9yb2xsYmFsbCksXG4gXHRTRlBfUVVJUktfRihcIlR1cnJpc1wiLCBcIlJUU0ZQLTEwR1wiLCBzZnBfZml4dXBfcm9sbGJhbGwpLFxuQEAgLTYyOSwxMyArNjUzLDE2IEBAIHN0YXRpYyBzaXplX3Qgc2ZwX3N0cmxlbihjb25zdCBjaGFyICpzdHIsIHNpemVfdCBtYXhsZW4pXG4gXHRyZXR1cm4gc2l6ZTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pXG4rc3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KVxuIHtcbitcdHNpemVfdCBxc19sZW47XG4rXG4gXHRpZiAoIXFzKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbi1cdGlmIChzdHJsZW4ocXMpICE9IGxlbilcbitcdHFzX2xlbiA9IHN0cmxlbihxcyk7XG4rXHRpZiAocHJlZml4ID8gcXNfbGVuIFx1MDAzZSBsZW4gOiBxc19sZW4gIT0gbGVuKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4tXHRyZXR1cm4gIXN0cm5jbXAocXMsIHN0ciwgbGVuKTtcbitcdHJldHVybiAhc3RybmNtcChxcywgc3RyLCBxc19sZW4pO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF9xdWlyayAqc2ZwX2xvb2t1cF9xdWlyayhjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpXG5AQCAtNjQ4LDggKzY3NSw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcbiBcdHBzID0gc2ZwX3N0cmxlbihpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgQVJSQVlfU0laRShpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbikpO1xuIFxuIFx0Zm9yIChpID0gMCwgcSA9IHNmcF9xdWlya3M7IGkgXHUwMDNjIEFSUkFZX1NJWkUoc2ZwX3F1aXJrcyk7IGkrKywgcSsrKVxuLVx0XHRpZiAoc2ZwX21hdGNoKHEtXHUwMDNldmVuZG9yLCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9uYW1lLCB2cykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBzZnBfbWF0Y2gocS1cdTAwM2VwYXJ0LCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9wbiwgcHMpKVxuK1x0XHRpZiAoc2ZwX21hdGNoKHEtXHUwMDNldmVuZG9yLCBpZC1cdTAwM2ViYXNlLnZlbmRvcl9uYW1lLCB2cywgZmFsc2UpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgc2ZwX21hdGNoKHEtXHUwMDNlcGFydCwgaWQtXHUwMDNlYmFzZS52ZW5kb3JfcG4sIHBzLFxuK1x0XHRcdCAgICAgIHEtXHUwMDNlcGFydF9wcmVmaXhfbWF0Y2gpKVxuIFx0XHRcdHJldHVybiBxO1xuIFxuIFx0cmV0dXJuIE5VTEw7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oIGIvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG5pbmRleCA4NzlkZmY3YWZlNmE0Li4xOWZlMjlkODQ0YTE4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3NmcC5oXG4rKysgYi9kcml2ZXJzL25ldC9waHkvc2ZwLmhcbkBAIC0xMiw2ICsxMiw3IEBAIHN0cnVjdCBzZnBfcXVpcmsge1xuIFx0dm9pZCAoKnN1cHBvcnQpKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZCxcbiBcdFx0XHRzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzKTtcbiBcdHZvaWQgKCpmaXh1cCkoc3RydWN0IHNmcCAqc2ZwKTtcbitcdGJvb2wgcGFydF9wcmVmaXhfbWF0Y2g7XG4gfTtcbiBcbiBzdHJ1Y3Qgc2ZwX3NvY2tldF9vcHMge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTA6MzkuMzQzNDE0NjQyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjczMDkxMTQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNGUCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9waHkvc2ZwLmNgIGFuZCBgZHJpdmVycy9uZXQvcGh5L3NmcC5oYC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBhIG5ldyBxdWlyayBtYWNybywgYFNGUF9RVUlSS19GX1BSRUZJWGAuIFRoaXMgbWFjcm8gaXMgc2V0dGluZyBhIGBwYXJ0X3ByZWZpeF9tYXRjaGAgZmllbGQgaW4gdGhlIGBzdHJ1Y3Qgc2ZwX3F1aXJrYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBpbnRlcmVzdGluZy4gSXQgaW5kaWNhdGVzIGEgY2hhbmdlIGluIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgbWF0Y2hpbmcgU0ZQIG1vZHVsZSBwYXJ0IG5hbWVzLlxuXG5UaGV5J3ZlIG1vZGlmaWVkIHRoZSBgc2ZwX21hdGNoYCBmdW5jdGlvbiwgdG9vLiBOb3csIGl0IHRha2VzIGEgYGJvb2wgcHJlZml4YCBhcmd1bWVudC4gU28sIGl0J3MgZWl0aGVyIGdvaW5nIHRvIG1hdGNoIHRoZSBmdWxsIHBhcnQgbmFtZSBvciBqdXN0IGEgcHJlZml4LCBkZXBlbmRpbmcgb24gdGhhdCBhcmd1bWVudC4gVGhpcyBpcyBjbGVhcmx5IHRoZSBrZXkgY2hhbmdlIGluIHRoZSBtYXRjaGluZyBsb2dpYy4gVGhleSdyZSBleHBsaWNpdGx5IGV4cGFuZGluZyB0aGUgbWF0Y2hpbmcgY3JpdGVyaWEuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgdHdvIG5ldyBxdWlya3MgYWRkZWQgdG8gdGhlIGBzZnBfcXVpcmtzYCBhcnJheS4gVGhlIGZpcnN0LCB1c2luZyBgU0ZQX1FVSVJLX0ZgLCBsb29rcyBwcmV0dHkgc3RhbmRhcmQuIEJ1dCB0aGUgc2Vjb25kLCAqdXNpbmcqIHRoZSBuZXcgYFNGUF9RVUlSS19GX1BSRUZJWGAsIGlzIHRoZSBpbXBvcnRhbnQgb25lLiBJdCdzIG1hdGNoaW5nIGEgcHJlZml4IG9mIFwiT0VNXCIgYW5kIFwiWEdTUE9OU1QyMDAxXCIuIEFuZCB0aGUgYHNmcF9maXh1cF9wb3Ryb25gIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQsIHNvIHRoaXMgbXVzdCBiZSByZWxhdGVkIHRvIHNvbWUgUE9UUk9OIG1vZHVsZXMuXG5cbk9rYXksIGxldCdzIGJhY2sgdXAuIFRoaXMgaXMgYWxsIGluIHRoZSBTRlAgbW9kdWxlIGRyaXZlciDigJMgdGhhdCdzIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBwYXJ0LiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBDYW4gd2UgZW11bGF0ZSBTRlAgbW9kdWxlcyBvciBzZW5kIGNyYWZ0ZWQgSTJDIGNvbW1hbmRzPyBJIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9zZnAuY2AgYW5kIHRoZSBhc3NvY2lhdGVkIGNvZGUgYmVjYXVzZSB0aGlzIGxvb2tzIGxpa2UgYW4gSTJDIGRyaXZlci4gSSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBwb3RlbnRpYWwgZm9yIHZ1bG5lcmFiaWxpdHkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU1NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjQ2LjA3NDMyOTAzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzg4OTIzOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlX2kyY19kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMDo0Ni4xMjIyMjcyNDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODk2ODQ3ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBzZnAuY2AgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc2VlIGhvdyBgc2ZwLmNgIGlzIGFjdHVhbGx5IGJyb3VnaHQgdG8gbGlmZS4gSSB3YW50IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEknbSB0aGlua2luZywgXCJXaGVyZSBkb2VzIGl0IGJlZ2luPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBwb3B1bGF0ZWQ/XCIgSSBuZWVkIHRvIG1hcCBvdXQgdGhlIGVudGlyZSBzdGFydHVwIHByb2Nlc3MgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIGFsaWducyB3aXRoIGJlc3QgcHJhY3RpY2VzIGFuZCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIGRlc2lnbiBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucyB0aGF0IG1pZ2h0IGJlIG1pc3NlZC4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiB0aGUgY29yZSBgc2ZwLmNgIHNldHVwIHRvIGNvbmZpcm0gZGF0YSBzdHJ1Y3R1cmVzIGFyZSB2YWxpZCBhbmQgY29uZmlndXJlZCBhcyBleHBlY3RlZCwgc28gSSBjYW4gY29uZmlybSBteSB0aGVvcnkgb2Ygb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjU4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTA6NDkuMDE5MDc4MTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MjQyNjgwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjEwOjQ5LjA2NTMyODQ1NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNzM4MTE4NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBzZnAuY2AgLSBMZXQncyBHZXQgdG8gdGhlIENvcmUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIG9uIHRoZSBmaW5hbCBzZWN0aW9uIG9mIGBzZnAuY2AuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgaGVhcnQgb2Ygd2hhdGV2ZXIncyBnb2luZyBvbiB3aXRoIHRoaXMgbGlicmFyeSBvciBtb2R1bGUgcmVzaWRlcyBpbiB0aGlzIGZpbGUuIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyB0aGVyZSBhcmUgcHJvYmFibHkgZnVuY3Rpb24gY2FsbHMgdGhlcmUsIHNvIEknbSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGZpbGUgZW5kcy4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBxdWljayBvdmVydmlldyBvZiB3aGF0J3MgZ29pbmcgb24gYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSwgYXNzdW1pbmcgdGhhdCB0aGUgbWFpbiBtZXRob2QgaXMgaW4gdGhpcyBmaWxlLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGlzIGFueSBjb2RlIHRvIHJldmlldy4gSSBrbm93IHRoYXQgaWYgSSB1bmRlcnN0YW5kIHdoYXQgdGhlIG1vZHVsZSBkb2VzIGluIGdlbmVyYWwsIGFuZCB0aGVuIGNhbiBkcmlsbCBkb3duIGludG8gdGhlIG1ldGhvZCwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgbG9naWMgYW5kIHRoZW4gZ2V0IHRvIHRoZSBidXNpbmVzcyBvZiBzb2x2aW5nIHdoYXRldmVyIHRoaXMgbW9kdWxlIGlzIG1lYW50IHRvIHNvbHZlLlxuXG5JIGFtIHVzaW5nIG15IG1lbnRhbCBtYXAgb2YgdGhlIHN5c3RlbSB0byBndWlkZSBteSBmb2N1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ3MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE4OjExOjUyLjgwMzQ0OTg3OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc1MzYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGxhdGZvcm1fZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9zZnAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvc2ZwLmM9MzQ4OD1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZnBfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTM0OTctXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjM0OTg6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzZnBfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMzQ5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTE6NTIuODg0MjA3ODY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEyNjExMDA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQbGF0Zm9ybSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIGxvb2tzIGxpa2UgYSBwbGF0Zm9ybSBkcml2ZXIgY2hhbmdlLiBUaGUgY29yZSBvZiBpdCBzZWVtcyB0byBiZSBhZGRpbmcgYSBxdWlyaywgc3BlY2lmaWNhbGx5IGZvciBzb21lIFNGUCBtb2R1bGVzLiBUaGUgdHdvIG1lbnRpb25lZCwgRlMgWEdTLVNGUC1PTlQtTUFDSSBhbmQgT0VNIFhHU1BPTlNUMjAwMSwgYXJlIHRoZSB0YXJnZXRzIG9mIHRoaXMgZml4LiBUaGUgY29kZSBtb2RpZmllcyBgc2ZwX21hdGNoYCB0byBhbGxvdyBmb3IgcHJlZml4IG1hdGNoaW5nIG9mIHRoZSBwYXJ0IG5hbWUsIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGlzIGV2ZW4gcmVhY2hhYmxlIHdpdGhvdXQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIHByZXNlbnQuIFNGUCBtb2R1bGVzIGFyZSB0eXBpY2FsbHkgZGVzY3JpYmVkIHVzaW5nIGRldmljZSB0cmVlIG9yIEFDUEksIHNvIHRoZSBxdWVzdGlvbiBpcywgaG93IGRvZXMgdGhlIHN5c3RlbSBrbm93IGFib3V0IHRoZSBwcmVzZW5jZSBvZiB0aG9zZSBzcGVjaWZpYyBtb2R1bGVzPyBDYW4gdGhpcyBiZSBmdXp6ZWQgYnkgc3l6a2FsbGVyPyBJdCBtaWdodCBiZSBwb3NzaWJsZSB0byBpbmplY3QgdGhlc2UgcGxhdGZvcm0gZGV2aWNlcyB1c2luZyBgc3l6X2RldmAgb3IgdGhyb3VnaCBuZXRsaW5rIG9yIGV0aHRvb2wgaW50ZXJmYWNlcywgYXNzdW1pbmcgdGhleSdyZSBleHBvc2VkLlxuXG5Ib3dldmVyLCB0aGlzIGlzIHJlYWxseSBqdXN0IGEgc2ltcGxlIHRhYmxlIGxvb2t1cCBiYXNlZCBvbiB0aGUgRUVQUk9NIElEIG9mIGEgc3BlY2lmaWMgaGFyZHdhcmUgbW9kdWxlLiBUaGlzIElEIGlzIHJlYWQgZnJvbSB0aGUgSTJDIGJ1cy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gc2VlIHdoZXJlIGBzZnBfbG9va3VwX3F1aXJrYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbSwgdG8gdW5kZXJzdGFuZCB0aGUgcGF0aCBvZiBleGVjdXRpb24sIGFuZCB3aGF0IGV2ZW50IGFjdHVhbGx5IHRyaWdnZXJzIHRoZSBjYWxsLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxODoxMTo1OC4wMTAzMjExMTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NjU2NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNmcF9sb29rdXBfcXVpcmtcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L3NmcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9zZnAuYz02NTY9c3RhdGljIGJvb2wgc2ZwX21hdGNoKGNvbnN0IGNoYXIgKnFzLCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGJvb2wgcHJlZml4KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTY2Ny1cXG5kcml2ZXJzL25ldC9waHkvc2ZwLmM6NjY4OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3F1aXJrICpzZnBfbG9va3VwX3F1aXJrKGNvbnN0IHN0cnVjdCBzZnBfZWVwcm9tX2lkICppZClcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtNjY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yNTAyPXN0YXRpYyBpbnQgc2ZwX3NtX21vZF9wcm9iZShzdHJ1Y3Qgc2ZwICpzZnAsIGJvb2wgcmVwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTI2NzYtXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjI2Nzc6XFx0c2ZwLVxcdTAwM2VxdWlyayA9IHNmcF9sb29rdXBfcXVpcmsoXFx1MDAyNmlkKTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjY3OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTE6NTguMDg5OTgyMTI2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTYzNTI0ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPUZhbHNlOiBTRlAgTW9kdWxlIFF1aXJrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFkZHMgYSBmZXcgbmV3IHF1aXJrcyByZWxhdGVkIHRvIFNGUCBtb2R1bGVzLiBUaGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24sIGBzZnBfc21fbW9kX3Byb2JlYCwgaXMgdHJpZ2dlcmVkIHdoZW4gYSBTeXN0ZW0gRmFicmljIFBsdWcgKFNGUCkgbW9kdWxlIGlzIHByb2JlZC4gVGhpcyBpbXBsaWVzIHRoZSBwcmVzZW5jZSBvZiBhbiBJMkMgYnVzIGFuZCBhIHBoeXNpY2FsbHkgY29ubmVjdGVkIFNGUCBtb2R1bGUsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhbiBJMkMgZGV2aWNlIHRoYXQncyByZXNwb25kaW5nIGF0IHRoZSBTRlAgRUVQUk9NIGFkZHJlc3MuIEEga2V5IHBvaW50IGhlcmUgaXMgdGhhdCBTeXprYWxsZXIsIHRoZSBmdXp6ZXIgd2UncmUgdXNpbmcsIGRvZXNuJ3QgY3VycmVudGx5IGVtdWxhdGUgdGhlc2UgU0ZQIEkyQyBFRVBST01zLlxuXG5HaXZlbiB0aGUgc2V0dXAgcmVxdWlyZWQsIG15IGluaXRpYWwgaW5jbGluYXRpb24gaXMgdGhhdCB0aGlzIGlzbid0IGEgaGlnaC1wcmlvcml0eSBmdXp6aW5nIHRhcmdldC4gVGhlIGNoYW5nZSBpdHNlbGYgbG9va3MgZXhjZWVkaW5nbHkgdHJpdmlhbDogYSBwcmVmaXggbWF0Y2ggZm9yIGEgcXVpcmsgYW5kIHR3byBicmFuZC1uZXcgcXVpcmtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkLiBJcyB0aGVyZSBhbnkgcmVhbCBiZW5lZml0IHRvIGRlZGljYXRlIGZ1enplciBjeWNsZXMgdG8gdGhpcz9cblxuTGV0IG1lIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIGBzZnBfbWF0Y2hgIGZ1bmN0aW9uLCB0byBtYWtlIHN1cmUgdGhlcmUncyBubyBoaWRkZW4gY29tcGxleGl0eS4gQWgsIGl0J3MganVzdCBkb2luZyBhIGBzdHJuY21wYC4gVmVyeSBzdHJhaWdodGZvcndhcmQuXG5cbkJhc2VkIG9uIGV2ZXJ5dGhpbmcgSSd2ZSBzZWVuLCBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcHJpbWFyeSByZWFzb24gaXMgdGhhdCB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcXVpcmsgdGFpbG9yZWQgdG8gU0ZQIG1vZHVsZXMuIEl0IHdvdWxkIGVpdGhlciBuZWVkIHBoeXNpY2FsIGhhcmR3YXJlIG9yIEkyQyBlbXVsYXRpb24gb2YgdGhlIFNGUCdzIEVFUFJPTSwgYW5kIG5laXRoZXIgb2YgdGhvc2UgYXJlIHJlYWRpbHkgYXZhaWxhYmxlIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLiBBbHNvLCB0aGUgY2hhbmdlIGluIHRoZSBsb2dpYyBpcyBuZWdsaWdpYmxlLiBJdCdzIHNpbXBseSBub3Qgd29ydGggdGhlIGVmZm9ydC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTU1MCwiT3V0cHV0VG9rZW5zIjoxMTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MDQuMjg2MzM3NDg1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBoYXJkd2FyZS1zcGVjaWZpYyBxdWlya3MgZm9yIFNGUCBtb2R1bGVzIChGUyBYR1MtU0ZQLU9OVC1NQUNJIGFuZCBPRU0gWEdTUE9OU1QyMDAxKSBhbmQgYSB0cml2aWFsIHByZWZpeCBtYXRjaGluZyBsb2dpYyBmb3IgdGhlIHBhcnQgbmFtZSBpbiB0aGUgU0ZQIEVFUFJPTSBJRC4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hhYmxlIHdoZW4gc3BlY2lmaWMgcGh5c2ljYWwgU0ZQIG1vZHVsZXMgYXJlIHByb2JlZCBvdmVyIEkyQywgd2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIGZ1enppbmcgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTg6MTI6MDQuMjg2MzYxNDM1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4pbng[1] Phase: Running StartedAt: 2026-08-12 18:12:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4pbng[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-12 18:12:15 +0000 UTC FinishedAt: 2026-08-12 18:12:25 +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,}