Name: series-workflowlqfwv Phase: Failed StartedAt: 2026-08-11 09:20:55 +0000 UTC FinishedAt: 2026-08-11 09:41:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqfwv[0] Phase: Succeeded StartedAt: 2026-08-11 09:20:55 +0000 UTC FinishedAt: 2026-08-11 09:41:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqfwv[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 09:20:55 +0000 UTC FinishedAt: 2026-08-11 09:41:08 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNkZjc2ZDdkZTEzYWQwN2VhNTZkZWJlYTk0MGE4ZDVmODk1ZTNkZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo0MDoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tbXVfbm90aWZpZXIuYyBiL21tL21tdV9ub3RpZmllci5jXG5pbmRleCAyNDViNzRmMzlmOTEyLi5jZDVkMTVjZDY0NmE1IDEwMDY0NFxuLS0tIGEvbW0vbW11X25vdGlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tdV9ub3RpZmllci5jXG5AQCAtNTIwLDExICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxuIFx0XHRpZiAob3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpIHtcbiBcdFx0XHRpbnQgX3JldDtcbiBcbi1cdFx0XHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxuLVx0XHRcdFx0bm9uX2Jsb2NrX3N0YXJ0KCk7XG4gXHRcdFx0X3JldCA9IG9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN1YnNjcmlwdGlvbiwgcmFuZ2UpO1xuLVx0XHRcdGlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpXG4tXHRcdFx0XHRub25fYmxvY2tfZW5kKCk7XG4gXHRcdFx0aWYgKF9yZXQpIHtcbiBcdFx0XHRcdHByX2luZm8oXCYjMzQ7JXBTIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIGluICVzYmxvY2thYmxlIGNvbnRleHQuXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCxcbkBAIC01OTEsMTQgJiM0Mzs1ODcsOSBAQCBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXG4gXHRpZCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnNyY3UpO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc3JjdShzdWJzY3JpcHRpb24sIFx1MDAyNnN1YnNjcmlwdGlvbnMtXHUwMDNlbGlzdCwgaGxpc3QsXG4gXHRcdFx0XHQgc3JjdV9yZWFkX2xvY2tfaGVsZChcdTAwMjZzcmN1KSkge1xuLVx0XHRpZiAoc3Vic2NyaXB0aW9uLVx1MDAzZW9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX2VuZCkge1xuLVx0XHRcdGlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpXG4tXHRcdFx0XHRub25fYmxvY2tfc3RhcnQoKTtcbiYjNDM7XHRcdGlmIChzdWJzY3JpcHRpb24tXHUwMDNlb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kKVxuIFx0XHRcdHN1YnNjcmlwdGlvbi1cdTAwM2VvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Vic2NyaXB0aW9uLFxuIFx0XHRcdFx0XHRcdFx0XHRyYW5nZSk7XG4tXHRcdFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcbi1cdFx0XHRcdG5vbl9ibG9ja19lbmQoKTtcbi1cdFx0fVxuIFx0fVxuIFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZzcmN1LCBpZCk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGFubm90YXRpb25zIGFyb3VuZCBtbXVfbm90aWZpZXIgY2FsbGJhY2tzLiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZXhjbHVzaXZlbHkgZm9yIGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYCB0byB0cmlnZ2VyIHdhcm5pbmdzIGlmIHRoZSBjb2RlIHNsZWVwcyBpbiBhIG5vbi1ibG9ja2luZyBjb250ZXh0LiBSZW1vdmluZyB0aGVtIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgb2YgdGhlIGtlcm5lbCwgaXQgb25seSByZW1vdmVzIGEgZGVidWdnaW5nIGFzc2VydGlvbi4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCByZXF1aXJlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2RmNzZkN2RlMTNhZDA3ZWE1NmRlYmVhOTQwYThkNWY4OTVlM2RmMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA5OjQwOjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90aWZpZXIuYwppbmRleCAyNDViNzRmMzlmOTEyLi5jZDVkMTVjZDY0NmE1IDEwMDY0NAotLS0gYS9tbS9tbXVfbm90aWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXVfbm90aWZpZXIuYwpAQCAtNTIwLDExICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KAogCQlpZiAob3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KSB7CiAJCQlpbnQgX3JldDsKIAotCQkJaWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKLQkJCQlub25fYmxvY2tfc3RhcnQoKTsKIAkJCV9yZXQgPSBvcHMtJmd0O2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3Vic2NyaXB0aW9uLCByYW5nZSk7Ci0JCQlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKQotCQkJCW5vbl9ibG9ja19lbmQoKTsKIAkJCWlmIChfcmV0KSB7CiAJCQkJcHJfaW5mbygmIzM0OyVwUyBjYWxsYmFjayBmYWlsZWQgd2l0aCAlZCBpbiAlc2Jsb2NrYWJsZSBjb250ZXh0LlxuJiMzNDssCiAJCQkJCW9wcy0mZ3Q7aW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCwKQEAgLTU5MSwxNCAmIzQzOzU4Nyw5IEBAIG1uX2hsaXN0X2ludmFsaWRhdGVfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucywKIAlpZCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7c3JjdSk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc3JjdShzdWJzY3JpcHRpb24sICZhbXA7c3Vic2NyaXB0aW9ucy0mZ3Q7bGlzdCwgaGxpc3QsCiAJCQkJIHNyY3VfcmVhZF9sb2NrX2hlbGQoJmFtcDtzcmN1KSkgewotCQlpZiAoc3Vic2NyaXB0aW9uLSZndDtvcHMtJmd0O2ludmFsaWRhdGVfcmFuZ2VfZW5kKSB7Ci0JCQlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKQotCQkJCW5vbl9ibG9ja19zdGFydCgpOwomIzQzOwkJaWYgKHN1YnNjcmlwdGlvbi0mZ3Q7b3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX2VuZCkKIAkJCXN1YnNjcmlwdGlvbi0mZ3Q7b3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX2VuZChzdWJzY3JpcHRpb24sCiAJCQkJCQkJCXJhbmdlKTsKLQkJCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpCi0JCQkJbm9uX2Jsb2NrX2VuZCgpOwotCQl9CiAJfQogCXNyY3VfcmVhZF91bmxvY2soJmFtcDtzcmN1LCBpZCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtbXVfbm90aWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbW11X25vdGlmaWVyLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gdGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgY2FsbHMgc3Vycm91bmRpbmcgdGhlIGBvcHMtJmd0O2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgb3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX2VuZGAgY2FsbHMgd2l0aGluIGBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYG1uX2hsaXN0X2ludmFsaWRhdGVfZW5kYC4gVGhlc2UgYXJlLCBhcyBJIHJlY2FsbCwgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGRlZXBseSBpbnRlcnR3aW5lZCB3aXRoIHRoZSBtbXUgbm90aWZpZXIgbWVjaGFuaXNtLiBJdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIHRob3NlIGNhbGxzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgYW5kIGBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoYW5nZSYjMzk7cyBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuCgpBaCwgd2FpdCBhIG1vbWVudC4gYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAuLi4gdGhvc2UgYXJlIG1hY3JvcyBvciwgcG90ZW50aWFsbHksIGlubGluZSBmdW5jdGlvbnMsIGFyZW4mIzM5O3QgdGhleT8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGZvciB0aG9zZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IHRoZXkgYXJlIGFjdHVhbGx5IGRvaW5nLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBpbnRlbmRlZCB0byBvcGVyYXRlIHdpdGhpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIHRvIHVuZGVyc3RhbmQgaG93IHRoZWlyIHJlbW92YWwgYWZmZWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vbl9ibG9ja19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21tdV9ub3RpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgTU1VIEludmFsaWRhdGlvbiBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHRoZSByb290IGNhdXNlIG9mIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIE15IGd1dCBmZWVsaW5nIGlzIGxlYWRpbmcgbWUgdG93YXJkcyBzb21lIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoaW4gdGhlIE1NVSBub3RpZmllciBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyBvciByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGludmFsaWRhdGluZyBhZGRyZXNzIHJhbmdlcy4KCkkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VhcmNoIGZvciB0aGF0IHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9tbXVfbm90aWZpZXIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgYWRkcmVzcyByYW5nZSBpbnZhbGlkYXRpb25zIGFyZSBpbml0aWF0ZWQgYW5kIGhhbmRsZWQuIEFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgaG9wZWZ1bGx5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cywgb3IgYXQgbGVhc3QgaGVscCBtZSBuYXZpZ2F0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBtb3JlIGVmZmVjdGl2ZWx5LiBJdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludCwgSSB0aGluaywgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBjb29yZGluYXRlcyBNTVUgaW52YWxpZGF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tbXVfbm90aWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbXVfbm90aWZpZXIuYz00NTY9c3RhdGljIGludCBtbl9pdHJlZV9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy01MDYtXG5tbS9tbXVfbm90aWZpZXIuYzo1MDc6c3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxubW0vbW11X25vdGlmaWVyLmMtNTA4LVx0c3RydWN0IG1tdV9ub3RpZmllcl9zdWJzY3JpcHRpb25zICpzdWJzY3JpcHRpb25zLFxuLS1cbm1tL21tdV9ub3RpZmllci5jPTU2ND1pbnQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy01NzUtXHRpZiAoIWhsaXN0X2VtcHR5KFx1MDAyNnN1YnNjcmlwdGlvbnMtXHUwMDNlbGlzdCkpXG5tbS9tbXVfbm90aWZpZXIuYzo1NzY6XHRcdHJldHVybiBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN1YnNjcmlwdGlvbnMsIHJhbmdlKTtcbm1tL21tdV9ub3RpZmllci5jLTU3Ny1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1NIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgYW5kIGBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZGAuICBUaG9zZSBnZXQgY2FsbGVkIGZyb20gYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCB3aGljaCBhcmUgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuIEhtbSwgdGhleSYjMzk7cmUgcmVtb3ZpbmcgY2FsbHMgdG8gYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAuICBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBXZXJlIHRob3NlIGp1c3QgZm9yIGRlYnVnZ2luZywgbWF5YmUgbG9ja2RlcCByZWxhdGVkLCBvciBpcyB0aGlzIGEgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZT8gTGV0IG1lIHNlZSB3aGF0IGBub25fYmxvY2tfc3RhcnQoKWAgYWN0dWFsbHkgKmRpZCouIEFoLCBpdCYjMzk7cyBub3QgZXZlbiBpbiB0aGUgZmlsZSBhbnltb3JlLgoKTGV0IG1lIGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNoYW5nZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgZnJvbSB0aG9zZSBmdW5jdGlvbnMgaXMgdGhlIG1haW4gdGhpbmcuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLiBJdCYjMzk7cyByZW1vdmluZyBzb21lIGtpbmQgb2YgY29udGV4dCB0cmFja2luZyBvciBsb2NraW5nIGFzc2VydGlvbnMsIGNsZWFybHkuIFdhaXQsIGBub25fYmxvY2tfc3RhcnQoKWAgaXMgKnByb2JhYmx5KiBhIG1hY3JvLCBkb2luZyBzb21ldGhpbmcgbGlrZSBgcHJlZW1wdF9kaXNhYmxlKClgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEb2VzbiYjMzk7dCByZWFsbHkgbWF0dGVyLCBpdCYjMzk7cyBiZWVuIHJlbW92ZWQhCgpJIHNob3VsZCBjaGVjayB0aGUgaGlzdG9yeSBvZiBgaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaGAgb3IgYG1tL21tdV9ub3RpZmllci5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIE5ldmVybWluZCwgdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGl0IHdhcyByZW1vdmVkLgoKSXMgdGhpcyB3b3J0aCBhIGZ1enppbmcgZWZmb3J0PyBZZWFoLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLiBXZSBuZWVkIHRvIGZvY3VzIG9uIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIHRob3NlIGBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlXypgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGUgb25lcyB3ZSB3YW50IGFyZSBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV8qYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbW11X25vdGlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW11X25vdGlmaWVyLmM9MjU9REVGSU5FX1NUQVRJQ19TUkNVKHNyY3UpO1xuLS1cbm1tL21tdV9ub3RpZmllci5jLTI3LSNpZmRlZiBDT05GSUdfTE9DS0RFUFxubW0vbW11X25vdGlmaWVyLmM6Mjg6c3RydWN0IGxvY2tkZXBfbWFwIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwID0ge1xubW0vbW11X25vdGlmaWVyLmMtMjktXHQubmFtZSA9IFwmIzM0O21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0XCYjMzQ7XG4tLVxubW0vbW11X25vdGlmaWVyLmM9MTg4PW1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKmludGVydmFsX3N1Yilcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy0yNDYtXHQgKi9cbm1tL21tdV9ub3RpZmllci5jOjI0NzpcdGxvY2tfbWFwX2FjcXVpcmUoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmM6MjQ4Olx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XG5tbS9tbXVfbm90aWZpZXIuYy0yNDktXHRpZiAoaXNfaW52YWxpZGF0aW5nKVxuLS1cbm1tL21tdV9ub3RpZmllci5jPTUwNz1zdGF0aWMgaW50IG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXG4tLVxubW0vbW11X25vdGlmaWVyLmMtNTYzLVxubW0vbW11X25vdGlmaWVyLmM6NTY0OmludCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxubW0vbW11X25vdGlmaWVyLmMtNTY1LXtcbi0tXG5tbS9tbXVfbm90aWZpZXIuYz01OTc9dm9pZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy02MDEtXG5tbS9tbXVfbm90aWZpZXIuYzo2MDI6XHRsb2NrX21hcF9hY3F1aXJlKFx1MDAyNl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTtcbm1tL21tdV9ub3RpZmllci5jLTYwMy1cdGlmIChzdWJzY3JpcHRpb25zLVx1MDAzZWhhc19pdHJlZSlcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy02MDctXHRcdG1uX2hsaXN0X2ludmFsaWRhdGVfZW5kKHN1YnNjcmlwdGlvbnMsIHJhbmdlKTtcbm1tL21tdV9ub3RpZmllci5jOjYwODpcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmMtNjA5LX1cbi0tXG5tbS9tbXVfbm90aWZpZXIuYz0xMDc2PXZvaWQgbW11X2ludGVydmFsX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICppbnRlcnZhbF9zdWIpXG4tLVxubW0vbW11X25vdGlmaWVyLmMtMTEwOC1cdCAqL1xubW0vbW11X25vdGlmaWVyLmM6MTEwOTpcdGxvY2tfbWFwX2FjcXVpcmUoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmM6MTExMDpcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmMtMTExMS1cdGlmIChzZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGF0IHByb21wdDoKCioqQW5hbHl6aW5nIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAqKgoKQWxyaWdodCwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gdGhpbmsgdGhyb3VnaCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgTU1VIG5vdGlmaWVyIGZyYW1ld29yaywgd2hpY2gsIGFzIHdlIGtub3csIGlzICpjcnVjaWFsKiBpbiBMaW51eCBmb3IgdHJhY2tpbmcgYWRkcmVzcyBzcGFjZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIG1lbW9yeSwgZGV2aWNlIG1lbW9yeSwgb3IgYW55dGhpbmcgaW52b2x2aW5nIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgY29udGV4dC4gSSYjMzk7bSBndWVzc2luZyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiB0aGUgKmVuZCogb2YgYW4gaW52YWxpZGF0aW9uIHJhbmdlLCB3aGljaCBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBkZWFsbG9jYXRpb24gb3IgcmVnaW9uIHNocmlua2luZy4KCk15IGd1dCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYXMgYSB2aXRhbCByb2xlLiBNeSBpbml0aWFsIHRob3VnaHQgZ29lcyB0byB0aGUgc3BlY2lmaWNzLiBJIGFtIHByb2JhYmx5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb24gd2l0aCBzZXZlcmFsIGNvbmNlcm5zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBpcyB0aGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplZCB3aXRoIG90aGVyIG9wZXJhdGlvbnMgb24gdGhlIE1NVT8gV2UgbmVlZCB0byBlbnN1cmUgYXRvbWljaXR5LgoqICAgKipDb250ZXh0OioqIFdoYXQgY29udGV4dHMgY2FuIHRoaXMgZnVuY3Rpb24gYmUgY2FsbGVkIGZyb20/IEFyZSB3ZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dD8gVGFzayBjb250ZXh0PyBLbm93aW5nIHRoaXMgaGVscHMgZmlndXJlIG91dCBsb2NraW5nIG5lZWRzLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgZXJyb3JzPyBJZiBzbywgd2hhdCBkbyB0aGV5IGxvb2sgZm9yPyBXaGF0IGVycm9ycyBhcmUgcmV0dXJuZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIGhhbmRsaW5nPwoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBUaGUgTU1VIG5vdGlmaWVyIGxpc3QgaXRzZWxmLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0IGFib3V0IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgaW52YWxpZGF0ZWQgcmFuZ2U/IEFueSBzaGFyZWQgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoPwoqICAgKipQZXJmb3JtYW5jZToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHNjYWxlPyBXaGF0JiMzOTtzIHRoZSB0aW1lIGNvbXBsZXhpdHk/IElmIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgaGlnaGx5IGNvbnRlbmRlZCBzZWN0aW9uIG9mIG1lbW9yeSwgaXMgdGhpcyBhIHBvdGVudGlhbCBib3R0bGVuZWNrPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZXNlIGNvbmNlcm5zLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gbGVhZGluZyB0byBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uKHMpIGdpdmVzIGEgbG90IG9mIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21tdV9ub3RpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tdV9ub3RpZmllci5jPTU4MT1tbl9obGlzdF9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXG4tLVxubW0vbW11X25vdGlmaWVyLmMtNTk2LVxubW0vbW11X25vdGlmaWVyLmM6NTk3OnZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXG5tbS9tbXVfbm90aWZpZXIuYy01OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDEwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkZpbmRpbmcgdGhlIFJpZ2h0IENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQmFzZWQgb24gdGhlIG1lbnRpb24sIGl0IHNvdW5kcyBsaWtlIGBDT05GSUdfTU1VX05PVElGSUVSYCBpcyB0aGUga2V5LiBOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgZm9yIHRoaXM/IE5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zJiMzOTsgY29uZmlndXJhdGlvbiBmaWxlcy4gYG1tL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYXJlIG1hbmFnZWQgd2l0aGluIGBtbS9NYWtlZmlsZWAuIEVpdGhlciB3YXksIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TU1VX05PVElGSUVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjgwPWNvbmZpZyBQSFlTX0FERFJfVF82NEJJVFxuLS1cbm1tL0tjb25maWctNjgyLVxubW0vS2NvbmZpZzo2ODM6Y29uZmlnIE1NVV9OT1RJRklFUlxubW0vS2NvbmZpZy02ODQtXHRib29sXG4tLVxubW0vTWFrZWZpbGU9ODg9b2JqLSQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKSAmIzQzOz0gc3BhcnNlLXZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODk6b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgJiM0Mzs9IG1tdV9ub3RpZmllci5vXG5tbS9NYWtlZmlsZS05MC1vYmotJChDT05GSUdfS1NNKSAmIzQzOz0ga3NtLm9cbi0tXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xOTItXHRcdFwmIzM0O2V4ZV9maWxlICVweFxcblwmIzM0O1xubW0vZGVidWcuYzoxOTM6I2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVJcbm1tL2RlYnVnLmMtMTk0LVx0XHRcJiMzNDtub3RpZmllcl9zdWJzY3JpcHRpb25zICVweFxcblwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjIxLVx0XHRtbS1cdTAwM2VleGVfZmlsZSxcbm1tL2RlYnVnLmM6MjIyOiNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSXG5tbS9kZWJ1Zy5jLTIyMy1cdFx0bW0tXHUwMDNlbm90aWZpZXJfc3Vic2NyaXB0aW9ucyxcbi0tXG5tbS9pbnRlcm5hbC5oPTE4ODE9c3RhdGljIGlubGluZSB2b2lkIG1heWJlX3JtYXBfdW5sb2NrX2FjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTE4OTQtXG5tbS9pbnRlcm5hbC5oOjE4OTU6I2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVJcbm1tL2ludGVybmFsLmgtMTg5Ni1zdGF0aWMgaW5saW5lIGJvb2wgY2xlYXJfZmx1c2hfeW91bmdfcHRlc19ub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaW50ZXJuYWwuaD0xOTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nX25vdGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTE5MzYtXG5tbS9pbnRlcm5hbC5oOjE5Mzc6I2Vsc2UgLyogQ09ORklHX01NVV9OT1RJRklFUiAqL1xubW0vaW50ZXJuYWwuaC0xOTM4LVxuLS1cbm1tL2ludGVybmFsLmgtMTk0My1cbm1tL2ludGVybmFsLmg6MTk0NDojZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAqL1xubW0vaW50ZXJuYWwuaC0xOTQ1LVxuLS1cbm1tL21tdV9ub3RpZmllci5jPTI3Mj1zdGF0aWMgdm9pZCBtbl9pdHJlZV9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy0yNzUtXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlID0ge1xubW0vbW11X25vdGlmaWVyLmM6Mjc2Olx0XHQuZmxhZ3MgPSBNTVVfTk9USUZJRVJfUkFOR0VfQkxPQ0tBQkxFLFxubW0vbW11X25vdGlmaWVyLmMtMjc3LVx0XHQuZXZlbnQgPSBNTVVfTk9USUZZX1JFTEVBU0UsXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQzMjg9dm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzMzUtXG5tbS9wYWdlX2FsbG9jLmM6NDMzNjojaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUlxubW0vcGFnZV9hbGxvYy5jLTQzMzctXHRcdGxvY2tfbWFwX2FjcXVpcmUoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTU1VIE5vdGlmaWVyIENvbnRleHQgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZywgYE1NVV9OT1RJRklFUmAsIGFuZCB0aGUgY29kZSBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gVGhlIHBhdGNoIG5vdGVzIHRoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgYXJlIGdvbmUuIEhtbSwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcG90ZW50aWFsIHNoaWZ0IGluIGhvdyBibG9ja2luZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgTU1VIG5vdGlmaWVyIGNvbnRleHQuCgpJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBzcGVuZGluZyB0aW1lIG9uIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBmYWN0IHRoYXQgdGhlIGNvbnRleHQgb2YgTU1VIG5vdGlmaWVyIGNhbGxzIGlzIHNoaWZ0aW5nIGlzIGEgcmVkIGZsYWcuIEl0IG9wZW5zIHRoZSBkb29yIHRvIHBvdGVudGlhbCBidWdzLiBNYXliZSBub3QgYmxvY2tpbmcgd2hlbiB3ZSBzaG91bGQsIG9yIHRoZSBvcHBvc2l0ZS4gVGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgaXMgdGhlIGtleS4gVGhvc2UgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBlbmZvcmNpbmcgYSBub24tYmxvY2tpbmcgY29udGV4dCwgb3IgcGVyaGFwcyB0aGV5IHdlcmUganVzdCBsb2NrZGVwIGFubm90YXRpb25zLiBJZiB0aGV5ICp3ZXJlKiBlbmZvcmNpbmcgbm9uLWJsb2NraW5nLCB0aGVuIHRoZWlyIHJlbW92YWwgKmRpcmVjdGx5KiBpbmZsdWVuY2VzIHdoZXRoZXIgYmxvY2tpbmcgaXMgcGVybWl0dGVkLCBhbmQgYnkgd2hvbS4gVGhlIHBvc3NpYmlsaXR5IG9mIGJsb2NrZWQgY29udGV4dHMgaGVyZSBpcyBzZXJpb3VzLgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhY3R1YWxseSAqZGlkKi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9uX2Jsb2NrX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXJuZWwuaD03Nj1leHRlcm4gdm9pZCBfX2NhbnRfbWlncmF0ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC04Mi0gKiBjb250ZXh0IChzcGlubG9jaywgaXJxLWhhbmRsZXIsIC4uLikuIEFkZGl0aW9uYWwgc2VjdGlvbnMgd2hlcmUgYmxvY2tpbmcgaXNcbmluY2x1ZGUvbGludXgva2VybmVsLmg6ODM6ICogbm90IGFsbG93ZWQgY2FuIGJlIGFubm90YXRlZCB3aXRoIG5vbl9ibG9ja19zdGFydCgpIGFuZCBub25fYmxvY2tfZW5kKClcbmluY2x1ZGUvbGludXgva2VybmVsLmgtODQtICogcGFpcnMuXG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMTItLyoqXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjExMzogKiBub25fYmxvY2tfc3RhcnQgLSBhbm5vdGF0ZSB0aGUgc3RhcnQgb2Ygc2VjdGlvbiB3aGVyZSBzbGVlcGluZyBpcyBwcm9oaWJpdGVkXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTExNC0gKlxuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjI6IyBkZWZpbmUgbm9uX2Jsb2NrX3N0YXJ0KCkgKGN1cnJlbnQtXHUwMDNlbm9uX2Jsb2NrX2NvdW50JiM0MzsmIzQzOylcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIzLS8qKlxuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI1LSAqXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjEyNjogKiBDbG9zZXMgYSBzZWN0aW9uIG9wZW5lZCBieSBub25fYmxvY2tfc3RhcnQoKS5cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI3LSAqL1xuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmg9MTMyPXN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSB7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEzNi0jIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpIGRvIHsgfSB3aGlsZSAoMClcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTM3OiMgZGVmaW5lIG5vbl9ibG9ja19zdGFydCgpIGRvIHsgfSB3aGlsZSAoMClcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTM4LSMgZGVmaW5lIG5vbl9ibG9ja19lbmQoKSBkbyB7IH0gd2hpbGUgKDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIE5vbi1CbG9ja2luZyBDb250ZXh0IFRyYWNraW5nKioKCk9rYXksIHNvIGBub25fYmxvY2tfc3RhcnQoKWAuLi4gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBidW1wcyB1cCBgY3VycmVudC0mZ3Q7bm9uX2Jsb2NrX2NvdW50YC4gUmlnaHQsIGFuZCB0aGF0IGNvdW50ZXIgaXMgdGhlIGtleSB0byBgbWlnaHRfc2xlZXAoKWAmIzM5O3MgZnVuY3Rpb25hbGl0eSDigJMgcHJldmVudGluZyBzbGVlcCBjYWxscyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXkmIzM5O3JlIG5vdCBhbGxvd2VkLiBJdCYjMzk7cyBhIGtpbmQgb2YgZ3VhcmRyYWlsLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi1ibG9ja2luZyBjb250ZXh0cy4KClNvLCBpZiB3ZSB0YWtlIG91dCBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCwgc3VkZGVubHkgYG1pZ2h0X3NsZWVwKClgIHdvbiYjMzk7dCB3YXJuIHVzIGFueW1vcmUgaWYsIHNheSwgbm90aWZpZXIgY2FsbGJhY2tzIGRlY2lkZSB0byBuYXAgd2hlbiBgIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLgoKQnV0IGlzIHRoaXMganVzdCBhIGNvc21ldGljIHRoaW5nPyBJcyBpdCAqZnVuY3Rpb25hbGx5KiBjaGFuZ2luZyBhbnl0aGluZywgYmV5b25kIGp1c3QgcmVtb3ZpbmcgYSBkZWJ1Z2dpbmcgYWlkIG9yIGEgbG9ja2RlcC1saWtlIGFubm90YXRpb24/IGBtaWdodF9zbGVlcCgpYCBpcyByZWFsbHkganVzdCBhIGRlYnVnIGZlYXR1cmUsIGlzbiYjMzk7dCBpdD8gVGllZCB0byBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAsIGFzIEkgcmVjYWxsLgoKSGFuZyBvbuKApiBpcyBgY3VycmVudC0mZ3Q7bm9uX2Jsb2NrX2NvdW50YCAqb25seSogZXZlciB1c2VkIGJ5IGBtaWdodF9zbGVlcCgpYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UuIEl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IHdlIGhhdmVuJiMzOTt0IGxvc3Qgc29tZSBzdWJ0bGUgc2lkZSBlZmZlY3Qgb3IgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHJlbW92YWwgaXMgY2xlYW4gYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gb3RoZXIgYXJlYXMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9uX2Jsb2NrX2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2VybmVsLmg9NzY9ZXh0ZXJuIHZvaWQgX19jYW50X21pZ3JhdGUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpO1xuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjI6IyBkZWZpbmUgbm9uX2Jsb2NrX3N0YXJ0KCkgKGN1cnJlbnQtXHUwMDNlbm9uX2Jsb2NrX2NvdW50JiM0MzsmIzQzOylcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIzLS8qKlxuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI3LSAqL1xuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjg6IyBkZWZpbmUgbm9uX2Jsb2NrX2VuZCgpIFdBUk5fT04oY3VycmVudC1cdTAwM2Vub25fYmxvY2tfY291bnQtLSA9PSAwKVxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMjktI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODIwPXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEyNTUtI2lmZGVmIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMjU2Olx0aW50XHRcdFx0XHRub25fYmxvY2tfY291bnQ7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTI1Ny0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTU5NDQ9c3RhdGljIGlubGluZSB2b2lkIHNjaGVkdWxlX2RlYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgYm9vbCBwcmVlbXB0KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1NC0jaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUFxua2VybmVsL3NjaGVkL2NvcmUuYzo1OTU1Olx0aWYgKCFwcmVlbXB0IFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UocHJldi1cdTAwM2VfX3N0YXRlKSBcdTAwMjZcdTAwMjYgcHJldi1cdTAwM2Vub25fYmxvY2tfY291bnQpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1Ni1cdFx0cHJpbnRrKEtFUk5fRVJSIFwmIzM0O0JVRzogc2NoZWR1bGluZyBpbiBhIG5vbi1ibG9ja2luZyBzZWN0aW9uOiAlcy8lZC8laVxcblwmIzM0Oyxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTk1NzpcdFx0XHRwcmV2LVx1MDAzZWNvbW0sIHByZXYtXHUwMDNlcGlkLCBwcmV2LVx1MDAzZW5vbl9ibG9ja19jb3VudCk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5NTgtXHRcdGR1bXBfc3RhY2soKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTkxMTc9dm9pZCBfX21pZ2h0X3Jlc2NoZWQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGludCBvZmZzZXRzKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEyNy1cdGlmICgocmVzY2hlZF9vZmZzZXRzX29rKG9mZnNldHMpIFx1MDAyNlx1MDAyNiAhaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2NvcmUuYzo5MTI4Olx0ICAgICAhaXNfaWRsZV90YXNrKGN1cnJlbnQpIFx1MDAyNlx1MDAyNiAhY3VycmVudC1cdTAwM2Vub25fYmxvY2tfY291bnQpIHx8XG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxMjktXHQgICAgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HIHx8IHN5c3RlbV9zdGF0ZSBcdTAwM2UgU1lTVEVNX1JVTk5JTkcgfHxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNDItXHRwcl9lcnIoXCYjMzQ7aW5fYXRvbWljKCk6ICVkLCBpcnFzX2Rpc2FibGVkKCk6ICVkLCBub25fYmxvY2s6ICVkLCBwaWQ6ICVkLCBuYW1lOiAlc1xcblwmIzM0Oyxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE0MzpcdCAgICAgICBpbl9hdG9taWMoKSwgaXJxc19kaXNhYmxlZCgpLCBjdXJyZW50LVx1MDAzZW5vbl9ibG9ja19jb3VudCxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE0NC1cdCAgICAgICBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MgoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA5MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYG5vbl9ibG9ja19jb3VudGAgaXMgb25seSByZWxldmFudCBpZiBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgaXMgZW5hYmxlZCwgYW5kIGl0JiMzOTtzIHVzZWQgcHVyZWx5IGZvciBkZWJ1Z2dpbmcg4oCTIHNwZWNpZmljYWxseSwgdG8gZmxhZyBwb3RlbnRpYWwgaXNzdWVzIGluIGBfX21pZ2h0X3Jlc2NoZWRgIGFuZCBgc2NoZWR1bGVfZGVidWdgLiBJdCBkb2VzbiYjMzk7dCBhY3R1YWxseSAqY2hhbmdlKiBob3cgdGhlIGtlcm5lbCBvcGVyYXRlcyBvciBpdHMgY29udHJvbCBmbG93LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGRlYnVnZ2luZyBhbm5vdGF0aW9uLCBhIHdhcm5pbmcgbWVjaGFuaXNtLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgY2hhbmdlcyByZWxhdGVkIHRvICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMmIzM0OyBkb24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBJcyByZW1vdmluZyBhIGRlYnVnZ2luZyBhbm5vdGF0aW9uIGNvbnNpZGVyZWQgYSBmdW5jdGlvbmFsIGNoYW5nZT8gTm8sIGl0JiMzOTtzIG5vdC4gSXQgZG9lc24mIzM5O3QgYWZmZWN0IHRoZSBleGVjdXRpb24gcGF0aDsgaXQgb25seSBhZmZlY3RzIHdoZXRoZXIgYSB3YXJuaW5nIGdldHMgcHJpbnRlZCBpZiBhIGZ1bmN0aW9uIHNsZWVwcy4KClRoZSBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBtYWNyb3MgYXJlIGVzc2VudGlhbGx5IG5vLW9wcyB1bmxlc3MgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIGlzIGFjdGl2ZS4gRXZlbiB0aGVuLCB0aGV5IGp1c3QgbWFuYWdlIGEgY291bnRlciB1c2VkIGZvciB0aGVzZSB3YXJuaW5ncy4gIGBzY2hlZHVsZV9kZWJ1Z2AgY2FsbHMgYGR1bXBfc3RhY2soKWAgYW5kIHByaW50cyBhIHdhcm5pbmcsIGJ1dCBpdCBkb2VzbiYjMzk7dCB0cmlnZ2VyIGEgcGFuaWMgdW5sZXNzIGBwYW5pY19vbl93YXJuYCBpcyBzZXQuICBFdmVuIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgdGhlIGNoZWNrIHdpdGggYG5vbl9ibG9ja19jb3VudGAgcmVzdWx0cyBpbiBhIHdhcm5pbmcsIGBkdW1wX3N0YWNrKClgIGFuZCBrZXJuZWwgdGFpbnQsIGJ1dCBkb2VzbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uIGZsb3cuCgpTbywgdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCAqb25seSogcmVtb3ZlcyB0aGVzZSBkZWJ1ZyBhc3NlcnRpb25zLiBJdOKAmXMgYSBjbGVhbi11cCwgcmVtb3Zpbmcgd2FybmluZ3MuIEl0IGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBhY3R1YWwgbG9ja2luZyBvciBzY2hlZHVsaW5nIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIG5vLW9wIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlOyBpdCYjMzk7cyBhIGRvY3VtZW50YXRpb24vZGVidWdnaW5nIGNoYW5nZSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBmdXp6ZWQuCgpMZXQgbWUgY29uZmlybSB0aGUgYWN0dWFsIGNoYW5nZTogWWVzLCBpdCBqdXN0IHJlbW92ZXMgdGhlIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGNhbGxzIGFyb3VuZCBgbW11X25vdGlmaWVyYCBjYWxsYmFja3MuIFRoZXNlIGFyZSBwdXJlbHkgZGVidWcgYW5ub3RhdGlvbnMgbGlua2VkIHRvIGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYCBhbmQgZG8gbm90IGluZmx1ZW5jZSB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGNvbmNsdXNpb24gaXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKVGhlIHJlYXNvbmluZyBpczogVGhlIHBhdGNoIHJlbW92ZXMgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgYW5ub3RhdGlvbnMgZnJvbSB0aGUgY29kZSwgd2hpY2ggYXJlIHVzZWQgb25seSBmb3IgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgLiBSZW1vdmluZyB0aGVtIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9uLCBpdCBzaW1wbHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyB0b29sLiBUaHVzLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjExLjk3ODMwMzA2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzI4Nzg4MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTEuOTc4MzA4NzQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzMzAwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZGY3NmQ3ZGUxM2FkMDdlYTU2ZGViZWE5NDBhOGQ1Zjg5NWUzZGYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjQwOjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21tdV9ub3RpZmllci5jIGIvbW0vbW11X25vdGlmaWVyLmNcXG5pbmRleCAyNDViNzRmMzlmOTEyLi5jZDVkMTVjZDY0NmE1IDEwMDY0NFxcbi0tLSBhL21tL21tdV9ub3RpZmllci5jXFxuKysrIGIvbW0vbW11X25vdGlmaWVyLmNcXG5AQCAtNTIwLDExICs1MjAsNyBAQCBzdGF0aWMgaW50IG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFxuIFxcdFxcdGlmIChvcHMtXFx1MDAzZWludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpIHtcXG4gXFx0XFx0XFx0aW50IF9yZXQ7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxcbi1cXHRcXHRcXHRcXHRub25fYmxvY2tfc3RhcnQoKTtcXG4gXFx0XFx0XFx0X3JldCA9IG9wcy1cXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdWJzY3JpcHRpb24sIHJhbmdlKTtcXG4tXFx0XFx0XFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcXG4tXFx0XFx0XFx0XFx0bm9uX2Jsb2NrX2VuZCgpO1xcbiBcXHRcXHRcXHRpZiAoX3JldCkge1xcbiBcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCIlcFMgY2FsbGJhY2sgZmFpbGVkIHdpdGggJWQgaW4gJXNibG9ja2FibGUgY29udGV4dC5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdG9wcy1cXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCxcXG5AQCAtNTkxLDE0ICs1ODcsOSBAQCBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXFxuIFxcdGlkID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnNyY3UpO1xcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zcmN1KHN1YnNjcmlwdGlvbiwgXFx1MDAyNnN1YnNjcmlwdGlvbnMtXFx1MDAzZWxpc3QsIGhsaXN0LFxcbiBcXHRcXHRcXHRcXHQgc3JjdV9yZWFkX2xvY2tfaGVsZChcXHUwMDI2c3JjdSkpIHtcXG4tXFx0XFx0aWYgKHN1YnNjcmlwdGlvbi1cXHUwMDNlb3BzLVxcdTAwM2VpbnZhbGlkYXRlX3JhbmdlX2VuZCkge1xcbi1cXHRcXHRcXHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxcbi1cXHRcXHRcXHRcXHRub25fYmxvY2tfc3RhcnQoKTtcXG4rXFx0XFx0aWYgKHN1YnNjcmlwdGlvbi1cXHUwMDNlb3BzLVxcdTAwM2VpbnZhbGlkYXRlX3JhbmdlX2VuZClcXG4gXFx0XFx0XFx0c3Vic2NyaXB0aW9uLVxcdTAwM2VvcHMtXFx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kKHN1YnNjcmlwdGlvbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmFuZ2UpO1xcbi1cXHRcXHRcXHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxcbi1cXHRcXHRcXHRcXHRub25fYmxvY2tfZW5kKCk7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZzcmN1LCBpZCk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTIuNDQ4NTE2NjMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQ4NTg1NTY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgYW5ub3RhdGlvbnMgYXJvdW5kIG1tdV9ub3RpZmllciBjYWxsYmFja3MuIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBleGNsdXNpdmVseSBmb3IgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIHRvIHRyaWdnZXIgd2FybmluZ3MgaWYgdGhlIGNvZGUgc2xlZXBzIGluIGEgbm9uLWJsb2NraW5nIGNvbnRleHQuIFJlbW92aW5nIHRoZW0gZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvciBsb2dpYyBvZiB0aGUga2VybmVsLCBpdCBvbmx5IHJlbW92ZXMgYSBkZWJ1Z2dpbmcgYXNzZXJ0aW9uLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHJlcXVpcmUgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkZjc2ZDdkZTEzYWQwN2VhNTZkZWJlYTk0MGE4ZDVmODk1ZTNkZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo0MDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tdV9ub3RpZmllci5jIGIvbW0vbW11X25vdGlmaWVyLmNcbmluZGV4IDI0NWI3NGYzOWY5MTIuLmNkNWQxNWNkNjQ2YTUgMTAwNjQ0XG4tLS0gYS9tbS9tbXVfbm90aWZpZXIuY1xuKysrIGIvbW0vbW11X25vdGlmaWVyLmNcbkBAIC01MjAsMTEgKzUyMCw3IEBAIHN0YXRpYyBpbnQgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcbiBcdFx0aWYgKG9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KSB7XG4gXHRcdFx0aW50IF9yZXQ7XG4gXG4tXHRcdFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcbi1cdFx0XHRcdG5vbl9ibG9ja19zdGFydCgpO1xuIFx0XHRcdF9yZXQgPSBvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdWJzY3JpcHRpb24sIHJhbmdlKTtcbi1cdFx0XHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxuLVx0XHRcdFx0bm9uX2Jsb2NrX2VuZCgpO1xuIFx0XHRcdGlmIChfcmV0KSB7XG4gXHRcdFx0XHRwcl9pbmZvKFwiJXBTIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIGluICVzYmxvY2thYmxlIGNvbnRleHQuXFxuXCIsXG4gXHRcdFx0XHRcdG9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LCBfcmV0LFxuQEAgLTU5MSwxNCArNTg3LDkgQEAgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9zdWJzY3JpcHRpb25zICpzdWJzY3JpcHRpb25zLFxuIFx0aWQgPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZzcmN1KTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NyY3Uoc3Vic2NyaXB0aW9uLCBcdTAwMjZzdWJzY3JpcHRpb25zLVx1MDAzZWxpc3QsIGhsaXN0LFxuIFx0XHRcdFx0IHNyY3VfcmVhZF9sb2NrX2hlbGQoXHUwMDI2c3JjdSkpIHtcbi1cdFx0aWYgKHN1YnNjcmlwdGlvbi1cdTAwM2VvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9lbmQpIHtcbi1cdFx0XHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxuLVx0XHRcdFx0bm9uX2Jsb2NrX3N0YXJ0KCk7XG4rXHRcdGlmIChzdWJzY3JpcHRpb24tXHUwMDNlb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kKVxuIFx0XHRcdHN1YnNjcmlwdGlvbi1cdTAwM2VvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Vic2NyaXB0aW9uLFxuIFx0XHRcdFx0XHRcdFx0XHRyYW5nZSk7XG4tXHRcdFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcbi1cdFx0XHRcdG5vbl9ibG9ja19lbmQoKTtcbi1cdFx0fVxuIFx0fVxuIFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZzcmN1LCBpZCk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTIuNDQ4NTE4MzcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODQwMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1tdV9ub3RpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL21tdV9ub3RpZmllci5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBsaWVzIGluIHRoZSByZW1vdmFsIG9mIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGNhbGxzIHN1cnJvdW5kaW5nIHRoZSBgb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kYCBjYWxscyB3aXRoaW4gYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmRgLiBUaGVzZSBhcmUsIGFzIEkgcmVjYWxsLCBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgZGVlcGx5IGludGVydHdpbmVkIHdpdGggdGhlIG1tdSBub3RpZmllciBtZWNoYW5pc20uIEl04oCZcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgcmVtb3ZpbmcgdGhvc2UgY2FsbHMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmRgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UncyBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy5cblxuQWgsIHdhaXQgYSBtb21lbnQuIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgLi4uIHRob3NlIGFyZSBtYWNyb3Mgb3IsIHBvdGVudGlhbGx5LCBpbmxpbmUgZnVuY3Rpb25zLCBhcmVuJ3QgdGhleT8gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZy4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gb3BlcmF0ZSB3aXRoaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCB0byB1bmRlcnN0YW5kIGhvdyB0aGVpciByZW1vdmFsIGFmZmVjdHMgdGhlIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDoxNi44MTY5MjI0NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzAyODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vbl9ibG9ja19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbXVfbm90aWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTYuODY1MDYyNDYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNTM4MTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgTU1VIEludmFsaWRhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyBsZWFkaW5nIG1lIHRvd2FyZHMgc29tZSBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aGluIHRoZSBNTVUgbm90aWZpZXIgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgb3IgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBpbnZhbGlkYXRpbmcgYWRkcmVzcyByYW5nZXMuXG5cbkkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VhcmNoIGZvciB0aGF0IHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9tbXVfbm90aWZpZXIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgYWRkcmVzcyByYW5nZSBpbnZhbGlkYXRpb25zIGFyZSBpbml0aWF0ZWQgYW5kIGhhbmRsZWQuIEFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgaG9wZWZ1bGx5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cywgb3IgYXQgbGVhc3QgaGVscCBtZSBuYXZpZ2F0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBtb3JlIGVmZmVjdGl2ZWx5LiBJdCdzIGEga2V5IGVudHJ5IHBvaW50LCBJIHRoaW5rLCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGNvb3JkaW5hdGVzIE1NVSBpbnZhbGlkYXRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjE5Ljk5MDQ0NjcwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk0MTY2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbXVfbm90aWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbXVfbm90aWZpZXIuYz00NTY9c3RhdGljIGludCBtbl9pdHJlZV9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTUwNi1cXG5tbS9tbXVfbm90aWZpZXIuYzo1MDc6c3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcbm1tL21tdV9ub3RpZmllci5jLTUwOC1cXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYz01NjQ9aW50IF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYy01NzUtXFx0aWYgKCFobGlzdF9lbXB0eShcXHUwMDI2c3Vic2NyaXB0aW9ucy1cXHUwMDNlbGlzdCkpXFxubW0vbW11X25vdGlmaWVyLmM6NTc2OlxcdFxcdHJldHVybiBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN1YnNjcmlwdGlvbnMsIHJhbmdlKTtcXG5tbS9tbXVfbm90aWZpZXIuYy01NzctXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjIwLjI1OTg3NzY3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjU3MzA2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1NIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmRgLiAgVGhvc2UgZ2V0IGNhbGxlZCBmcm9tIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgd2hpY2ggYXJlIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgZnVuY3Rpb25zLiBIbW0sIHRoZXkncmUgcmVtb3ZpbmcgY2FsbHMgdG8gYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAuICBUaGF0J3MgaW50ZXJlc3RpbmcuIFdlcmUgdGhvc2UganVzdCBmb3IgZGVidWdnaW5nLCBtYXliZSBsb2NrZGVwIHJlbGF0ZWQsIG9yIGlzIHRoaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlPyBMZXQgbWUgc2VlIHdoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhY3R1YWxseSAqZGlkKi4gQWgsIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIGZpbGUgYW55bW9yZS5cblxuTGV0IG1lIGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNoYW5nZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgZnJvbSB0aG9zZSBmdW5jdGlvbnMgaXMgdGhlIG1haW4gdGhpbmcuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLiBJdCdzIHJlbW92aW5nIHNvbWUga2luZCBvZiBjb250ZXh0IHRyYWNraW5nIG9yIGxvY2tpbmcgYXNzZXJ0aW9ucywgY2xlYXJseS4gV2FpdCwgYG5vbl9ibG9ja19zdGFydCgpYCBpcyAqcHJvYmFibHkqIGEgbWFjcm8sIGRvaW5nIHNvbWV0aGluZyBsaWtlIGBwcmVlbXB0X2Rpc2FibGUoKWAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIERvZXNuJ3QgcmVhbGx5IG1hdHRlciwgaXQncyBiZWVuIHJlbW92ZWQhXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBoaXN0b3J5IG9mIGBpbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oYCBvciBgbW0vbW11X25vdGlmaWVyLmNgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gTmV2ZXJtaW5kLCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgaXQgd2FzIHJlbW92ZWQuXG5cbklzIHRoaXMgd29ydGggYSBmdXp6aW5nIGVmZm9ydD8gWWVhaCwgYWJzb2x1dGVseS4gSXQncyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLiBXZSBuZWVkIHRvIGZvY3VzIG9uIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIHRob3NlIGBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlXypgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGUgb25lcyB3ZSB3YW50IGFyZSBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV8qYC4gTGV0J3MgZGlnIGludG8gYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjI2LjYyNTYxMDg3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDIzMDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21tdV9ub3RpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tdV9ub3RpZmllci5jPTI1PURFRklORV9TVEFUSUNfU1JDVShzcmN1KTtcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTI3LSNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbm1tL21tdV9ub3RpZmllci5jOjI4OnN0cnVjdCBsb2NrZGVwX21hcCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCA9IHtcXG5tbS9tbXVfbm90aWZpZXIuYy0yOS1cXHQubmFtZSA9IFxcXCJtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydFxcXCJcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTE4OD1tbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICppbnRlcnZhbF9zdWIpXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYy0yNDYtXFx0ICovXFxubW0vbW11X25vdGlmaWVyLmM6MjQ3OlxcdGxvY2tfbWFwX2FjcXVpcmUoXFx1MDAyNl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTtcXG5tbS9tbXVfbm90aWZpZXIuYzoyNDg6XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xcbm1tL21tdV9ub3RpZmllci5jLTI0OS1cXHRpZiAoaXNfaW52YWxpZGF0aW5nKVxcbi0tXFxubW0vbW11X25vdGlmaWVyLmM9NTA3PXN0YXRpYyBpbnQgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTU2My1cXG5tbS9tbXVfbm90aWZpZXIuYzo1NjQ6aW50IF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXFxubW0vbW11X25vdGlmaWVyLmMtNTY1LXtcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTU5Nz12b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxcbi0tXFxubW0vbW11X25vdGlmaWVyLmMtNjAxLVxcbm1tL21tdV9ub3RpZmllci5jOjYwMjpcXHRsb2NrX21hcF9hY3F1aXJlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmMtNjAzLVxcdGlmIChzdWJzY3JpcHRpb25zLVxcdTAwM2VoYXNfaXRyZWUpXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYy02MDctXFx0XFx0bW5faGxpc3RfaW52YWxpZGF0ZV9lbmQoc3Vic2NyaXB0aW9ucywgcmFuZ2UpO1xcbm1tL21tdV9ub3RpZmllci5jOjYwODpcXHRsb2NrX21hcF9yZWxlYXNlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmMtNjA5LX1cXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTEwNzY9dm9pZCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKmludGVydmFsX3N1YilcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTExMDgtXFx0ICovXFxubW0vbW11X25vdGlmaWVyLmM6MTEwOTpcXHRsb2NrX21hcF9hY3F1aXJlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmM6MTExMDpcXHRsb2NrX21hcF9yZWxlYXNlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmMtMTExMS1cXHRpZiAoc2VxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDoyNi42Nzk4NDcwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM2MzQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UncmUgbG9va2luZyBhdCwgc3VtbWFyaXplZCBmcm9tIHRoYXQgcHJvbXB0OlxuXG4qKkFuYWx5emluZyBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgKipcblxuQWxyaWdodCwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gdGhpbmsgdGhyb3VnaCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgTU1VIG5vdGlmaWVyIGZyYW1ld29yaywgd2hpY2gsIGFzIHdlIGtub3csIGlzICpjcnVjaWFsKiBpbiBMaW51eCBmb3IgdHJhY2tpbmcgYWRkcmVzcyBzcGFjZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIG1lbW9yeSwgZGV2aWNlIG1lbW9yeSwgb3IgYW55dGhpbmcgaW52b2x2aW5nIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgY29udGV4dC4gSSdtIGd1ZXNzaW5nIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlICplbmQqIG9mIGFuIGludmFsaWRhdGlvbiByYW5nZSwgd2hpY2ggc3VnZ2VzdHMgdGhhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBkZWFsbG9jYXRpb24gb3IgcmVnaW9uIHNocmlua2luZy5cblxuTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBhIHZpdGFsIHJvbGUuIE15IGluaXRpYWwgdGhvdWdodCBnb2VzIHRvIHRoZSBzcGVjaWZpY3MuIEkgYW0gcHJvYmFibHkgZXhhbWluaW5nIHRoZSBmdW5jdGlvbiB3aXRoIHNldmVyYWwgY29uY2VybnMuIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBpcyB0aGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplZCB3aXRoIG90aGVyIG9wZXJhdGlvbnMgb24gdGhlIE1NVT8gV2UgbmVlZCB0byBlbnN1cmUgYXRvbWljaXR5LlxuKiAgICoqQ29udGV4dDoqKiBXaGF0IGNvbnRleHRzIGNhbiB0aGlzIGZ1bmN0aW9uIGJlIGNhbGxlZCBmcm9tPyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQ/IFRhc2sgY29udGV4dD8gS25vd2luZyB0aGlzIGhlbHBzIGZpZ3VyZSBvdXQgbG9ja2luZyBuZWVkcy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgY2hlY2tzIGZvciBlcnJvcnM/IElmIHNvLCB3aGF0IGRvIHRoZXkgbG9vayBmb3I/IFdoYXQgZXJyb3JzIGFyZSByZXR1cm5lZCwgYW5kIHdoYXQncyB0aGUgdHlwaWNhbCBoYW5kbGluZz9cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IFRoZSBNTVUgbm90aWZpZXIgbGlzdCBpdHNlbGYsIG9mIGNvdXJzZSwgYnV0IHdoYXQgYWJvdXQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBpbnZhbGlkYXRlZCByYW5nZT8gQW55IHNoYXJlZCBzdHJ1Y3R1cmVzIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGg/XG4qICAgKipQZXJmb3JtYW5jZToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHNjYWxlPyBXaGF0J3MgdGhlIHRpbWUgY29tcGxleGl0eT8gSWYgd2UncmUgdGFsa2luZyBhYm91dCBhIGhpZ2hseSBjb250ZW5kZWQgc2VjdGlvbiBvZiBtZW1vcnksIGlzIHRoaXMgYSBwb3RlbnRpYWwgYm90dGxlbmVjaz9cblxuSSdtIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlc2UgY29uY2VybnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIGxlYWRpbmcgdG8gYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbihzKSBnaXZlcyBhIGxvdCBvZiBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzkwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MzAuOTIzNDg1Nzc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk1Mjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbXVfbm90aWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbXVfbm90aWZpZXIuYz01ODE9bW5faGxpc3RfaW52YWxpZGF0ZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9zdWJzY3JpcHRpb25zICpzdWJzY3JpcHRpb25zLFxcbi0tXFxubW0vbW11X25vdGlmaWVyLmMtNTk2LVxcbm1tL21tdV9ub3RpZmllci5jOjU5Nzp2b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxcbm1tL21tdV9ub3RpZmllci5jLTU5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjMwLjk2OTQ0MzY4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE0NzQ1MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqRmluZGluZyB0aGUgUmlnaHQgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEJhc2VkIG9uIHRoZSBtZW50aW9uLCBpdCBzb3VuZHMgbGlrZSBgQ09ORklHX01NVV9OT1RJRklFUmAgaXMgdGhlIGtleS4gTm93LCB3aGVyZSBkbyBJIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGZvciB0aGlzPyBOYXR1cmFsbHksIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcycgY29uZmlndXJhdGlvbiBmaWxlcy4gYG1tL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYXJlIG1hbmFnZWQgd2l0aGluIGBtbS9NYWtlZmlsZWAuIEVpdGhlciB3YXksIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDozMy45ODQxOTM5MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjE5ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1NVV9OT1RJRklFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODA9Y29uZmlnIFBIWVNfQUREUl9UXzY0QklUXFxuLS1cXG5tbS9LY29uZmlnLTY4Mi1cXG5tbS9LY29uZmlnOjY4Mzpjb25maWcgTU1VX05PVElGSUVSXFxubW0vS2NvbmZpZy02ODQtXFx0Ym9vbFxcbi0tXFxubW0vTWFrZWZpbGU9ODg9b2JqLSQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKSArPSBzcGFyc2Utdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODk6b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm9cXG5tbS9NYWtlZmlsZS05MC1vYmotJChDT05GSUdfS1NNKSArPSBrc20ub1xcbi0tXFxubW0vZGVidWcuYz0xNzU9dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vZGVidWcuYy0xOTItXFx0XFx0XFxcImV4ZV9maWxlICVweFxcXFxuXFxcIlxcbm1tL2RlYnVnLmM6MTkzOiNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSXFxubW0vZGVidWcuYy0xOTQtXFx0XFx0XFxcIm5vdGlmaWVyX3N1YnNjcmlwdGlvbnMgJXB4XFxcXG5cXFwiXFxuLS1cXG5tbS9kZWJ1Zy5jLTIyMS1cXHRcXHRtbS1cXHUwMDNlZXhlX2ZpbGUsXFxubW0vZGVidWcuYzoyMjI6I2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVJcXG5tbS9kZWJ1Zy5jLTIyMy1cXHRcXHRtbS1cXHUwMDNlbm90aWZpZXJfc3Vic2NyaXB0aW9ucyxcXG4tLVxcbm1tL2ludGVybmFsLmg9MTg4MT1zdGF0aWMgaW5saW5lIHZvaWQgbWF5YmVfcm1hcF91bmxvY2tfYWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xODk0LVxcbm1tL2ludGVybmFsLmg6MTg5NTojaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUlxcbm1tL2ludGVybmFsLmgtMTg5Ni1zdGF0aWMgaW5saW5lIGJvb2wgY2xlYXJfZmx1c2hfeW91bmdfcHRlc19ub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTE5Mjc9c3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmdfbm90aWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTM2LVxcbm1tL2ludGVybmFsLmg6MTkzNzojZWxzZSAvKiBDT05GSUdfTU1VX05PVElGSUVSICovXFxubW0vaW50ZXJuYWwuaC0xOTM4LVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTQzLVxcbm1tL2ludGVybmFsLmg6MTk0NDojZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAqL1xcbm1tL2ludGVybmFsLmgtMTk0NS1cXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTI3Mj1zdGF0aWMgdm9pZCBtbl9pdHJlZV9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTI3NS1cXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlID0ge1xcbm1tL21tdV9ub3RpZmllci5jOjI3NjpcXHRcXHQuZmxhZ3MgPSBNTVVfTk9USUZJRVJfUkFOR0VfQkxPQ0tBQkxFLFxcbm1tL21tdV9ub3RpZmllci5jLTI3Ny1cXHRcXHQuZXZlbnQgPSBNTVVfTk9USUZZX1JFTEVBU0UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDMyOD12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MzM1LVxcbm1tL3BhZ2VfYWxsb2MuYzo0MzM2OiNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSXFxubW0vcGFnZV9hbGxvYy5jLTQzMzctXFx0XFx0bG9ja19tYXBfYWNxdWlyZShcXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDozNC4wMzU0MTkxNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2OTk4OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1NVSBOb3RpZmllciBDb250ZXh0IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlnLCBgTU1VX05PVElGSUVSYCwgYW5kIHRoZSBjb2RlIHNwZWNpZmljYWxseSBhcm91bmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBUaGUgcGF0Y2ggbm90ZXMgdGhhdCBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhcmUgZ29uZS4gSG1tLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBwb3RlbnRpYWwgc2hpZnQgaW4gaG93IGJsb2NraW5nIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBNTVUgbm90aWZpZXIgY29udGV4dC5cblxuSXMgdGhpcyBzb21ldGhpbmcgd29ydGggc3BlbmRpbmcgdGltZSBvbiBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgZmFjdCB0aGF0IHRoZSBjb250ZXh0IG9mIE1NVSBub3RpZmllciBjYWxscyBpcyBzaGlmdGluZyBpcyBhIHJlZCBmbGFnLiBJdCBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgYnVncy4gTWF5YmUgbm90IGJsb2NraW5nIHdoZW4gd2Ugc2hvdWxkLCBvciB0aGUgb3Bwb3NpdGUuIFRoZSByZW1vdmFsIG9mIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGlzIHRoZSBrZXkuIFRob3NlIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGJlZW4gZW5mb3JjaW5nIGEgbm9uLWJsb2NraW5nIGNvbnRleHQsIG9yIHBlcmhhcHMgdGhleSB3ZXJlIGp1c3QgbG9ja2RlcCBhbm5vdGF0aW9ucy4gSWYgdGhleSAqd2VyZSogZW5mb3JjaW5nIG5vbi1ibG9ja2luZywgdGhlbiB0aGVpciByZW1vdmFsICpkaXJlY3RseSogaW5mbHVlbmNlcyB3aGV0aGVyIGJsb2NraW5nIGlzIHBlcm1pdHRlZCwgYW5kIGJ5IHdob20uIFRoZSBwb3NzaWJpbGl0eSBvZiBibG9ja2VkIGNvbnRleHRzIGhlcmUgaXMgc2VyaW91cy5cblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhY3R1YWxseSAqZGlkKi4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjM5LjEwNTQxMjQzMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MDg4NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vbl9ibG9ja19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTc2PWV4dGVybiB2b2lkIF9fY2FudF9taWdyYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtODItICogY29udGV4dCAoc3BpbmxvY2ssIGlycS1oYW5kbGVyLCAuLi4pLiBBZGRpdGlvbmFsIHNlY3Rpb25zIHdoZXJlIGJsb2NraW5nIGlzXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaDo4MzogKiBub3QgYWxsb3dlZCBjYW4gYmUgYW5ub3RhdGVkIHdpdGggbm9uX2Jsb2NrX3N0YXJ0KCkgYW5kIG5vbl9ibG9ja19lbmQoKVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtODQtICogcGFpcnMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTExMi0vKipcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjExMzogKiBub25fYmxvY2tfc3RhcnQgLSBhbm5vdGF0ZSB0aGUgc3RhcnQgb2Ygc2VjdGlvbiB3aGVyZSBzbGVlcGluZyBpcyBwcm9oaWJpdGVkXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMTQtICpcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTIyOiMgZGVmaW5lIG5vbl9ibG9ja19zdGFydCgpIChjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQrKylcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEyMy0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI1LSAqXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjY6ICogQ2xvc2VzIGEgc2VjdGlvbiBvcGVuZWQgYnkgbm9uX2Jsb2NrX3N0YXJ0KCkuXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMjctICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTEzMj1zdGF0aWMgaW5saW5lIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEzNi0jIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpIGRvIHsgfSB3aGlsZSAoMClcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjEzNzojIGRlZmluZSBub25fYmxvY2tfc3RhcnQoKSBkbyB7IH0gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMzgtIyBkZWZpbmUgbm9uX2Jsb2NrX2VuZCgpIGRvIHsgfSB3aGlsZSAoMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MzkuMzgzNTA4NTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDYwMTUwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIE5vbi1CbG9ja2luZyBDb250ZXh0IFRyYWNraW5nKipcblxuT2theSwgc28gYG5vbl9ibG9ja19zdGFydCgpYC4uLiB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgYnVtcHMgdXAgYGN1cnJlbnQtXHUwMDNlbm9uX2Jsb2NrX2NvdW50YC4gUmlnaHQsIGFuZCB0aGF0IGNvdW50ZXIgaXMgdGhlIGtleSB0byBgbWlnaHRfc2xlZXAoKWAncyBmdW5jdGlvbmFsaXR5IOKAkyBwcmV2ZW50aW5nIHNsZWVwIGNhbGxzIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhleSdyZSBub3QgYWxsb3dlZC4gSXQncyBhIGtpbmQgb2YgZ3VhcmRyYWlsLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi1ibG9ja2luZyBjb250ZXh0cy5cblxuU28sIGlmIHdlIHRha2Ugb3V0IGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgLCBzdWRkZW5seSBgbWlnaHRfc2xlZXAoKWAgd29uJ3Qgd2FybiB1cyBhbnltb3JlIGlmLCBzYXksIG5vdGlmaWVyIGNhbGxiYWNrcyBkZWNpZGUgdG8gbmFwIHdoZW4gYCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKWAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLlxuXG5CdXQgaXMgdGhpcyBqdXN0IGEgY29zbWV0aWMgdGhpbmc/IElzIGl0ICpmdW5jdGlvbmFsbHkqIGNoYW5naW5nIGFueXRoaW5nLCBiZXlvbmQganVzdCByZW1vdmluZyBhIGRlYnVnZ2luZyBhaWQgb3IgYSBsb2NrZGVwLWxpa2UgYW5ub3RhdGlvbj8gYG1pZ2h0X3NsZWVwKClgIGlzIHJlYWxseSBqdXN0IGEgZGVidWcgZmVhdHVyZSwgaXNuJ3QgaXQ/IFRpZWQgdG8gYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgLCBhcyBJIHJlY2FsbC5cblxuSGFuZyBvbuKApiBpcyBgY3VycmVudC1cdTAwM2Vub25fYmxvY2tfY291bnRgICpvbmx5KiBldmVyIHVzZWQgYnkgYG1pZ2h0X3NsZWVwKClgPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCdzIHRoZSBjYXNlLiBJdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IHdlIGhhdmVuJ3QgbG9zdCBzb21lIHN1YnRsZSBzaWRlIGVmZmVjdCBvciBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmVtb3ZhbCBpcyBjbGVhbiBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIGluIG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6NDMuOTI5NTI2NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzUwMDg0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9uX2Jsb2NrX2NvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTc2PWV4dGVybiB2b2lkIF9fY2FudF9taWdyYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTIyOiMgZGVmaW5lIG5vbl9ibG9ja19zdGFydCgpIChjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQrKylcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEyMy0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI3LSAqL1xcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTI4OiMgZGVmaW5lIG5vbl9ibG9ja19lbmQoKSBXQVJOX09OKGN1cnJlbnQtXFx1MDAzZW5vbl9ibG9ja19jb3VudC0tID09IDApXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMjktI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjA9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMjU1LSNpZmRlZiBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEyNTY6XFx0aW50XFx0XFx0XFx0XFx0bm9uX2Jsb2NrX2NvdW50O1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMjU3LSNlbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz01OTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZHVsZV9kZWJ1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIGJvb2wgcHJlZW1wdClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1NC0jaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUFxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTk1NTpcXHRpZiAoIXByZWVtcHQgXFx1MDAyNlxcdTAwMjYgUkVBRF9PTkNFKHByZXYtXFx1MDAzZV9fc3RhdGUpIFxcdTAwMjZcXHUwMDI2IHByZXYtXFx1MDAzZW5vbl9ibG9ja19jb3VudCkge1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1Ni1cXHRcXHRwcmludGsoS0VSTl9FUlIgXFxcIkJVRzogc2NoZWR1bGluZyBpbiBhIG5vbi1ibG9ja2luZyBzZWN0aW9uOiAlcy8lZC8laVxcXFxuXFxcIixcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjU5NTc6XFx0XFx0XFx0cHJldi1cXHUwMDNlY29tbSwgcHJldi1cXHUwMDNlcGlkLCBwcmV2LVxcdTAwM2Vub25fYmxvY2tfY291bnQpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1OC1cXHRcXHRkdW1wX3N0YWNrKCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTkxMTc9dm9pZCBfX21pZ2h0X3Jlc2NoZWQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGludCBvZmZzZXRzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTI3LVxcdGlmICgocmVzY2hlZF9vZmZzZXRzX29rKG9mZnNldHMpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkxMjg6XFx0ICAgICAhaXNfaWRsZV90YXNrKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQpIHx8XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTI5LVxcdCAgICBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcgfHwgc3lzdGVtX3N0YXRlIFxcdTAwM2UgU1lTVEVNX1JVTk5JTkcgfHxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE0Mi1cXHRwcl9lcnIoXFxcImluX2F0b21pYygpOiAlZCwgaXJxc19kaXNhYmxlZCgpOiAlZCwgbm9uX2Jsb2NrOiAlZCwgcGlkOiAlZCwgbmFtZTogJXNcXFxcblxcXCIsXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MTQzOlxcdCAgICAgICBpbl9hdG9taWMoKSwgaXJxc19kaXNhYmxlZCgpLCBjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQsXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTQ0LVxcdCAgICAgICBjdXJyZW50LVxcdTAwM2VwaWQsIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDo0NS44MDQ1NDg0MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1MDI0ODYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBub25fYmxvY2tfY291bnRgIGlzIG9ubHkgcmVsZXZhbnQgaWYgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIGlzIGVuYWJsZWQsIGFuZCBpdCdzIHVzZWQgcHVyZWx5IGZvciBkZWJ1Z2dpbmcg4oCTIHNwZWNpZmljYWxseSwgdG8gZmxhZyBwb3RlbnRpYWwgaXNzdWVzIGluIGBfX21pZ2h0X3Jlc2NoZWRgIGFuZCBgc2NoZWR1bGVfZGVidWdgLiBJdCBkb2Vzbid0IGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGUga2VybmVsIG9wZXJhdGVzIG9yIGl0cyBjb250cm9sIGZsb3cuIEl0J3MgZXNzZW50aWFsbHkgYSBkZWJ1Z2dpbmcgYW5ub3RhdGlvbiwgYSB3YXJuaW5nIG1lY2hhbmlzbS5cblxuTm93LCBhY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgY2hhbmdlcyByZWxhdGVkIHRvIFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHNcIiBkb24ndCB3YXJyYW50IGZ1enppbmcuIElzIHJlbW92aW5nIGEgZGVidWdnaW5nIGFubm90YXRpb24gY29uc2lkZXJlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBObywgaXQncyBub3QuIEl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBleGVjdXRpb24gcGF0aDsgaXQgb25seSBhZmZlY3RzIHdoZXRoZXIgYSB3YXJuaW5nIGdldHMgcHJpbnRlZCBpZiBhIGZ1bmN0aW9uIHNsZWVwcy5cblxuVGhlIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIG1hY3JvcyBhcmUgZXNzZW50aWFsbHkgbm8tb3BzIHVubGVzcyBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgaXMgYWN0aXZlLiBFdmVuIHRoZW4sIHRoZXkganVzdCBtYW5hZ2UgYSBjb3VudGVyIHVzZWQgZm9yIHRoZXNlIHdhcm5pbmdzLiAgYHNjaGVkdWxlX2RlYnVnYCBjYWxscyBgZHVtcF9zdGFjaygpYCBhbmQgcHJpbnRzIGEgd2FybmluZywgYnV0IGl0IGRvZXNuJ3QgdHJpZ2dlciBhIHBhbmljIHVubGVzcyBgcGFuaWNfb25fd2FybmAgaXMgc2V0LiAgRXZlbiBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHRoZSBjaGVjayB3aXRoIGBub25fYmxvY2tfY291bnRgIHJlc3VsdHMgaW4gYSB3YXJuaW5nLCBgZHVtcF9zdGFjaygpYCBhbmQga2VybmVsIHRhaW50LCBidXQgZG9lc24ndCBjaGFuZ2UgZXhlY3V0aW9uIGZsb3cuXG5cblNvLCB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgKm9ubHkqIHJlbW92ZXMgdGhlc2UgZGVidWcgYXNzZXJ0aW9ucy4gSXTigJlzIGEgY2xlYW4tdXAsIHJlbW92aW5nIHdhcm5pbmdzLiBJdCBkb2Vzbid0IHRvdWNoIHRoZSBhY3R1YWwgbG9ja2luZyBvciBzY2hlZHVsaW5nIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIG5vLW9wIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlOyBpdCdzIGEgZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcgY2hhbmdlIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGZ1enplZC5cblxuTGV0IG1lIGNvbmZpcm0gdGhlIGFjdHVhbCBjaGFuZ2U6IFllcywgaXQganVzdCByZW1vdmVzIHRoZSBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBjYWxscyBhcm91bmQgYG1tdV9ub3RpZmllcmAgY2FsbGJhY2tzLiBUaGVzZSBhcmUgcHVyZWx5IGRlYnVnIGFubm90YXRpb25zIGxpbmtlZCB0byBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgYW5kIGRvIG5vdCBpbmZsdWVuY2UgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgY29uY2x1c2lvbiBpcyBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblRoZSByZWFzb25pbmcgaXM6IFRoZSBwYXRjaCByZW1vdmVzIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGFubm90YXRpb25zIGZyb20gdGhlIGNvZGUsIHdoaWNoIGFyZSB1c2VkIG9ubHkgZm9yIGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYC4gUmVtb3ZpbmcgdGhlbSBkb2Vzbid0IGNoYW5nZSB0aGUga2VybmVsJ3MgZnVuY3Rpb24sIGl0IHNpbXBseSByZW1vdmVzIGEgZGVidWdnaW5nIHRvb2wuIFRodXMsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MiwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6NTcuMzA3MDM4OTkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6NTcuMzA3MDc2NzIxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlqfwv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 09:20:55 +0000 UTC FinishedAt: 2026-08-11 09:40:58 +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+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNkZjc2ZDdkZTEzYWQwN2VhNTZkZWJlYTk0MGE4ZDVmODk1ZTNkZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo0MDoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tbXVfbm90aWZpZXIuYyBiL21tL21tdV9ub3RpZmllci5jXG5pbmRleCAyNDViNzRmMzlmOTEyLi5jZDVkMTVjZDY0NmE1IDEwMDY0NFxuLS0tIGEvbW0vbW11X25vdGlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tdV9ub3RpZmllci5jXG5AQCAtNTIwLDExICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxuIFx0XHRpZiAob3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpIHtcbiBcdFx0XHRpbnQgX3JldDtcbiBcbi1cdFx0XHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxuLVx0XHRcdFx0bm9uX2Jsb2NrX3N0YXJ0KCk7XG4gXHRcdFx0X3JldCA9IG9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN1YnNjcmlwdGlvbiwgcmFuZ2UpO1xuLVx0XHRcdGlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpXG4tXHRcdFx0XHRub25fYmxvY2tfZW5kKCk7XG4gXHRcdFx0aWYgKF9yZXQpIHtcbiBcdFx0XHRcdHByX2luZm8oXCYjMzQ7JXBTIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIGluICVzYmxvY2thYmxlIGNvbnRleHQuXFxuXCYjMzQ7LFxuIFx0XHRcdFx0XHRvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCxcbkBAIC01OTEsMTQgJiM0Mzs1ODcsOSBAQCBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXG4gXHRpZCA9IHNyY3VfcmVhZF9sb2NrKFx1MDAyNnNyY3UpO1xuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc3JjdShzdWJzY3JpcHRpb24sIFx1MDAyNnN1YnNjcmlwdGlvbnMtXHUwMDNlbGlzdCwgaGxpc3QsXG4gXHRcdFx0XHQgc3JjdV9yZWFkX2xvY2tfaGVsZChcdTAwMjZzcmN1KSkge1xuLVx0XHRpZiAoc3Vic2NyaXB0aW9uLVx1MDAzZW9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX2VuZCkge1xuLVx0XHRcdGlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpXG4tXHRcdFx0XHRub25fYmxvY2tfc3RhcnQoKTtcbiYjNDM7XHRcdGlmIChzdWJzY3JpcHRpb24tXHUwMDNlb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kKVxuIFx0XHRcdHN1YnNjcmlwdGlvbi1cdTAwM2VvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Vic2NyaXB0aW9uLFxuIFx0XHRcdFx0XHRcdFx0XHRyYW5nZSk7XG4tXHRcdFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcbi1cdFx0XHRcdG5vbl9ibG9ja19lbmQoKTtcbi1cdFx0fVxuIFx0fVxuIFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZzcmN1LCBpZCk7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGFubm90YXRpb25zIGFyb3VuZCBtbXVfbm90aWZpZXIgY2FsbGJhY2tzLiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgZXhjbHVzaXZlbHkgZm9yIGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYCB0byB0cmlnZ2VyIHdhcm5pbmdzIGlmIHRoZSBjb2RlIHNsZWVwcyBpbiBhIG5vbi1ibG9ja2luZyBjb250ZXh0LiBSZW1vdmluZyB0aGVtIGRvZXMgbm90IGZ1bmN0aW9uYWxseSBhbHRlciB0aGUgZXhlY3V0aW9uIGZsb3cgb3IgbG9naWMgb2YgdGhlIGtlcm5lbCwgaXQgb25seSByZW1vdmVzIGEgZGVidWdnaW5nIGFzc2VydGlvbi4gVGhlcmVmb3JlLCBpdCBkb2VzIG5vdCByZXF1aXJlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2RmNzZkN2RlMTNhZDA3ZWE1NmRlYmVhOTQwYThkNWY4OTVlM2RmMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDA5OjQwOjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbW11X25vdGlmaWVyLmMgYi9tbS9tbXVfbm90aWZpZXIuYwppbmRleCAyNDViNzRmMzlmOTEyLi5jZDVkMTVjZDY0NmE1IDEwMDY0NAotLS0gYS9tbS9tbXVfbm90aWZpZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tbXVfbm90aWZpZXIuYwpAQCAtNTIwLDExICYjNDM7NTIwLDcgQEAgc3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KAogCQlpZiAob3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KSB7CiAJCQlpbnQgX3JldDsKIAotCQkJaWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSkKLQkJCQlub25fYmxvY2tfc3RhcnQoKTsKIAkJCV9yZXQgPSBvcHMtJmd0O2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3Vic2NyaXB0aW9uLCByYW5nZSk7Ci0JCQlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKQotCQkJCW5vbl9ibG9ja19lbmQoKTsKIAkJCWlmIChfcmV0KSB7CiAJCQkJcHJfaW5mbygmIzM0OyVwUyBjYWxsYmFjayBmYWlsZWQgd2l0aCAlZCBpbiAlc2Jsb2NrYWJsZSBjb250ZXh0LlxuJiMzNDssCiAJCQkJCW9wcy0mZ3Q7aW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCwKQEAgLTU5MSwxNCAmIzQzOzU4Nyw5IEBAIG1uX2hsaXN0X2ludmFsaWRhdGVfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucywKIAlpZCA9IHNyY3VfcmVhZF9sb2NrKCZhbXA7c3JjdSk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc3JjdShzdWJzY3JpcHRpb24sICZhbXA7c3Vic2NyaXB0aW9ucy0mZ3Q7bGlzdCwgaGxpc3QsCiAJCQkJIHNyY3VfcmVhZF9sb2NrX2hlbGQoJmFtcDtzcmN1KSkgewotCQlpZiAoc3Vic2NyaXB0aW9uLSZndDtvcHMtJmd0O2ludmFsaWRhdGVfcmFuZ2VfZW5kKSB7Ci0JCQlpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKQotCQkJCW5vbl9ibG9ja19zdGFydCgpOwomIzQzOwkJaWYgKHN1YnNjcmlwdGlvbi0mZ3Q7b3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX2VuZCkKIAkJCXN1YnNjcmlwdGlvbi0mZ3Q7b3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX2VuZChzdWJzY3JpcHRpb24sCiAJCQkJCQkJCXJhbmdlKTsKLQkJCWlmICghbW11X25vdGlmaWVyX3JhbmdlX2Jsb2NrYWJsZShyYW5nZSkpCi0JCQkJbm9uX2Jsb2NrX2VuZCgpOwotCQl9CiAJfQogCXNyY3VfcmVhZF91bmxvY2soJmFtcDtzcmN1LCBpZCk7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBtbXVfbm90aWZpZXIgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vbW11X25vdGlmaWVyLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gdGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgY2FsbHMgc3Vycm91bmRpbmcgdGhlIGBvcHMtJmd0O2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgb3BzLSZndDtpbnZhbGlkYXRlX3JhbmdlX2VuZGAgY2FsbHMgd2l0aGluIGBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYG1uX2hsaXN0X2ludmFsaWRhdGVfZW5kYC4gVGhlc2UgYXJlLCBhcyBJIHJlY2FsbCwgZnVuZGFtZW50YWwgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGRlZXBseSBpbnRlcnR3aW5lZCB3aXRoIHRoZSBtbXUgbm90aWZpZXIgbWVjaGFuaXNtLiBJdOKAmXMgY3JpdGljYWwgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHJlbW92aW5nIHRob3NlIGNhbGxzLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byBgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgYW5kIGBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZGAgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoYW5nZSYjMzk7cyBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMuCgpBaCwgd2FpdCBhIG1vbWVudC4gYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAuLi4gdGhvc2UgYXJlIG1hY3JvcyBvciwgcG90ZW50aWFsbHksIGlubGluZSBmdW5jdGlvbnMsIGFyZW4mIzM5O3QgdGhleT8gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdC4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoIGZvciB0aG9zZSBmdW5jdGlvbnMgYW5kIHNlZSB3aGF0IHRoZXkgYXJlIGFjdHVhbGx5IGRvaW5nLiBJdCB3aWxsIGJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGFyZSBpbnRlbmRlZCB0byBvcGVyYXRlIHdpdGhpbiB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUsIHRvIHVuZGVyc3RhbmQgaG93IHRoZWlyIHJlbW92YWwgYWZmZWN0cyB0aGUgb3ZlcmFsbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vbl9ibG9ja19zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21tdV9ub3RpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzIzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgTU1VIEludmFsaWRhdGlvbiBJc3N1ZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHRoZSByb290IGNhdXNlIG9mIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIE15IGd1dCBmZWVsaW5nIGlzIGxlYWRpbmcgbWUgdG93YXJkcyBzb21lIHBvdGVudGlhbCBwcm9ibGVtcyB3aXRoaW4gdGhlIE1NVSBub3RpZmllciBzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSBzdXNwZWN0IHRoZXJlIG1pZ2h0IGJlIGEgc3VidGxlIGJ1ZyBvciByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGludmFsaWRhdGluZyBhZGRyZXNzIHJhbmdlcy4KCkkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VhcmNoIGZvciB0aGF0IHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9tbXVfbm90aWZpZXIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgYWRkcmVzcyByYW5nZSBpbnZhbGlkYXRpb25zIGFyZSBpbml0aWF0ZWQgYW5kIGhhbmRsZWQuIEFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgaG9wZWZ1bGx5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cywgb3IgYXQgbGVhc3QgaGVscCBtZSBuYXZpZ2F0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBtb3JlIGVmZmVjdGl2ZWx5LiBJdCYjMzk7cyBhIGtleSBlbnRyeSBwb2ludCwgSSB0aGluaywgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBjb29yZGluYXRlcyBNTVUgaW52YWxpZGF0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tbXVfbm90aWZpZXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbXVfbm90aWZpZXIuYz00NTY9c3RhdGljIGludCBtbl9pdHJlZV9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy01MDYtXG5tbS9tbXVfbm90aWZpZXIuYzo1MDc6c3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxubW0vbW11X25vdGlmaWVyLmMtNTA4LVx0c3RydWN0IG1tdV9ub3RpZmllcl9zdWJzY3JpcHRpb25zICpzdWJzY3JpcHRpb25zLFxuLS1cbm1tL21tdV9ub3RpZmllci5jPTU2ND1pbnQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy01NzUtXHRpZiAoIWhsaXN0X2VtcHR5KFx1MDAyNnN1YnNjcmlwdGlvbnMtXHUwMDNlbGlzdCkpXG5tbS9tbXVfbm90aWZpZXIuYzo1NzY6XHRcdHJldHVybiBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN1YnNjcmlwdGlvbnMsIHJhbmdlKTtcbm1tL21tdV9ub3RpZmllci5jLTU3Ny1cdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMTYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIE1NIENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydGAgYW5kIGBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZGAuICBUaG9zZSBnZXQgY2FsbGVkIGZyb20gYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLCB3aGljaCBhcmUgZGVmaW5pdGVseSBjb3JlIGtlcm5lbCBmdW5jdGlvbnMuIEhtbSwgdGhleSYjMzk7cmUgcmVtb3ZpbmcgY2FsbHMgdG8gYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAuICBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBXZXJlIHRob3NlIGp1c3QgZm9yIGRlYnVnZ2luZywgbWF5YmUgbG9ja2RlcCByZWxhdGVkLCBvciBpcyB0aGlzIGEgcmVhbCBmdW5jdGlvbmFsIGNoYW5nZT8gTGV0IG1lIHNlZSB3aGF0IGBub25fYmxvY2tfc3RhcnQoKWAgYWN0dWFsbHkgKmRpZCouIEFoLCBpdCYjMzk7cyBub3QgZXZlbiBpbiB0aGUgZmlsZSBhbnltb3JlLgoKTGV0IG1lIGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNoYW5nZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgZnJvbSB0aG9zZSBmdW5jdGlvbnMgaXMgdGhlIG1haW4gdGhpbmcuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLiBJdCYjMzk7cyByZW1vdmluZyBzb21lIGtpbmQgb2YgY29udGV4dCB0cmFja2luZyBvciBsb2NraW5nIGFzc2VydGlvbnMsIGNsZWFybHkuIFdhaXQsIGBub25fYmxvY2tfc3RhcnQoKWAgaXMgKnByb2JhYmx5KiBhIG1hY3JvLCBkb2luZyBzb21ldGhpbmcgbGlrZSBgcHJlZW1wdF9kaXNhYmxlKClgIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBEb2VzbiYjMzk7dCByZWFsbHkgbWF0dGVyLCBpdCYjMzk7cyBiZWVuIHJlbW92ZWQhCgpJIHNob3VsZCBjaGVjayB0aGUgaGlzdG9yeSBvZiBgaW5jbHVkZS9saW51eC9tbXVfbm90aWZpZXIuaGAgb3IgYG1tL21tdV9ub3RpZmllci5jYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIE5ldmVybWluZCwgdGhlIGltcG9ydGFudCB0aGluZyBpcyB0aGF0IGl0IHdhcyByZW1vdmVkLgoKSXMgdGhpcyB3b3J0aCBhIGZ1enppbmcgZWZmb3J0PyBZZWFoLCBhYnNvbHV0ZWx5LiBJdCYjMzk7cyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLiBXZSBuZWVkIHRvIGZvY3VzIG9uIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIHRob3NlIGBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlXypgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGUgb25lcyB3ZSB3YW50IGFyZSBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV8qYC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbW11X25vdGlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbW11X25vdGlmaWVyLmM9MjU9REVGSU5FX1NUQVRJQ19TUkNVKHNyY3UpO1xuLS1cbm1tL21tdV9ub3RpZmllci5jLTI3LSNpZmRlZiBDT05GSUdfTE9DS0RFUFxubW0vbW11X25vdGlmaWVyLmM6Mjg6c3RydWN0IGxvY2tkZXBfbWFwIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwID0ge1xubW0vbW11X25vdGlmaWVyLmMtMjktXHQubmFtZSA9IFwmIzM0O21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0XCYjMzQ7XG4tLVxubW0vbW11X25vdGlmaWVyLmM9MTg4PW1tdV9pbnRlcnZhbF9yZWFkX2JlZ2luKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKmludGVydmFsX3N1Yilcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy0yNDYtXHQgKi9cbm1tL21tdV9ub3RpZmllci5jOjI0NzpcdGxvY2tfbWFwX2FjcXVpcmUoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmM6MjQ4Olx0bG9ja19tYXBfcmVsZWFzZShcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XG5tbS9tbXVfbm90aWZpZXIuYy0yNDktXHRpZiAoaXNfaW52YWxpZGF0aW5nKVxuLS1cbm1tL21tdV9ub3RpZmllci5jPTUwNz1zdGF0aWMgaW50IG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXG4tLVxubW0vbW11X25vdGlmaWVyLmMtNTYzLVxubW0vbW11X25vdGlmaWVyLmM6NTY0OmludCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxubW0vbW11X25vdGlmaWVyLmMtNTY1LXtcbi0tXG5tbS9tbXVfbm90aWZpZXIuYz01OTc9dm9pZCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlICpyYW5nZSlcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy02MDEtXG5tbS9tbXVfbm90aWZpZXIuYzo2MDI6XHRsb2NrX21hcF9hY3F1aXJlKFx1MDAyNl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTtcbm1tL21tdV9ub3RpZmllci5jLTYwMy1cdGlmIChzdWJzY3JpcHRpb25zLVx1MDAzZWhhc19pdHJlZSlcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy02MDctXHRcdG1uX2hsaXN0X2ludmFsaWRhdGVfZW5kKHN1YnNjcmlwdGlvbnMsIHJhbmdlKTtcbm1tL21tdV9ub3RpZmllci5jOjYwODpcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmMtNjA5LX1cbi0tXG5tbS9tbXVfbm90aWZpZXIuYz0xMDc2PXZvaWQgbW11X2ludGVydmFsX25vdGlmaWVyX3JlbW92ZShzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICppbnRlcnZhbF9zdWIpXG4tLVxubW0vbW11X25vdGlmaWVyLmMtMTEwOC1cdCAqL1xubW0vbW11X25vdGlmaWVyLmM6MTEwOTpcdGxvY2tfbWFwX2FjcXVpcmUoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmM6MTExMDpcdGxvY2tfbWFwX3JlbGVhc2UoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xubW0vbW11X25vdGlmaWVyLmMtMTExMS1cdGlmIChzZXEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc5MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UmIzM5O3JlIGxvb2tpbmcgYXQsIHN1bW1hcml6ZWQgZnJvbSB0aGF0IHByb21wdDoKCioqQW5hbHl6aW5nIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZGAqKgoKQWxyaWdodCwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gdGhpbmsgdGhyb3VnaCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgTU1VIG5vdGlmaWVyIGZyYW1ld29yaywgd2hpY2gsIGFzIHdlIGtub3csIGlzICpjcnVjaWFsKiBpbiBMaW51eCBmb3IgdHJhY2tpbmcgYWRkcmVzcyBzcGFjZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIG1lbW9yeSwgZGV2aWNlIG1lbW9yeSwgb3IgYW55dGhpbmcgaW52b2x2aW5nIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgY29udGV4dC4gSSYjMzk7bSBndWVzc2luZyB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbiB0aGUgKmVuZCogb2YgYW4gaW52YWxpZGF0aW9uIHJhbmdlLCB3aGljaCBzdWdnZXN0cyB0aGF0IHdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBkZWFsbG9jYXRpb24gb3IgcmVnaW9uIHNocmlua2luZy4KCk15IGd1dCB0ZWxscyBtZSB0aGlzIGZ1bmN0aW9uIGxpa2VseSBoYXMgYSB2aXRhbCByb2xlLiBNeSBpbml0aWFsIHRob3VnaHQgZ29lcyB0byB0aGUgc3BlY2lmaWNzLiBJIGFtIHByb2JhYmx5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb24gd2l0aCBzZXZlcmFsIGNvbmNlcm5zLiBJJiMzOTttIHRoaW5raW5nIGFib3V0OgoKKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBpcyB0aGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplZCB3aXRoIG90aGVyIG9wZXJhdGlvbnMgb24gdGhlIE1NVT8gV2UgbmVlZCB0byBlbnN1cmUgYXRvbWljaXR5LgoqICAgKipDb250ZXh0OioqIFdoYXQgY29udGV4dHMgY2FuIHRoaXMgZnVuY3Rpb24gYmUgY2FsbGVkIGZyb20/IEFyZSB3ZSBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dD8gVGFzayBjb250ZXh0PyBLbm93aW5nIHRoaXMgaGVscHMgZmlndXJlIG91dCBsb2NraW5nIG5lZWRzLgoqICAgKipFcnJvciBIYW5kbGluZzoqKiBBcmUgdGhlcmUgYW55IGNoZWNrcyBmb3IgZXJyb3JzPyBJZiBzbywgd2hhdCBkbyB0aGV5IGxvb2sgZm9yPyBXaGF0IGVycm9ycyBhcmUgcmV0dXJuZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSB0eXBpY2FsIGhhbmRsaW5nPwoqICAgKipEYXRhIFN0cnVjdHVyZXM6KiogV2hhdCBkYXRhIHN0cnVjdHVyZXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBUaGUgTU1VIG5vdGlmaWVyIGxpc3QgaXRzZWxmLCBvZiBjb3Vyc2UsIGJ1dCB3aGF0IGFib3V0IGFzc29jaWF0ZWQgZGF0YSBzdHJ1Y3R1cmVzIHJlcHJlc2VudGluZyB0aGUgaW52YWxpZGF0ZWQgcmFuZ2U/IEFueSBzaGFyZWQgc3RydWN0dXJlcyB3ZSBuZWVkIHRvIGJlIHZlcnkgY2FyZWZ1bCB3aXRoPwoqICAgKipQZXJmb3JtYW5jZToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHNjYWxlPyBXaGF0JiMzOTtzIHRoZSB0aW1lIGNvbXBsZXhpdHk/IElmIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgaGlnaGx5IGNvbnRlbmRlZCBzZWN0aW9uIG9mIG1lbW9yeSwgaXMgdGhpcyBhIHBvdGVudGlhbCBib3R0bGVuZWNrPwoKSSYjMzk7bSBwcm9iYWJseSBnb2luZyB0byBzdGFydCBieSBsb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBoYW5kbGUgb24gYWxsIHRoZXNlIGNvbmNlcm5zLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGNhbGwgY2hhaW4gbGVhZGluZyB0byBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uKHMpIGdpdmVzIGEgbG90IG9mIGNvbnRleHQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21tdV9ub3RpZmllci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tdV9ub3RpZmllci5jPTU4MT1tbl9obGlzdF9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXG4tLVxubW0vbW11X25vdGlmaWVyLmMtNTk2LVxubW0vbW11X25vdGlmaWVyLmM6NTk3OnZvaWQgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXG5tbS9tbXVfbm90aWZpZXIuYy01OTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDEwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6CgoqKkZpbmRpbmcgdGhlIFJpZ2h0IENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCkFscmlnaHQsIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQmFzZWQgb24gdGhlIG1lbnRpb24sIGl0IHNvdW5kcyBsaWtlIGBDT05GSUdfTU1VX05PVElGSUVSYCBpcyB0aGUga2V5LiBOb3csIHdoZXJlIGRvIEkgZmluZCB0aGUgZGVmaW5pdGlvbiBhbmQgYXNzb2NpYXRlZCBkZXBlbmRlbmNpZXMgZm9yIHRoaXM/IE5hdHVyYWxseSwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW1zJiMzOTsgY29uZmlndXJhdGlvbiBmaWxlcy4gYG1tL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYXJlIG1hbmFnZWQgd2l0aGluIGBtbS9NYWtlZmlsZWAuIEVpdGhlciB3YXksIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TU1VX05PVElGSUVSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NjgwPWNvbmZpZyBQSFlTX0FERFJfVF82NEJJVFxuLS1cbm1tL0tjb25maWctNjgyLVxubW0vS2NvbmZpZzo2ODM6Y29uZmlnIE1NVV9OT1RJRklFUlxubW0vS2NvbmZpZy02ODQtXHRib29sXG4tLVxubW0vTWFrZWZpbGU9ODg9b2JqLSQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKSAmIzQzOz0gc3BhcnNlLXZtZW1tYXAub1xubW0vTWFrZWZpbGU6ODk6b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgJiM0Mzs9IG1tdV9ub3RpZmllci5vXG5tbS9NYWtlZmlsZS05MC1vYmotJChDT05GSUdfS1NNKSAmIzQzOz0ga3NtLm9cbi0tXG5tbS9kZWJ1Zy5jPTE3NT12b2lkIGR1bXBfbW0oY29uc3Qgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vZGVidWcuYy0xOTItXHRcdFwmIzM0O2V4ZV9maWxlICVweFxcblwmIzM0O1xubW0vZGVidWcuYzoxOTM6I2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVJcbm1tL2RlYnVnLmMtMTk0LVx0XHRcJiMzNDtub3RpZmllcl9zdWJzY3JpcHRpb25zICVweFxcblwmIzM0O1xuLS1cbm1tL2RlYnVnLmMtMjIxLVx0XHRtbS1cdTAwM2VleGVfZmlsZSxcbm1tL2RlYnVnLmM6MjIyOiNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSXG5tbS9kZWJ1Zy5jLTIyMy1cdFx0bW0tXHUwMDNlbm90aWZpZXJfc3Vic2NyaXB0aW9ucyxcbi0tXG5tbS9pbnRlcm5hbC5oPTE4ODE9c3RhdGljIGlubGluZSB2b2lkIG1heWJlX3JtYXBfdW5sb2NrX2FjdGlvbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTE4OTQtXG5tbS9pbnRlcm5hbC5oOjE4OTU6I2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVJcbm1tL2ludGVybmFsLmgtMTg5Ni1zdGF0aWMgaW5saW5lIGJvb2wgY2xlYXJfZmx1c2hfeW91bmdfcHRlc19ub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaW50ZXJuYWwuaD0xOTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBwbWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nX25vdGlmeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9pbnRlcm5hbC5oLTE5MzYtXG5tbS9pbnRlcm5hbC5oOjE5Mzc6I2Vsc2UgLyogQ09ORklHX01NVV9OT1RJRklFUiAqL1xubW0vaW50ZXJuYWwuaC0xOTM4LVxuLS1cbm1tL2ludGVybmFsLmgtMTk0My1cbm1tL2ludGVybmFsLmg6MTk0NDojZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAqL1xubW0vaW50ZXJuYWwuaC0xOTQ1LVxuLS1cbm1tL21tdV9ub3RpZmllci5jPTI3Mj1zdGF0aWMgdm9pZCBtbl9pdHJlZV9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcbi0tXG5tbS9tbXVfbm90aWZpZXIuYy0yNzUtXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlID0ge1xubW0vbW11X25vdGlmaWVyLmM6Mjc2Olx0XHQuZmxhZ3MgPSBNTVVfTk9USUZJRVJfUkFOR0VfQkxPQ0tBQkxFLFxubW0vbW11X25vdGlmaWVyLmMtMjc3LVx0XHQuZXZlbnQgPSBNTVVfTk9USUZZX1JFTEVBU0UsXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQzMjg9dm9pZCBmc19yZWNsYWltX2FjcXVpcmUoZ2ZwX3QgZ2ZwX21hc2spXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzMzUtXG5tbS9wYWdlX2FsbG9jLmM6NDMzNjojaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUlxubW0vcGFnZV9hbGxvYy5jLTQzMzctXHRcdGxvY2tfbWFwX2FjcXVpcmUoXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwOTo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzU2CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMTk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTU1VIE5vdGlmaWVyIENvbnRleHQgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZywgYE1NVV9OT1RJRklFUmAsIGFuZCB0aGUgY29kZSBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gVGhlIHBhdGNoIG5vdGVzIHRoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgYXJlIGdvbmUuIEhtbSwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcG90ZW50aWFsIHNoaWZ0IGluIGhvdyBibG9ja2luZyBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgTU1VIG5vdGlmaWVyIGNvbnRleHQuCgpJcyB0aGlzIHNvbWV0aGluZyB3b3J0aCBzcGVuZGluZyB0aW1lIG9uIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZSBmYWN0IHRoYXQgdGhlIGNvbnRleHQgb2YgTU1VIG5vdGlmaWVyIGNhbGxzIGlzIHNoaWZ0aW5nIGlzIGEgcmVkIGZsYWcuIEl0IG9wZW5zIHRoZSBkb29yIHRvIHBvdGVudGlhbCBidWdzLiBNYXliZSBub3QgYmxvY2tpbmcgd2hlbiB3ZSBzaG91bGQsIG9yIHRoZSBvcHBvc2l0ZS4gVGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgaXMgdGhlIGtleS4gVGhvc2UgZnVuY3Rpb25zIG1pZ2h0IGhhdmUgYmVlbiBlbmZvcmNpbmcgYSBub24tYmxvY2tpbmcgY29udGV4dCwgb3IgcGVyaGFwcyB0aGV5IHdlcmUganVzdCBsb2NrZGVwIGFubm90YXRpb25zLiBJZiB0aGV5ICp3ZXJlKiBlbmZvcmNpbmcgbm9uLWJsb2NraW5nLCB0aGVuIHRoZWlyIHJlbW92YWwgKmRpcmVjdGx5KiBpbmZsdWVuY2VzIHdoZXRoZXIgYmxvY2tpbmcgaXMgcGVybWl0dGVkLCBhbmQgYnkgd2hvbS4gVGhlIHBvc3NpYmlsaXR5IG9mIGJsb2NrZWQgY29udGV4dHMgaGVyZSBpcyBzZXJpb3VzLgoKUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhY3R1YWxseSAqZGlkKi4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoYXQgYW5kIGZpZ3VyZSBvdXQgdGhlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9uX2Jsb2NrX3N0YXJ0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9rZXJuZWwuaD03Nj1leHRlcm4gdm9pZCBfX2NhbnRfbWlncmF0ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7XG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC04Mi0gKiBjb250ZXh0IChzcGlubG9jaywgaXJxLWhhbmRsZXIsIC4uLikuIEFkZGl0aW9uYWwgc2VjdGlvbnMgd2hlcmUgYmxvY2tpbmcgaXNcbmluY2x1ZGUvbGludXgva2VybmVsLmg6ODM6ICogbm90IGFsbG93ZWQgY2FuIGJlIGFubm90YXRlZCB3aXRoIG5vbl9ibG9ja19zdGFydCgpIGFuZCBub25fYmxvY2tfZW5kKClcbmluY2x1ZGUvbGludXgva2VybmVsLmgtODQtICogcGFpcnMuXG4tLVxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMTItLyoqXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjExMzogKiBub25fYmxvY2tfc3RhcnQgLSBhbm5vdGF0ZSB0aGUgc3RhcnQgb2Ygc2VjdGlvbiB3aGVyZSBzbGVlcGluZyBpcyBwcm9oaWJpdGVkXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTExNC0gKlxuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjI6IyBkZWZpbmUgbm9uX2Jsb2NrX3N0YXJ0KCkgKGN1cnJlbnQtXHUwMDNlbm9uX2Jsb2NrX2NvdW50JiM0MzsmIzQzOylcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIzLS8qKlxuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI1LSAqXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjEyNjogKiBDbG9zZXMgYSBzZWN0aW9uIG9wZW5lZCBieSBub25fYmxvY2tfc3RhcnQoKS5cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI3LSAqL1xuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmg9MTMyPXN0YXRpYyBpbmxpbmUgdm9pZCBfX21pZ2h0X3NsZWVwKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKSB7IH1cbi0tXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEzNi0jIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpIGRvIHsgfSB3aGlsZSAoMClcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTM3OiMgZGVmaW5lIG5vbl9ibG9ja19zdGFydCgpIGRvIHsgfSB3aGlsZSAoMClcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTM4LSMgZGVmaW5lIG5vbl9ibG9ja19lbmQoKSBkbyB7IH0gd2hpbGUgKDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIE5vbi1CbG9ja2luZyBDb250ZXh0IFRyYWNraW5nKioKCk9rYXksIHNvIGBub25fYmxvY2tfc3RhcnQoKWAuLi4gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gdGhhdCBidW1wcyB1cCBgY3VycmVudC0mZ3Q7bm9uX2Jsb2NrX2NvdW50YC4gUmlnaHQsIGFuZCB0aGF0IGNvdW50ZXIgaXMgdGhlIGtleSB0byBgbWlnaHRfc2xlZXAoKWAmIzM5O3MgZnVuY3Rpb25hbGl0eSDigJMgcHJldmVudGluZyBzbGVlcCBjYWxscyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXkmIzM5O3JlIG5vdCBhbGxvd2VkLiBJdCYjMzk7cyBhIGtpbmQgb2YgZ3VhcmRyYWlsLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi1ibG9ja2luZyBjb250ZXh0cy4KClNvLCBpZiB3ZSB0YWtlIG91dCBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCwgc3VkZGVubHkgYG1pZ2h0X3NsZWVwKClgIHdvbiYjMzk7dCB3YXJuIHVzIGFueW1vcmUgaWYsIHNheSwgbm90aWZpZXIgY2FsbGJhY2tzIGRlY2lkZSB0byBuYXAgd2hlbiBgIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLgoKQnV0IGlzIHRoaXMganVzdCBhIGNvc21ldGljIHRoaW5nPyBJcyBpdCAqZnVuY3Rpb25hbGx5KiBjaGFuZ2luZyBhbnl0aGluZywgYmV5b25kIGp1c3QgcmVtb3ZpbmcgYSBkZWJ1Z2dpbmcgYWlkIG9yIGEgbG9ja2RlcC1saWtlIGFubm90YXRpb24/IGBtaWdodF9zbGVlcCgpYCBpcyByZWFsbHkganVzdCBhIGRlYnVnIGZlYXR1cmUsIGlzbiYjMzk7dCBpdD8gVGllZCB0byBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAsIGFzIEkgcmVjYWxsLgoKSGFuZyBvbuKApiBpcyBgY3VycmVudC0mZ3Q7bm9uX2Jsb2NrX2NvdW50YCAqb25seSogZXZlciB1c2VkIGJ5IGBtaWdodF9zbGVlcCgpYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoYXQmIzM5O3MgdGhlIGNhc2UuIEl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IHdlIGhhdmVuJiMzOTt0IGxvc3Qgc29tZSBzdWJ0bGUgc2lkZSBlZmZlY3Qgb3IgZGVwZW5kZW5jeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHJlbW92YWwgaXMgY2xlYW4gYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gb3RoZXIgYXJlYXMgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9uX2Jsb2NrX2NvdW50JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgva2VybmVsLmg9NzY9ZXh0ZXJuIHZvaWQgX19jYW50X21pZ3JhdGUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpO1xuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjI6IyBkZWZpbmUgbm9uX2Jsb2NrX3N0YXJ0KCkgKGN1cnJlbnQtXHUwMDNlbm9uX2Jsb2NrX2NvdW50JiM0MzsmIzQzOylcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIzLS8qKlxuLS1cbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI3LSAqL1xuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjg6IyBkZWZpbmUgbm9uX2Jsb2NrX2VuZCgpIFdBUk5fT04oY3VycmVudC1cdTAwM2Vub25fYmxvY2tfY291bnQtLSA9PSAwKVxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMjktI2Vsc2Vcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODIwPXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEyNTUtI2lmZGVmIENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMjU2Olx0aW50XHRcdFx0XHRub25fYmxvY2tfY291bnQ7XG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTI1Ny0jZW5kaWZcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTU5NDQ9c3RhdGljIGlubGluZSB2b2lkIHNjaGVkdWxlX2RlYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldiwgYm9vbCBwcmVlbXB0KVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1NC0jaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUFxua2VybmVsL3NjaGVkL2NvcmUuYzo1OTU1Olx0aWYgKCFwcmVlbXB0IFx1MDAyNlx1MDAyNiBSRUFEX09OQ0UocHJldi1cdTAwM2VfX3N0YXRlKSBcdTAwMjZcdTAwMjYgcHJldi1cdTAwM2Vub25fYmxvY2tfY291bnQpIHtcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1Ni1cdFx0cHJpbnRrKEtFUk5fRVJSIFwmIzM0O0JVRzogc2NoZWR1bGluZyBpbiBhIG5vbi1ibG9ja2luZyBzZWN0aW9uOiAlcy8lZC8laVxcblwmIzM0Oyxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTk1NzpcdFx0XHRwcmV2LVx1MDAzZWNvbW0sIHByZXYtXHUwMDNlcGlkLCBwcmV2LVx1MDAzZW5vbl9ibG9ja19jb3VudCk7XG5rZXJuZWwvc2NoZWQvY29yZS5jLTU5NTgtXHRcdGR1bXBfc3RhY2soKTtcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jPTkxMTc9dm9pZCBfX21pZ2h0X3Jlc2NoZWQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGludCBvZmZzZXRzKVxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTEyNy1cdGlmICgocmVzY2hlZF9vZmZzZXRzX29rKG9mZnNldHMpIFx1MDAyNlx1MDAyNiAhaXJxc19kaXNhYmxlZCgpIFx1MDAyNlx1MDAyNlxua2VybmVsL3NjaGVkL2NvcmUuYzo5MTI4Olx0ICAgICAhaXNfaWRsZV90YXNrKGN1cnJlbnQpIFx1MDAyNlx1MDAyNiAhY3VycmVudC1cdTAwM2Vub25fYmxvY2tfY291bnQpIHx8XG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxMjktXHQgICAgc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HIHx8IHN5c3RlbV9zdGF0ZSBcdTAwM2UgU1lTVEVNX1JVTk5JTkcgfHxcbi0tXG5rZXJuZWwvc2NoZWQvY29yZS5jLTkxNDItXHRwcl9lcnIoXCYjMzQ7aW5fYXRvbWljKCk6ICVkLCBpcnFzX2Rpc2FibGVkKCk6ICVkLCBub25fYmxvY2s6ICVkLCBwaWQ6ICVkLCBuYW1lOiAlc1xcblwmIzM0Oyxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6OTE0MzpcdCAgICAgICBpbl9hdG9taWMoKSwgaXJxc19kaXNhYmxlZCgpLCBjdXJyZW50LVx1MDAzZW5vbl9ibG9ja19jb3VudCxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE0NC1cdCAgICAgICBjdXJyZW50LVx1MDAzZXBpZCwgY3VycmVudC1cdTAwM2Vjb21tKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ0MgoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA5MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYG5vbl9ibG9ja19jb3VudGAgaXMgb25seSByZWxldmFudCBpZiBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgaXMgZW5hYmxlZCwgYW5kIGl0JiMzOTtzIHVzZWQgcHVyZWx5IGZvciBkZWJ1Z2dpbmcg4oCTIHNwZWNpZmljYWxseSwgdG8gZmxhZyBwb3RlbnRpYWwgaXNzdWVzIGluIGBfX21pZ2h0X3Jlc2NoZWRgIGFuZCBgc2NoZWR1bGVfZGVidWdgLiBJdCBkb2VzbiYjMzk7dCBhY3R1YWxseSAqY2hhbmdlKiBob3cgdGhlIGtlcm5lbCBvcGVyYXRlcyBvciBpdHMgY29udHJvbCBmbG93LiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIGRlYnVnZ2luZyBhbm5vdGF0aW9uLCBhIHdhcm5pbmcgbWVjaGFuaXNtLgoKTm93LCBhY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgY2hhbmdlcyByZWxhdGVkIHRvICYjMzQ7UHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMmIzM0OyBkb24mIzM5O3Qgd2FycmFudCBmdXp6aW5nLiBJcyByZW1vdmluZyBhIGRlYnVnZ2luZyBhbm5vdGF0aW9uIGNvbnNpZGVyZWQgYSBmdW5jdGlvbmFsIGNoYW5nZT8gTm8sIGl0JiMzOTtzIG5vdC4gSXQgZG9lc24mIzM5O3QgYWZmZWN0IHRoZSBleGVjdXRpb24gcGF0aDsgaXQgb25seSBhZmZlY3RzIHdoZXRoZXIgYSB3YXJuaW5nIGdldHMgcHJpbnRlZCBpZiBhIGZ1bmN0aW9uIHNsZWVwcy4KClRoZSBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBtYWNyb3MgYXJlIGVzc2VudGlhbGx5IG5vLW9wcyB1bmxlc3MgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIGlzIGFjdGl2ZS4gRXZlbiB0aGVuLCB0aGV5IGp1c3QgbWFuYWdlIGEgY291bnRlciB1c2VkIGZvciB0aGVzZSB3YXJuaW5ncy4gIGBzY2hlZHVsZV9kZWJ1Z2AgY2FsbHMgYGR1bXBfc3RhY2soKWAgYW5kIHByaW50cyBhIHdhcm5pbmcsIGJ1dCBpdCBkb2VzbiYjMzk7dCB0cmlnZ2VyIGEgcGFuaWMgdW5sZXNzIGBwYW5pY19vbl93YXJuYCBpcyBzZXQuICBFdmVuIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgdGhlIGNoZWNrIHdpdGggYG5vbl9ibG9ja19jb3VudGAgcmVzdWx0cyBpbiBhIHdhcm5pbmcsIGBkdW1wX3N0YWNrKClgIGFuZCBrZXJuZWwgdGFpbnQsIGJ1dCBkb2VzbiYjMzk7dCBjaGFuZ2UgZXhlY3V0aW9uIGZsb3cuCgpTbywgdGhlIHBhdGNoIEkmIzM5O20gbG9va2luZyBhdCAqb25seSogcmVtb3ZlcyB0aGVzZSBkZWJ1ZyBhc3NlcnRpb25zLiBJdOKAmXMgYSBjbGVhbi11cCwgcmVtb3Zpbmcgd2FybmluZ3MuIEl0IGRvZXNuJiMzOTt0IHRvdWNoIHRoZSBhY3R1YWwgbG9ja2luZyBvciBzY2hlZHVsaW5nIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIG5vLW9wIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlOyBpdCYjMzk7cyBhIGRvY3VtZW50YXRpb24vZGVidWdnaW5nIGNoYW5nZSBhbmQgZG9lcyBub3QgbmVlZCB0byBiZSBmdXp6ZWQuCgpMZXQgbWUgY29uZmlybSB0aGUgYWN0dWFsIGNoYW5nZTogWWVzLCBpdCBqdXN0IHJlbW92ZXMgdGhlIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGNhbGxzIGFyb3VuZCBgbW11X25vdGlmaWVyYCBjYWxsYmFja3MuIFRoZXNlIGFyZSBwdXJlbHkgZGVidWcgYW5ub3RhdGlvbnMgbGlua2VkIHRvIGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYCBhbmQgZG8gbm90IGluZmx1ZW5jZSB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGNvbmNsdXNpb24gaXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKVGhlIHJlYXNvbmluZyBpczogVGhlIHBhdGNoIHJlbW92ZXMgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgYW5ub3RhdGlvbnMgZnJvbSB0aGUgY29kZSwgd2hpY2ggYXJlIHVzZWQgb25seSBmb3IgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgLiBSZW1vdmluZyB0aGVtIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGUga2VybmVsJiMzOTtzIGZ1bmN0aW9uLCBpdCBzaW1wbHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyB0b29sLiBUaHVzLCBpdCBkb2VzIG5vdCB3YXJyYW50IGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDA5OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDk6NDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjExLjk3ODMwMzA2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzI4Nzg4MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTEuOTc4MzA4NzQ2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkzMzAwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjZGY3NmQ3ZGUxM2FkMDdlYTU2ZGViZWE5NDBhOGQ1Zjg5NWUzZGYxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDExIDA5OjQwOjExIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21tdV9ub3RpZmllci5jIGIvbW0vbW11X25vdGlmaWVyLmNcXG5pbmRleCAyNDViNzRmMzlmOTEyLi5jZDVkMTVjZDY0NmE1IDEwMDY0NFxcbi0tLSBhL21tL21tdV9ub3RpZmllci5jXFxuKysrIGIvbW0vbW11X25vdGlmaWVyLmNcXG5AQCAtNTIwLDExICs1MjAsNyBAQCBzdGF0aWMgaW50IG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoXFxuIFxcdFxcdGlmIChvcHMtXFx1MDAzZWludmFsaWRhdGVfcmFuZ2Vfc3RhcnQpIHtcXG4gXFx0XFx0XFx0aW50IF9yZXQ7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxcbi1cXHRcXHRcXHRcXHRub25fYmxvY2tfc3RhcnQoKTtcXG4gXFx0XFx0XFx0X3JldCA9IG9wcy1cXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdWJzY3JpcHRpb24sIHJhbmdlKTtcXG4tXFx0XFx0XFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcXG4tXFx0XFx0XFx0XFx0bm9uX2Jsb2NrX2VuZCgpO1xcbiBcXHRcXHRcXHRpZiAoX3JldCkge1xcbiBcXHRcXHRcXHRcXHRwcl9pbmZvKFxcXCIlcFMgY2FsbGJhY2sgZmFpbGVkIHdpdGggJWQgaW4gJXNibG9ja2FibGUgY29udGV4dC5cXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdG9wcy1cXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydCwgX3JldCxcXG5AQCAtNTkxLDE0ICs1ODcsOSBAQCBtbl9obGlzdF9pbnZhbGlkYXRlX2VuZChzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXFxuIFxcdGlkID0gc3JjdV9yZWFkX2xvY2soXFx1MDAyNnNyY3UpO1xcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zcmN1KHN1YnNjcmlwdGlvbiwgXFx1MDAyNnN1YnNjcmlwdGlvbnMtXFx1MDAzZWxpc3QsIGhsaXN0LFxcbiBcXHRcXHRcXHRcXHQgc3JjdV9yZWFkX2xvY2tfaGVsZChcXHUwMDI2c3JjdSkpIHtcXG4tXFx0XFx0aWYgKHN1YnNjcmlwdGlvbi1cXHUwMDNlb3BzLVxcdTAwM2VpbnZhbGlkYXRlX3JhbmdlX2VuZCkge1xcbi1cXHRcXHRcXHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxcbi1cXHRcXHRcXHRcXHRub25fYmxvY2tfc3RhcnQoKTtcXG4rXFx0XFx0aWYgKHN1YnNjcmlwdGlvbi1cXHUwMDNlb3BzLVxcdTAwM2VpbnZhbGlkYXRlX3JhbmdlX2VuZClcXG4gXFx0XFx0XFx0c3Vic2NyaXB0aW9uLVxcdTAwM2VvcHMtXFx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kKHN1YnNjcmlwdGlvbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cmFuZ2UpO1xcbi1cXHRcXHRcXHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxcbi1cXHRcXHRcXHRcXHRub25fYmxvY2tfZW5kKCk7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXHRzcmN1X3JlYWRfdW5sb2NrKFxcdTAwMjZzcmN1LCBpZCk7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTIuNDQ4NTE2NjMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDQ4NTg1NTY0MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgYW5ub3RhdGlvbnMgYXJvdW5kIG1tdV9ub3RpZmllciBjYWxsYmFja3MuIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCBleGNsdXNpdmVseSBmb3IgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIHRvIHRyaWdnZXIgd2FybmluZ3MgaWYgdGhlIGNvZGUgc2xlZXBzIGluIGEgbm9uLWJsb2NraW5nIGNvbnRleHQuIFJlbW92aW5nIHRoZW0gZG9lcyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIHRoZSBleGVjdXRpb24gZmxvdyBvciBsb2dpYyBvZiB0aGUga2VybmVsLCBpdCBvbmx5IHJlbW92ZXMgYSBkZWJ1Z2dpbmcgYXNzZXJ0aW9uLiBUaGVyZWZvcmUsIGl0IGRvZXMgbm90IHJlcXVpcmUgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNkZjc2ZDdkZTEzYWQwN2VhNTZkZWJlYTk0MGE4ZDVmODk1ZTNkZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwOTo0MDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21tdV9ub3RpZmllci5jIGIvbW0vbW11X25vdGlmaWVyLmNcbmluZGV4IDI0NWI3NGYzOWY5MTIuLmNkNWQxNWNkNjQ2YTUgMTAwNjQ0XG4tLS0gYS9tbS9tbXVfbm90aWZpZXIuY1xuKysrIGIvbW0vbW11X25vdGlmaWVyLmNcbkBAIC01MjAsMTEgKzUyMCw3IEBAIHN0YXRpYyBpbnQgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcbiBcdFx0aWYgKG9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KSB7XG4gXHRcdFx0aW50IF9yZXQ7XG4gXG4tXHRcdFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcbi1cdFx0XHRcdG5vbl9ibG9ja19zdGFydCgpO1xuIFx0XHRcdF9yZXQgPSBvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdWJzY3JpcHRpb24sIHJhbmdlKTtcbi1cdFx0XHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxuLVx0XHRcdFx0bm9uX2Jsb2NrX2VuZCgpO1xuIFx0XHRcdGlmIChfcmV0KSB7XG4gXHRcdFx0XHRwcl9pbmZvKFwiJXBTIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkIGluICVzYmxvY2thYmxlIGNvbnRleHQuXFxuXCIsXG4gXHRcdFx0XHRcdG9wcy1cdTAwM2VpbnZhbGlkYXRlX3JhbmdlX3N0YXJ0LCBfcmV0LFxuQEAgLTU5MSwxNCArNTg3LDkgQEAgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9zdWJzY3JpcHRpb25zICpzdWJzY3JpcHRpb25zLFxuIFx0aWQgPSBzcmN1X3JlYWRfbG9jayhcdTAwMjZzcmN1KTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NyY3Uoc3Vic2NyaXB0aW9uLCBcdTAwMjZzdWJzY3JpcHRpb25zLVx1MDAzZWxpc3QsIGhsaXN0LFxuIFx0XHRcdFx0IHNyY3VfcmVhZF9sb2NrX2hlbGQoXHUwMDI2c3JjdSkpIHtcbi1cdFx0aWYgKHN1YnNjcmlwdGlvbi1cdTAwM2VvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9lbmQpIHtcbi1cdFx0XHRpZiAoIW1tdV9ub3RpZmllcl9yYW5nZV9ibG9ja2FibGUocmFuZ2UpKVxuLVx0XHRcdFx0bm9uX2Jsb2NrX3N0YXJ0KCk7XG4rXHRcdGlmIChzdWJzY3JpcHRpb24tXHUwMDNlb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kKVxuIFx0XHRcdHN1YnNjcmlwdGlvbi1cdTAwM2VvcHMtXHUwMDNlaW52YWxpZGF0ZV9yYW5nZV9lbmQoc3Vic2NyaXB0aW9uLFxuIFx0XHRcdFx0XHRcdFx0XHRyYW5nZSk7XG4tXHRcdFx0aWYgKCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKSlcbi1cdFx0XHRcdG5vbl9ibG9ja19lbmQoKTtcbi1cdFx0fVxuIFx0fVxuIFx0c3JjdV9yZWFkX3VubG9jayhcdTAwMjZzcmN1LCBpZCk7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTIuNDQ4NTE4MzcyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM2ODQwMTI3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIG1tdV9ub3RpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL21tdV9ub3RpZmllci5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY29yZSBvZiBteSBpbnRlcmVzdCBsaWVzIGluIHRoZSByZW1vdmFsIG9mIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGNhbGxzIHN1cnJvdW5kaW5nIHRoZSBgb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgb3BzLVx1MDAzZWludmFsaWRhdGVfcmFuZ2VfZW5kYCBjYWxscyB3aXRoaW4gYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmRgLiBUaGVzZSBhcmUsIGFzIEkgcmVjYWxsLCBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgZGVlcGx5IGludGVydHdpbmVkIHdpdGggdGhlIG1tdSBub3RpZmllciBtZWNoYW5pc20uIEl04oCZcyBjcml0aWNhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgcmVtb3ZpbmcgdGhvc2UgY2FsbHMuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmRgIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UncyBpbXBsaWNhdGlvbnMuIFdlIG5lZWQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRob3NlIGZ1bmN0aW9ucy5cblxuQWgsIHdhaXQgYSBtb21lbnQuIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgLi4uIHRob3NlIGFyZSBtYWNyb3Mgb3IsIHBvdGVudGlhbGx5LCBpbmxpbmUgZnVuY3Rpb25zLCBhcmVuJ3QgdGhleT8gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0LiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaCBmb3IgdGhvc2UgZnVuY3Rpb25zIGFuZCBzZWUgd2hhdCB0aGV5IGFyZSBhY3R1YWxseSBkb2luZy4gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gb3BlcmF0ZSB3aXRoaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLCB0byB1bmRlcnN0YW5kIGhvdyB0aGVpciByZW1vdmFsIGFmZmVjdHMgdGhlIG92ZXJhbGwgYmVoYXZpb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDoxNi44MTY5MjI0NjJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMzAyODgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vbl9ibG9ja19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbXVfbm90aWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MTYuODY1MDYyNDYxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNTM4MTA4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYSBTdXNwZWN0ZWQgTU1VIEludmFsaWRhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdHJhY2sgZG93biB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLiBNeSBndXQgZmVlbGluZyBpcyBsZWFkaW5nIG1lIHRvd2FyZHMgc29tZSBwb3RlbnRpYWwgcHJvYmxlbXMgd2l0aGluIHRoZSBNTVUgbm90aWZpZXIgc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCB0aGVyZSBtaWdodCBiZSBhIHN1YnRsZSBidWcgb3IgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBpbnZhbGlkYXRpbmcgYWRkcmVzcyByYW5nZXMuXG5cbkkgc2hvdWxkIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGZ1bmN0aW9uLiBMZXQgbWUgc2VhcmNoIGZvciB0aGF0IHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9tbXVfbm90aWZpZXIuY2AgZmlsZS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCBob3cgYWRkcmVzcyByYW5nZSBpbnZhbGlkYXRpb25zIGFyZSBpbml0aWF0ZWQgYW5kIGhhbmRsZWQuIEFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIHdpbGwgaG9wZWZ1bGx5IHByb3ZpZGUgc29tZSBpbnNpZ2h0cywgb3IgYXQgbGVhc3QgaGVscCBtZSBuYXZpZ2F0ZSB0aGUgc3Vycm91bmRpbmcgY29kZSBtb3JlIGVmZmVjdGl2ZWx5LiBJdCdzIGEga2V5IGVudHJ5IHBvaW50LCBJIHRoaW5rLCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGUga2VybmVsIGNvb3JkaW5hdGVzIE1NVSBpbnZhbGlkYXRpb25zLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjE5Ljk5MDQ0NjcwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjk0MTY2NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbXVfbm90aWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbXVfbm90aWZpZXIuYz00NTY9c3RhdGljIGludCBtbl9pdHJlZV9pbnZhbGlkYXRlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTUwNi1cXG5tbS9tbXVfbm90aWZpZXIuYzo1MDc6c3RhdGljIGludCBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFxcbm1tL21tdV9ub3RpZmllci5jLTUwOC1cXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3N1YnNjcmlwdGlvbnMgKnN1YnNjcmlwdGlvbnMsXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYz01NjQ9aW50IF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYy01NzUtXFx0aWYgKCFobGlzdF9lbXB0eShcXHUwMDI2c3Vic2NyaXB0aW9ucy1cXHUwMDNlbGlzdCkpXFxubW0vbW11X25vdGlmaWVyLmM6NTc2OlxcdFxcdHJldHVybiBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KHN1YnNjcmlwdGlvbnMsIHJhbmdlKTtcXG5tbS9tbXVfbm90aWZpZXIuYy01NzctXFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjIwLjI1OTg3NzY3MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzNjU3MzA2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1NIENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1uX2hsaXN0X2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgbW5faGxpc3RfaW52YWxpZGF0ZV9lbmRgLiAgVGhvc2UgZ2V0IGNhbGxlZCBmcm9tIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYCwgd2hpY2ggYXJlIGRlZmluaXRlbHkgY29yZSBrZXJuZWwgZnVuY3Rpb25zLiBIbW0sIHRoZXkncmUgcmVtb3ZpbmcgY2FsbHMgdG8gYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAuICBUaGF0J3MgaW50ZXJlc3RpbmcuIFdlcmUgdGhvc2UganVzdCBmb3IgZGVidWdnaW5nLCBtYXliZSBsb2NrZGVwIHJlbGF0ZWQsIG9yIGlzIHRoaXMgYSByZWFsIGZ1bmN0aW9uYWwgY2hhbmdlPyBMZXQgbWUgc2VlIHdoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhY3R1YWxseSAqZGlkKi4gQWgsIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIGZpbGUgYW55bW9yZS5cblxuTGV0IG1lIGNoZWNrIGZvciBvdGhlciByZWxhdGVkIGNoYW5nZXMuIE9rYXksIGl0IGxvb2tzIGxpa2UgdGhlIHJlbW92YWwgb2YgYG5vbl9ibG9ja19zdGFydCgpYCBhbmQgYG5vbl9ibG9ja19lbmQoKWAgZnJvbSB0aG9zZSBmdW5jdGlvbnMgaXMgdGhlIG1haW4gdGhpbmcuIFRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB0aGVuLiBJdCdzIHJlbW92aW5nIHNvbWUga2luZCBvZiBjb250ZXh0IHRyYWNraW5nIG9yIGxvY2tpbmcgYXNzZXJ0aW9ucywgY2xlYXJseS4gV2FpdCwgYG5vbl9ibG9ja19zdGFydCgpYCBpcyAqcHJvYmFibHkqIGEgbWFjcm8sIGRvaW5nIHNvbWV0aGluZyBsaWtlIGBwcmVlbXB0X2Rpc2FibGUoKWAgb3Igc29tZXRoaW5nIHNpbWlsYXIuIERvZXNuJ3QgcmVhbGx5IG1hdHRlciwgaXQncyBiZWVuIHJlbW92ZWQhXG5cbkkgc2hvdWxkIGNoZWNrIHRoZSBoaXN0b3J5IG9mIGBpbmNsdWRlL2xpbnV4L21tdV9ub3RpZmllci5oYCBvciBgbW0vbW11X25vdGlmaWVyLmNgIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gTmV2ZXJtaW5kLCB0aGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoYXQgaXQgd2FzIHJlbW92ZWQuXG5cbklzIHRoaXMgd29ydGggYSBmdXp6aW5nIGVmZm9ydD8gWWVhaCwgYWJzb2x1dGVseS4gSXQncyBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY2hhbmdlLiBXZSBuZWVkIHRvIGZvY3VzIG9uIGBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0YCBhbmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLi4uIHRob3NlIGBtbl9obGlzdF9pbnZhbGlkYXRlX3JhbmdlXypgIGZ1bmN0aW9ucyBhcmUgc3RhdGljLiBUaGUgb25lcyB3ZSB3YW50IGFyZSBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV8qYC4gTGV0J3MgZGlnIGludG8gYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjE2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjI2LjYyNTYxMDg3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDIzMDU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21tdV9ub3RpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tdV9ub3RpZmllci5jPTI1PURFRklORV9TVEFUSUNfU1JDVShzcmN1KTtcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTI3LSNpZmRlZiBDT05GSUdfTE9DS0RFUFxcbm1tL21tdV9ub3RpZmllci5jOjI4OnN0cnVjdCBsb2NrZGVwX21hcCBfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCA9IHtcXG5tbS9tbXVfbm90aWZpZXIuYy0yOS1cXHQubmFtZSA9IFxcXCJtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydFxcXCJcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTE4OD1tbXVfaW50ZXJ2YWxfcmVhZF9iZWdpbihzdHJ1Y3QgbW11X2ludGVydmFsX25vdGlmaWVyICppbnRlcnZhbF9zdWIpXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYy0yNDYtXFx0ICovXFxubW0vbW11X25vdGlmaWVyLmM6MjQ3OlxcdGxvY2tfbWFwX2FjcXVpcmUoXFx1MDAyNl9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfbWFwKTtcXG5tbS9tbXVfbm90aWZpZXIuYzoyNDg6XFx0bG9ja19tYXBfcmVsZWFzZShcXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xcbm1tL21tdV9ub3RpZmllci5jLTI0OS1cXHRpZiAoaXNfaW52YWxpZGF0aW5nKVxcbi0tXFxubW0vbW11X25vdGlmaWVyLmM9NTA3PXN0YXRpYyBpbnQgbW5faGxpc3RfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTU2My1cXG5tbS9tbXVfbm90aWZpZXIuYzo1NjQ6aW50IF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQoc3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSAqcmFuZ2UpXFxubW0vbW11X25vdGlmaWVyLmMtNTY1LXtcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTU5Nz12b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxcbi0tXFxubW0vbW11X25vdGlmaWVyLmMtNjAxLVxcbm1tL21tdV9ub3RpZmllci5jOjYwMjpcXHRsb2NrX21hcF9hY3F1aXJlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmMtNjAzLVxcdGlmIChzdWJzY3JpcHRpb25zLVxcdTAwM2VoYXNfaXRyZWUpXFxuLS1cXG5tbS9tbXVfbm90aWZpZXIuYy02MDctXFx0XFx0bW5faGxpc3RfaW52YWxpZGF0ZV9lbmQoc3Vic2NyaXB0aW9ucywgcmFuZ2UpO1xcbm1tL21tdV9ub3RpZmllci5jOjYwODpcXHRsb2NrX21hcF9yZWxlYXNlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmMtNjA5LX1cXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTEwNzY9dm9pZCBtbXVfaW50ZXJ2YWxfbm90aWZpZXJfcmVtb3ZlKHN0cnVjdCBtbXVfaW50ZXJ2YWxfbm90aWZpZXIgKmludGVydmFsX3N1YilcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTExMDgtXFx0ICovXFxubW0vbW11X25vdGlmaWVyLmM6MTEwOTpcXHRsb2NrX21hcF9hY3F1aXJlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmM6MTExMDpcXHRsb2NrX21hcF9yZWxlYXNlKFxcdTAwMjZfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X21hcCk7XFxubW0vbW11X25vdGlmaWVyLmMtMTExMS1cXHRpZiAoc2VxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDoyNi42Nzk4NDcwMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNDM2MzQyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHdoYXQgd2UncmUgbG9va2luZyBhdCwgc3VtbWFyaXplZCBmcm9tIHRoYXQgcHJvbXB0OlxuXG4qKkFuYWx5emluZyBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgKipcblxuQWxyaWdodCwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gdGhpbmsgdGhyb3VnaCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBJbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byB0aGUgTU1VIG5vdGlmaWVyIGZyYW1ld29yaywgd2hpY2gsIGFzIHdlIGtub3csIGlzICpjcnVjaWFsKiBpbiBMaW51eCBmb3IgdHJhY2tpbmcgYWRkcmVzcyBzcGFjZSBjaGFuZ2VzLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGggc2hhcmVkIG1lbW9yeSwgZGV2aWNlIG1lbW9yeSwgb3IgYW55dGhpbmcgaW52b2x2aW5nIHBhZ2UgdGFibGUgbWFuaXB1bGF0aW9ucyBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBwcm9jZXNzIGFkZHJlc3Mgc3BhY2UgY29udGV4dC4gSSdtIGd1ZXNzaW5nIHdlJ3JlIGludGVyZXN0ZWQgaW4gdGhlICplbmQqIG9mIGFuIGludmFsaWRhdGlvbiByYW5nZSwgd2hpY2ggc3VnZ2VzdHMgdGhhdCB3ZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUga2luZCBvZiBkZWFsbG9jYXRpb24gb3IgcmVnaW9uIHNocmlua2luZy5cblxuTXkgZ3V0IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gbGlrZWx5IGhhcyBhIHZpdGFsIHJvbGUuIE15IGluaXRpYWwgdGhvdWdodCBnb2VzIHRvIHRoZSBzcGVjaWZpY3MuIEkgYW0gcHJvYmFibHkgZXhhbWluaW5nIHRoZSBmdW5jdGlvbiB3aXRoIHNldmVyYWwgY29uY2VybnMuIEknbSB0aGlua2luZyBhYm91dDpcblxuKiAgICoqU3luY2hyb25pemF0aW9uOioqIEhvdyBpcyB0aGlzIGZ1bmN0aW9uIHN5bmNocm9uaXplZCB3aXRoIG90aGVyIG9wZXJhdGlvbnMgb24gdGhlIE1NVT8gV2UgbmVlZCB0byBlbnN1cmUgYXRvbWljaXR5LlxuKiAgICoqQ29udGV4dDoqKiBXaGF0IGNvbnRleHRzIGNhbiB0aGlzIGZ1bmN0aW9uIGJlIGNhbGxlZCBmcm9tPyBBcmUgd2UgaW4gYW4gaW50ZXJydXB0IGNvbnRleHQ/IFRhc2sgY29udGV4dD8gS25vd2luZyB0aGlzIGhlbHBzIGZpZ3VyZSBvdXQgbG9ja2luZyBuZWVkcy5cbiogICAqKkVycm9yIEhhbmRsaW5nOioqIEFyZSB0aGVyZSBhbnkgY2hlY2tzIGZvciBlcnJvcnM/IElmIHNvLCB3aGF0IGRvIHRoZXkgbG9vayBmb3I/IFdoYXQgZXJyb3JzIGFyZSByZXR1cm5lZCwgYW5kIHdoYXQncyB0aGUgdHlwaWNhbCBoYW5kbGluZz9cbiogICAqKkRhdGEgU3RydWN0dXJlczoqKiBXaGF0IGRhdGEgc3RydWN0dXJlcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IFRoZSBNTVUgbm90aWZpZXIgbGlzdCBpdHNlbGYsIG9mIGNvdXJzZSwgYnV0IHdoYXQgYWJvdXQgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMgcmVwcmVzZW50aW5nIHRoZSBpbnZhbGlkYXRlZCByYW5nZT8gQW55IHNoYXJlZCBzdHJ1Y3R1cmVzIHdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGg/XG4qICAgKipQZXJmb3JtYW5jZToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIHNjYWxlPyBXaGF0J3MgdGhlIHRpbWUgY29tcGxleGl0eT8gSWYgd2UncmUgdGFsa2luZyBhYm91dCBhIGhpZ2hseSBjb250ZW5kZWQgc2VjdGlvbiBvZiBtZW1vcnksIGlzIHRoaXMgYSBwb3RlbnRpYWwgYm90dGxlbmVjaz9cblxuSSdtIHByb2JhYmx5IGdvaW5nIHRvIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBhIGhhbmRsZSBvbiBhbGwgdGhlc2UgY29uY2VybnMuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBjYWxsIGNoYWluIGxlYWRpbmcgdG8gYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kYC4gS25vd2luZyB0aGUgY2FsbGluZyBmdW5jdGlvbihzKSBnaXZlcyBhIGxvdCBvZiBjb250ZXh0LiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBzYXlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzkwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MzAuOTIzNDg1Nzc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTk1Mjc0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX21tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX2VuZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tbXVfbm90aWZpZXIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tbXVfbm90aWZpZXIuYz01ODE9bW5faGxpc3RfaW52YWxpZGF0ZV9lbmQoc3RydWN0IG1tdV9ub3RpZmllcl9zdWJzY3JpcHRpb25zICpzdWJzY3JpcHRpb25zLFxcbi0tXFxubW0vbW11X25vdGlmaWVyLmMtNTk2LVxcbm1tL21tdV9ub3RpZmllci5jOjU5Nzp2b2lkIF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgKnJhbmdlKVxcbm1tL21tdV9ub3RpZmllci5jLTU5OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjMwLjk2OTQ0MzY4M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDE0NzQ1MjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqRmluZGluZyB0aGUgUmlnaHQgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIEJhc2VkIG9uIHRoZSBtZW50aW9uLCBpdCBzb3VuZHMgbGlrZSBgQ09ORklHX01NVV9OT1RJRklFUmAgaXMgdGhlIGtleS4gTm93LCB3aGVyZSBkbyBJIGZpbmQgdGhlIGRlZmluaXRpb24gYW5kIGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIGZvciB0aGlzPyBOYXR1cmFsbHksIG15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcycgY29uZmlndXJhdGlvbiBmaWxlcy4gYG1tL0tjb25maWdgIGlzIHRoZSBsaWtlbHkgY2FuZGlkYXRlLCBvciBwZXJoYXBzIHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMgYXJlIG1hbmFnZWQgd2l0aGluIGBtbS9NYWtlZmlsZWAuIEVpdGhlciB3YXksIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luIG15IGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MTAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDozMy45ODQxOTM5MjRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMjE5ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1NVV9OT1RJRklFUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz02ODA9Y29uZmlnIFBIWVNfQUREUl9UXzY0QklUXFxuLS1cXG5tbS9LY29uZmlnLTY4Mi1cXG5tbS9LY29uZmlnOjY4Mzpjb25maWcgTU1VX05PVElGSUVSXFxubW0vS2NvbmZpZy02ODQtXFx0Ym9vbFxcbi0tXFxubW0vTWFrZWZpbGU9ODg9b2JqLSQoQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQKSArPSBzcGFyc2Utdm1lbW1hcC5vXFxubW0vTWFrZWZpbGU6ODk6b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gbW11X25vdGlmaWVyLm9cXG5tbS9NYWtlZmlsZS05MC1vYmotJChDT05GSUdfS1NNKSArPSBrc20ub1xcbi0tXFxubW0vZGVidWcuYz0xNzU9dm9pZCBkdW1wX21tKGNvbnN0IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vZGVidWcuYy0xOTItXFx0XFx0XFxcImV4ZV9maWxlICVweFxcXFxuXFxcIlxcbm1tL2RlYnVnLmM6MTkzOiNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSXFxubW0vZGVidWcuYy0xOTQtXFx0XFx0XFxcIm5vdGlmaWVyX3N1YnNjcmlwdGlvbnMgJXB4XFxcXG5cXFwiXFxuLS1cXG5tbS9kZWJ1Zy5jLTIyMS1cXHRcXHRtbS1cXHUwMDNlZXhlX2ZpbGUsXFxubW0vZGVidWcuYzoyMjI6I2lmZGVmIENPTkZJR19NTVVfTk9USUZJRVJcXG5tbS9kZWJ1Zy5jLTIyMy1cXHRcXHRtbS1cXHUwMDNlbm90aWZpZXJfc3Vic2NyaXB0aW9ucyxcXG4tLVxcbm1tL2ludGVybmFsLmg9MTg4MT1zdGF0aWMgaW5saW5lIHZvaWQgbWF5YmVfcm1hcF91bmxvY2tfYWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xODk0LVxcbm1tL2ludGVybmFsLmg6MTg5NTojaWZkZWYgQ09ORklHX01NVV9OT1RJRklFUlxcbm1tL2ludGVybmFsLmgtMTg5Ni1zdGF0aWMgaW5saW5lIGJvb2wgY2xlYXJfZmx1c2hfeW91bmdfcHRlc19ub3RpZnkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9pbnRlcm5hbC5oPTE5Mjc9c3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmdfbm90aWZ5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTM2LVxcbm1tL2ludGVybmFsLmg6MTkzNzojZWxzZSAvKiBDT05GSUdfTU1VX05PVElGSUVSICovXFxubW0vaW50ZXJuYWwuaC0xOTM4LVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xOTQzLVxcbm1tL2ludGVybmFsLmg6MTk0NDojZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAqL1xcbm1tL2ludGVybmFsLmgtMTk0NS1cXG4tLVxcbm1tL21tdV9ub3RpZmllci5jPTI3Mj1zdGF0aWMgdm9pZCBtbl9pdHJlZV9yZWxlYXNlKHN0cnVjdCBtbXVfbm90aWZpZXJfc3Vic2NyaXB0aW9ucyAqc3Vic2NyaXB0aW9ucyxcXG4tLVxcbm1tL21tdV9ub3RpZmllci5jLTI3NS1cXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlID0ge1xcbm1tL21tdV9ub3RpZmllci5jOjI3NjpcXHRcXHQuZmxhZ3MgPSBNTVVfTk9USUZJRVJfUkFOR0VfQkxPQ0tBQkxFLFxcbm1tL21tdV9ub3RpZmllci5jLTI3Ny1cXHRcXHQuZXZlbnQgPSBNTVVfTk9USUZZX1JFTEVBU0UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDMyOD12b2lkIGZzX3JlY2xhaW1fYWNxdWlyZShnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MzM1LVxcbm1tL3BhZ2VfYWxsb2MuYzo0MzM2OiNpZmRlZiBDT05GSUdfTU1VX05PVElGSUVSXFxubW0vcGFnZV9hbGxvYy5jLTQzMzctXFx0XFx0bG9ja19tYXBfYWNxdWlyZShcXHUwMDI2X19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydF9tYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDozNC4wMzU0MTkxNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA2OTk4OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1NVSBOb3RpZmllciBDb250ZXh0IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29uZmlnLCBgTU1VX05PVElGSUVSYCwgYW5kIHRoZSBjb2RlIHNwZWNpZmljYWxseSBhcm91bmQgYF9fbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRgIGFuZCBgX19tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmRgLiBUaGUgcGF0Y2ggbm90ZXMgdGhhdCBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhcmUgZ29uZS4gSG1tLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBwb3RlbnRpYWwgc2hpZnQgaW4gaG93IGJsb2NraW5nIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBNTVUgbm90aWZpZXIgY29udGV4dC5cblxuSXMgdGhpcyBzb21ldGhpbmcgd29ydGggc3BlbmRpbmcgdGltZSBvbiBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGUgZmFjdCB0aGF0IHRoZSBjb250ZXh0IG9mIE1NVSBub3RpZmllciBjYWxscyBpcyBzaGlmdGluZyBpcyBhIHJlZCBmbGFnLiBJdCBvcGVucyB0aGUgZG9vciB0byBwb3RlbnRpYWwgYnVncy4gTWF5YmUgbm90IGJsb2NraW5nIHdoZW4gd2Ugc2hvdWxkLCBvciB0aGUgb3Bwb3NpdGUuIFRoZSByZW1vdmFsIG9mIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGlzIHRoZSBrZXkuIFRob3NlIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGJlZW4gZW5mb3JjaW5nIGEgbm9uLWJsb2NraW5nIGNvbnRleHQsIG9yIHBlcmhhcHMgdGhleSB3ZXJlIGp1c3QgbG9ja2RlcCBhbm5vdGF0aW9ucy4gSWYgdGhleSAqd2VyZSogZW5mb3JjaW5nIG5vbi1ibG9ja2luZywgdGhlbiB0aGVpciByZW1vdmFsICpkaXJlY3RseSogaW5mbHVlbmNlcyB3aGV0aGVyIGJsb2NraW5nIGlzIHBlcm1pdHRlZCwgYW5kIGJ5IHdob20uIFRoZSBwb3NzaWJpbGl0eSBvZiBibG9ja2VkIGNvbnRleHRzIGhlcmUgaXMgc2VyaW91cy5cblxuUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYG5vbl9ibG9ja19zdGFydCgpYCBhY3R1YWxseSAqZGlkKi4gTGV0J3MgZGlnIGludG8gdGhhdCBhbmQgZmlndXJlIG91dCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzU2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDA5OjQwOjM5LjEwNTQxMjQzMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc4MDg4NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vbl9ibG9ja19zdGFydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTc2PWV4dGVybiB2b2lkIF9fY2FudF9taWdyYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtODItICogY29udGV4dCAoc3BpbmxvY2ssIGlycS1oYW5kbGVyLCAuLi4pLiBBZGRpdGlvbmFsIHNlY3Rpb25zIHdoZXJlIGJsb2NraW5nIGlzXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaDo4MzogKiBub3QgYWxsb3dlZCBjYW4gYmUgYW5ub3RhdGVkIHdpdGggbm9uX2Jsb2NrX3N0YXJ0KCkgYW5kIG5vbl9ibG9ja19lbmQoKVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtODQtICogcGFpcnMuXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTExMi0vKipcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjExMzogKiBub25fYmxvY2tfc3RhcnQgLSBhbm5vdGF0ZSB0aGUgc3RhcnQgb2Ygc2VjdGlvbiB3aGVyZSBzbGVlcGluZyBpcyBwcm9oaWJpdGVkXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMTQtICpcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTIyOiMgZGVmaW5lIG5vbl9ibG9ja19zdGFydCgpIChjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQrKylcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEyMy0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI1LSAqXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaDoxMjY6ICogQ2xvc2VzIGEgc2VjdGlvbiBvcGVuZWQgYnkgbm9uX2Jsb2NrX3N0YXJ0KCkuXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMjctICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTEzMj1zdGF0aWMgaW5saW5lIHZvaWQgX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSkgeyB9XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEzNi0jIGRlZmluZSBzY2hlZF9hbm5vdGF0ZV9zbGVlcCgpIGRvIHsgfSB3aGlsZSAoMClcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oOjEzNzojIGRlZmluZSBub25fYmxvY2tfc3RhcnQoKSBkbyB7IH0gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMzgtIyBkZWZpbmUgbm9uX2Jsb2NrX2VuZCgpIGRvIHsgfSB3aGlsZSAoMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6MzkuMzgzNTA4NTU0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NDYwMTUwMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZW1vdmFsIG9mIE5vbi1CbG9ja2luZyBDb250ZXh0IFRyYWNraW5nKipcblxuT2theSwgc28gYG5vbl9ibG9ja19zdGFydCgpYC4uLiB0aGF0J3MgdGhlIGZ1bmN0aW9uIHRoYXQgYnVtcHMgdXAgYGN1cnJlbnQtXHUwMDNlbm9uX2Jsb2NrX2NvdW50YC4gUmlnaHQsIGFuZCB0aGF0IGNvdW50ZXIgaXMgdGhlIGtleSB0byBgbWlnaHRfc2xlZXAoKWAncyBmdW5jdGlvbmFsaXR5IOKAkyBwcmV2ZW50aW5nIHNsZWVwIGNhbGxzIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhleSdyZSBub3QgYWxsb3dlZC4gSXQncyBhIGtpbmQgb2YgZ3VhcmRyYWlsLCBzcGVjaWZpY2FsbHkgZm9yIG5vbi1ibG9ja2luZyBjb250ZXh0cy5cblxuU28sIGlmIHdlIHRha2Ugb3V0IGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgLCBzdWRkZW5seSBgbWlnaHRfc2xlZXAoKWAgd29uJ3Qgd2FybiB1cyBhbnltb3JlIGlmLCBzYXksIG5vdGlmaWVyIGNhbGxiYWNrcyBkZWNpZGUgdG8gbmFwIHdoZW4gYCFtbXVfbm90aWZpZXJfcmFuZ2VfYmxvY2thYmxlKHJhbmdlKWAuIFRoYXQncyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLlxuXG5CdXQgaXMgdGhpcyBqdXN0IGEgY29zbWV0aWMgdGhpbmc/IElzIGl0ICpmdW5jdGlvbmFsbHkqIGNoYW5naW5nIGFueXRoaW5nLCBiZXlvbmQganVzdCByZW1vdmluZyBhIGRlYnVnZ2luZyBhaWQgb3IgYSBsb2NrZGVwLWxpa2UgYW5ub3RhdGlvbj8gYG1pZ2h0X3NsZWVwKClgIGlzIHJlYWxseSBqdXN0IGEgZGVidWcgZmVhdHVyZSwgaXNuJ3QgaXQ/IFRpZWQgdG8gYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgLCBhcyBJIHJlY2FsbC5cblxuSGFuZyBvbuKApiBpcyBgY3VycmVudC1cdTAwM2Vub25fYmxvY2tfY291bnRgICpvbmx5KiBldmVyIHVzZWQgYnkgYG1pZ2h0X3NsZWVwKClgPyBMZXQgbWUgcXVpY2tseSB2ZXJpZnkgaWYgdGhhdCdzIHRoZSBjYXNlLiBJdCdzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGF0IHdlIGhhdmVuJ3QgbG9zdCBzb21lIHN1YnRsZSBzaWRlIGVmZmVjdCBvciBkZXBlbmRlbmN5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgcmVtb3ZhbCBpcyBjbGVhbiBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIGluIG90aGVyIGFyZWFzIG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6NDMuOTI5NTI2NzZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NzUwMDg0MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9uX2Jsb2NrX2NvdW50XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2tlcm5lbC5oPTc2PWV4dGVybiB2b2lkIF9fY2FudF9taWdyYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTtcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTIxLSAqL1xcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTIyOiMgZGVmaW5lIG5vbl9ibG9ja19zdGFydCgpIChjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQrKylcXG5pbmNsdWRlL2xpbnV4L2tlcm5lbC5oLTEyMy0vKipcXG4tLVxcbmluY2x1ZGUvbGludXgva2VybmVsLmgtMTI3LSAqL1xcbmluY2x1ZGUvbGludXgva2VybmVsLmg6MTI4OiMgZGVmaW5lIG5vbl9ibG9ja19lbmQoKSBXQVJOX09OKGN1cnJlbnQtXFx1MDAzZW5vbl9ibG9ja19jb3VudC0tID09IDApXFxuaW5jbHVkZS9saW51eC9rZXJuZWwuaC0xMjktI2Vsc2VcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjA9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMjU1LSNpZmRlZiBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjEyNTY6XFx0aW50XFx0XFx0XFx0XFx0bm9uX2Jsb2NrX2NvdW50O1xcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMjU3LSNlbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz01OTQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZHVsZV9kZWJ1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsIGJvb2wgcHJlZW1wdClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1NC0jaWZkZWYgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUFxcbmtlcm5lbC9zY2hlZC9jb3JlLmM6NTk1NTpcXHRpZiAoIXByZWVtcHQgXFx1MDAyNlxcdTAwMjYgUkVBRF9PTkNFKHByZXYtXFx1MDAzZV9fc3RhdGUpIFxcdTAwMjZcXHUwMDI2IHByZXYtXFx1MDAzZW5vbl9ibG9ja19jb3VudCkge1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1Ni1cXHRcXHRwcmludGsoS0VSTl9FUlIgXFxcIkJVRzogc2NoZWR1bGluZyBpbiBhIG5vbi1ibG9ja2luZyBzZWN0aW9uOiAlcy8lZC8laVxcXFxuXFxcIixcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjU5NTc6XFx0XFx0XFx0cHJldi1cXHUwMDNlY29tbSwgcHJldi1cXHUwMDNlcGlkLCBwcmV2LVxcdTAwM2Vub25fYmxvY2tfY291bnQpO1xcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNTk1OC1cXHRcXHRkdW1wX3N0YWNrKCk7XFxuLS1cXG5rZXJuZWwvc2NoZWQvY29yZS5jPTkxMTc9dm9pZCBfX21pZ2h0X3Jlc2NoZWQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGludCBvZmZzZXRzKVxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTI3LVxcdGlmICgocmVzY2hlZF9vZmZzZXRzX29rKG9mZnNldHMpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkgXFx1MDAyNlxcdTAwMjZcXG5rZXJuZWwvc2NoZWQvY29yZS5jOjkxMjg6XFx0ICAgICAhaXNfaWRsZV90YXNrKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2ICFjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQpIHx8XFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTI5LVxcdCAgICBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcgfHwgc3lzdGVtX3N0YXRlIFxcdTAwM2UgU1lTVEVNX1JVTk5JTkcgfHxcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtOTE0Mi1cXHRwcl9lcnIoXFxcImluX2F0b21pYygpOiAlZCwgaXJxc19kaXNhYmxlZCgpOiAlZCwgbm9uX2Jsb2NrOiAlZCwgcGlkOiAlZCwgbmFtZTogJXNcXFxcblxcXCIsXFxua2VybmVsL3NjaGVkL2NvcmUuYzo5MTQzOlxcdCAgICAgICBpbl9hdG9taWMoKSwgaXJxc19kaXNhYmxlZCgpLCBjdXJyZW50LVxcdTAwM2Vub25fYmxvY2tfY291bnQsXFxua2VybmVsL3NjaGVkL2NvcmUuYy05MTQ0LVxcdCAgICAgICBjdXJyZW50LVxcdTAwM2VwaWQsIGN1cnJlbnQtXFx1MDAzZWNvbW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwOTo0MDo0NS44MDQ1NDg0MjRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1MDI0ODYzNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGBub25fYmxvY2tfY291bnRgIGlzIG9ubHkgcmVsZXZhbnQgaWYgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIGlzIGVuYWJsZWQsIGFuZCBpdCdzIHVzZWQgcHVyZWx5IGZvciBkZWJ1Z2dpbmcg4oCTIHNwZWNpZmljYWxseSwgdG8gZmxhZyBwb3RlbnRpYWwgaXNzdWVzIGluIGBfX21pZ2h0X3Jlc2NoZWRgIGFuZCBgc2NoZWR1bGVfZGVidWdgLiBJdCBkb2Vzbid0IGFjdHVhbGx5ICpjaGFuZ2UqIGhvdyB0aGUga2VybmVsIG9wZXJhdGVzIG9yIGl0cyBjb250cm9sIGZsb3cuIEl0J3MgZXNzZW50aWFsbHkgYSBkZWJ1Z2dpbmcgYW5ub3RhdGlvbiwgYSB3YXJuaW5nIG1lY2hhbmlzbS5cblxuTm93LCBhY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgY2hhbmdlcyByZWxhdGVkIHRvIFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHNcIiBkb24ndCB3YXJyYW50IGZ1enppbmcuIElzIHJlbW92aW5nIGEgZGVidWdnaW5nIGFubm90YXRpb24gY29uc2lkZXJlZCBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBObywgaXQncyBub3QuIEl0IGRvZXNuJ3QgYWZmZWN0IHRoZSBleGVjdXRpb24gcGF0aDsgaXQgb25seSBhZmZlY3RzIHdoZXRoZXIgYSB3YXJuaW5nIGdldHMgcHJpbnRlZCBpZiBhIGZ1bmN0aW9uIHNsZWVwcy5cblxuVGhlIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIG1hY3JvcyBhcmUgZXNzZW50aWFsbHkgbm8tb3BzIHVubGVzcyBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgaXMgYWN0aXZlLiBFdmVuIHRoZW4sIHRoZXkganVzdCBtYW5hZ2UgYSBjb3VudGVyIHVzZWQgZm9yIHRoZXNlIHdhcm5pbmdzLiAgYHNjaGVkdWxlX2RlYnVnYCBjYWxscyBgZHVtcF9zdGFjaygpYCBhbmQgcHJpbnRzIGEgd2FybmluZywgYnV0IGl0IGRvZXNuJ3QgdHJpZ2dlciBhIHBhbmljIHVubGVzcyBgcGFuaWNfb25fd2FybmAgaXMgc2V0LiAgRXZlbiBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AsIHRoZSBjaGVjayB3aXRoIGBub25fYmxvY2tfY291bnRgIHJlc3VsdHMgaW4gYSB3YXJuaW5nLCBgZHVtcF9zdGFjaygpYCBhbmQga2VybmVsIHRhaW50LCBidXQgZG9lc24ndCBjaGFuZ2UgZXhlY3V0aW9uIGZsb3cuXG5cblNvLCB0aGUgcGF0Y2ggSSdtIGxvb2tpbmcgYXQgKm9ubHkqIHJlbW92ZXMgdGhlc2UgZGVidWcgYXNzZXJ0aW9ucy4gSXTigJlzIGEgY2xlYW4tdXAsIHJlbW92aW5nIHdhcm5pbmdzLiBJdCBkb2Vzbid0IHRvdWNoIHRoZSBhY3R1YWwgbG9ja2luZyBvciBzY2hlZHVsaW5nIGJlaGF2aW9yIG9mIHRoZSBrZXJuZWwuIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpcyBhIG5vLW9wIGZyb20gYSBmdW5jdGlvbmFsIHBlcnNwZWN0aXZlOyBpdCdzIGEgZG9jdW1lbnRhdGlvbi9kZWJ1Z2dpbmcgY2hhbmdlIGFuZCBkb2VzIG5vdCBuZWVkIHRvIGJlIGZ1enplZC5cblxuTGV0IG1lIGNvbmZpcm0gdGhlIGFjdHVhbCBjaGFuZ2U6IFllcywgaXQganVzdCByZW1vdmVzIHRoZSBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBjYWxscyBhcm91bmQgYG1tdV9ub3RpZmllcmAgY2FsbGJhY2tzLiBUaGVzZSBhcmUgcHVyZWx5IGRlYnVnIGFubm90YXRpb25zIGxpbmtlZCB0byBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgYW5kIGRvIG5vdCBpbmZsdWVuY2UgdGhlIGtlcm5lbCdzIGZ1bmN0aW9uYWwgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgY29uY2x1c2lvbiBpcyBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblRoZSByZWFzb25pbmcgaXM6IFRoZSBwYXRjaCByZW1vdmVzIGBub25fYmxvY2tfc3RhcnQoKWAgYW5kIGBub25fYmxvY2tfZW5kKClgIGFubm90YXRpb25zIGZyb20gdGhlIGNvZGUsIHdoaWNoIGFyZSB1c2VkIG9ubHkgZm9yIGBDT05GSUdfREVCVUdfQVRPTUlDX1NMRUVQYC4gUmVtb3ZpbmcgdGhlbSBkb2Vzbid0IGNoYW5nZSB0aGUga2VybmVsJ3MgZnVuY3Rpb24sIGl0IHNpbXBseSByZW1vdmVzIGEgZGVidWdnaW5nIHRvb2wuIFRodXMsIGl0IGRvZXMgbm90IHdhcnJhbnQgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0MiwiT3V0cHV0VG9rZW5zIjoxMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6NTcuMzA3MDM4OTkxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBgbm9uX2Jsb2NrX3N0YXJ0KClgIGFuZCBgbm9uX2Jsb2NrX2VuZCgpYCBhbm5vdGF0aW9ucyBhcm91bmQgbW11X25vdGlmaWVyIGNhbGxiYWNrcy4gVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgdG8gdHJpZ2dlciB3YXJuaW5ncyBpZiB0aGUgY29kZSBzbGVlcHMgaW4gYSBub24tYmxvY2tpbmcgY29udGV4dC4gUmVtb3ZpbmcgdGhlbSBkb2VzIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgdGhlIGV4ZWN1dGlvbiBmbG93IG9yIGxvZ2ljIG9mIHRoZSBrZXJuZWwsIGl0IG9ubHkgcmVtb3ZlcyBhIGRlYnVnZ2luZyBhc3NlcnRpb24uIFRoZXJlZm9yZSwgaXQgZG9lcyBub3QgcmVxdWlyZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDk6NDA6NTcuMzA3MDc2NzIxWiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowlqfwv[1] Phase: Running StartedAt: 2026-08-11 09:41:08 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlqfwv[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-11 09:41:08 +0000 UTC FinishedAt: 2026-08-11 09:41:13 +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,}