Name: series-workflow7wb6l Phase: Failed StartedAt: 2026-09-13 18:34:40 +0000 UTC FinishedAt: 2026-09-13 19:17:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7wb6l[0] Phase: Succeeded StartedAt: 2026-09-13 18:34:40 +0000 UTC FinishedAt: 2026-09-13 19:17:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7wb6l[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 18:34:40 +0000 UTC FinishedAt: 2026-09-13 19:17:42 +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+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29zbWV0aWMgc3R5bGUgY2xlYW51cHM6IG11bHRpLWxpbmUgY29tbWVudCBmb3JtYXR0aW5nIGFkanVzdG1lbnRzLCBzcGFjaW5nIGluIGEgcG9pbnRlciBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIGRlbGV0aW5nIGFuIHVubmVjZXNzYXJ5ICYjMzk7cmV0dXJuOyYjMzk7IHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjQ1OWM3NmYwMjg4YmUzNTNhYmVjN2FkMzFkMzE5ZDU0ODM1MjU3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE5OjE3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbiYjNDM7XHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxuJiM0MztcdCAqL1xuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuQEAgLTQ3MSw3ICYjNDM7NDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbiYjNDM7XHR2ZXIgPSAqKHU4ICopZGF0YTtcbiBcbiBcdHN3aXRjaCAodmVyKSB7XG4gXHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XG5AQCAtNzY5LDcgJiM0Mzs3NzAsOCBAQCBzdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbiBcdHhhX2VyYXNlKFx1MDAyNnFydHJfcG9ydHMsIHBvcnQpO1xuIFxuIFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxuLVx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqL1xuJiM0MztcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbiYjNDM7XHQgKi9cbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0X19zb2NrX3B1dChcdTAwMjZpcGMtXHUwMDNlc2spO1xuQEAgLTk1Nyw4ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4ge1xuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBhZGRyLCBtc2ctXHUwMDNlbXNnX25hbWUpO1xuLVx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsXG4tXHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqKTtcbiYjNDM7XHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTtcbiBcdF9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7XG4gXHRzdHJ1Y3QgcXJ0cl9zb2NrICppcGMgPSBxcnRyX3NrKHNvY2stXHUwMDNlc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYmNiMDkwZWU3OWQ0OS4uYWFmNzdjN2Y1MDQ1YiAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmNcbkBAIC0xNzksOCAmIzQzOzE3OSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZpY2VfYW5ub3VuY2VfZGVsKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0LFxuIFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4tXG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJiMzOTtyZXR1cm47JiMzOTsgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBObyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWx0ZXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNDU5Yzc2ZjAyODhiZTM1M2FiZWM3YWQzMWQzMTlkNTQ4MzUyNTdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTk6MTc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL2FmX3FydHIuYwpAQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwogCX0KIAkvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0Ci0JICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi8KJiM0MzsJICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUKJiM0MzsJICovCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCkBAIC00NzEsNyAmIzQzOzQ3Miw3IEBAIGludCBxcnRyX2VuZHBvaW50X3Bvc3Qoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogCWNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLSZndDtjYjsKIAogCS8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqLwotCXZlciA9ICoodTgqKWRhdGE7CiYjNDM7CXZlciA9ICoodTggKilkYXRhOwogCiAJc3dpdGNoICh2ZXIpIHsKIAljYXNlIFFSVFJfUFJPVE9fVkVSXzE6CkBAIC03NjksNyAmIzQzOzc3MCw4IEBAIHN0YXRpYyB2b2lkIHFydHJfcG9ydF9yZW1vdmUoc3RydWN0IHFydHJfc29jayAqaXBjKQogCXhhX2VyYXNlKCZhbXA7cXJ0cl9wb3J0cywgcG9ydCk7CiAKIAkvKiBFbnN1cmUgdGhhdCBpZiBxcnRyX3BvcnRfbG9va3VwKCkgZGlkIGVudGVyIHRoZSBSQ1UgcmVhZCBzZWN0aW9uIHdlCi0JICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqLwomIzQzOwkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50CiYjNDM7CSAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJX19zb2NrX3B1dCgmYW1wO2lwYy0mZ3Q7c2spOwpAQCAtOTU3LDggJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLSZndDttc2dfbmFtZSk7Ci0JaW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsCi0JCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopOwomIzQzOwlpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwKJiM0MzsJCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pOwogCV9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7CiAJc3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0mZ3Q7c2s7CmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuYwppbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmMKQEAgLTE3OSw4ICYjNDM7MTc5LDYgQEAgc3RhdGljIHZvaWQgc2VydmljZV9hbm5vdW5jZV9kZWwoc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QsCiAJcmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCAmYW1wO21zZywgJmFtcDtpdiwgMSwgc2l6ZW9mKHBrdCkpOwogCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ICE9IC1FTk9ERVYpCiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxuJiMzNDspOwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb246IFFSVFIgRGlmZioqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIFFSVFIgcGF0Y2ggc2VyaWVzLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGlmZiBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4KCkZpcnN0LCBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2AuIFRoZXJlJiMzOTtzIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGFuZCB3aGl0ZXNwYWNlIGNsZWFudXAuIEkgYWxzbyBzZWUgYSBjaGFuZ2UgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIGhhcyB6ZXJvIGVmZmVjdCBvbiB0aGUgY29tcGlsZWQgY29kZS4KCkkgdGhlbiBzZWUgY2hhbmdlcyBpbiBgbmV0L3FydHIvbnMuY2AsIHdoaWNoIHJlbW92ZSBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGluIGEgYHZvaWRgIGZ1bmN0aW9uLiAgQWdhaW4sIG5vIGltcGFjdCBvbiB0aGUgY29tcGlsZWQgcmVzdWx0LgoKTG9va2luZyBhdCB0aGUgcHJvbXB0JiMzOTtzIG5lZ2F0aXZlIGNyaXRlcmlhLCAqYWxsKiBvZiB0aGVzZSBjaGFuZ2VzIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzJiMzNDsgY2F0ZWdvcnkuICBXZSYjMzk7dmUgZ290IGNvbW1lbnQgbW9kaWZpY2F0aW9ucywgd2hpdGVzcGFjZSBjaGFuZ2VzLCB2YXJpYWJsZSBwYXJhbWV0ZXIgbmFtZXMgaW4gZnVuY3Rpb24gcG9pbnRlciwgYW5kIHJlZHVuZGFudCBgcmV0dXJuO2Agc3RhdGVtZW50cy4gTm9uZSBvZiB0aGVzZSBhZmZlY3QgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzIG9mIHRoZSBkaWZmLCBJIGFtIGNvbmZpZGVudCBpbiBkZWNsYXJpbmcgdGhhdCB0aGlzIGNoYW5nZSBpcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzkwOlx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzkxOlx0XHRcdGlmICghcmMgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuIDM5MjpcdFx0XHRcdG5vZGUtXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XG4gMzkzOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM5NDpcdFx0fVxuIDM5NTpcdFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuIDM5NjpcdFx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmVcbiAzOTc6XHRcdCAqL1xuIDM5ODpcdFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIDM5OTpcdFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIDQwMDpcdFxuIDQwMTpcdFx0aWYgKHJjID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuIDQwMjpcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XG4gNDAzOlx0XG4gNDA0Olx0XHRyZXR1cm4gcmM7XG4gNDA1Olx0fVxuIDQwNjpcdFxuIDQwNzpcdC8qIExvb2t1cCBub2RlIGJ5IGlkLlxuIDQwODpcdCAqXG4gNDA5Olx0ICogY2FsbGVycyBtdXN0IHJlbGVhc2Ugd2l0aCBxcnRyX25vZGVfcmVsZWFzZSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgUVJUUiBzdHVmZiBpcyBoYW5kbGVkIGF0IHRoZSBuZXRsaW5rIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNydWNpYWwgZGF0YSBoYW5kbGluZyBzdGVwcy4gTGluZXMgNDY1LTQ4MCBpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCBzaG91bGQgZ2l2ZSBtZSBzb21lIGtleSBpbnNpZ2h0cyBpbnRvIHRoZSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbmV0bGluayBtZXNzYWdlIHByb2Nlc3NpbmcsIG1heWJlIHNvbWUgcGFja2V0IGZvcm1hdCBpbnRlcnByZXRhdGlvbnMsIG9yIHNvbWUgY29yZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYml0cy4gSSBhbnRpY2lwYXRlIGl0JiMzOTtsbCBzaGVkIGxpZ2h0IG9uIGhvdyBkYXRhIGdldHMgaW4gYW5kIG91dCBvZiB0aGUgUVJUUiBzb2NrZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdFx0aWYgKGxlbiA9PSAwIHx8IGxlbiBcdTAwMjYgMylcbiA0NjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDY3Olx0XG4gNDY4Olx0XHRza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgbGVuLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiA0Njk6XHRcdGlmICghc2tiKVxuIDQ3MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0NzE6XHRcbiA0NzI6XHRcdGNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLVx1MDAzZWNiO1xuIDQ3MzpcdFxuIDQ3NDpcdFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXG4gNDc1Olx0XHR2ZXIgPSAqKHU4ICopZGF0YTtcbiA0NzY6XHRcbiA0Nzc6XHRcdHN3aXRjaCAodmVyKSB7XG4gNDc4Olx0XHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XG4gNDc5Olx0XHRcdGlmIChsZW4gXHUwMDNjIHNpemVvZigqdjEpKVxuIDQ4MDpcdFx0XHRcdGdvdG8gZXJyO1xuIDQ4MTpcdFx0XHR2MSA9IGRhdGE7XG4gNDgyOlx0XHRcdGhkcmxlbiA9IHNpemVvZigqdjEpO1xuIDQ4MzpcdFxuIDQ4NDpcdFx0XHRjYi1cdTAwM2V0eXBlID0gbGUzMl90b19jcHUodjEtXHUwMDNldHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN5bnRoZXNpemUgaXRzIGtleSB0YWtlYXdheXMgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBpbXBsaWVkIGluc3RydWN0aW9uczoKCioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBTZWN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyA3NjUtNzgwLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFyZ3VtZW50cywgYW55IG5vdmVsIGRhdGEgb3IgcGVyc3BlY3RpdmVzLCBhbmQgdGhlIG92ZXJhbGwgbmFycmF0aXZlIGZsb3cgb2YgdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQsIHdoZXRoZXIgaXQmIzM5O3Mgc3VwcG9ydGluZyBldmlkZW5jZSwgYSBjb3VudGVyYXJndW1lbnQsIG9yIHBlcmhhcHMgYSBjb25jbHVkaW5nIHRob3VnaHQgZm9yIGEgc3BlY2lmaWMgcG9pbnQuIEkmIzM5O2xsIGJlIHdhdGNoaW5nIGNsb3NlbHkgZm9yIGhvdyBpdCBjb25uZWN0cyB0byB0aGUgYnJvYWRlciBzdWJqZWN0LCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG9taXNzaW9ucyBvciBhcmVhcyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueSBiYXNlZCBvbiBteSBleHBlcnRpc2UuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBhcHBsaWVzIHRvIGN1cnJlbnQgcmVzZWFyY2gsIEkgd2lsbCBiZSBjb21wYXJpbmcgdG8gd2hhdCBJIGN1cnJlbnRseSBiZWxpZXZlIHRvIGJlIHRydWUgb24gdGhlIHRvcGljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlc2UgbGluZXMgcmV2ZWFsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NTpcdFx0fVxuIDc2NjpcdFxuIDc2NzpcdFx0aWYgKHBvcnQgPT0gUVJUUl9QT1JUX0NUUkwpXG4gNzY4Olx0XHRcdHBvcnQgPSAwO1xuIDc2OTpcdFxuIDc3MDpcdFx0eGFfZXJhc2UoXHUwMDI2cXJ0cl9wb3J0cywgcG9ydCk7XG4gNzcxOlx0XG4gNzcyOlx0XHQvKiBFbnN1cmUgdGhhdCBpZiBxcnRyX3BvcnRfbG9va3VwKCkgZGlkIGVudGVyIHRoZSBSQ1UgcmVhZCBzZWN0aW9uIHdlXG4gNzczOlx0XHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50XG4gNzc0Olx0XHQgKi9cbiA3NzU6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDc3NjpcdFxuIDc3NzpcdFx0X19zb2NrX3B1dChcdTAwMjZpcGMtXHUwMDNlc2spO1xuIDc3ODpcdH1cbiA3Nzk6XHRcbiA3ODA6XHQvKiBBc3NpZ24gcG9ydCBudW1iZXIgdG8gc29ja2V0LlxuIDc4MTpcdCAqXG4gNzgyOlx0ICogU3BlY2lmeSBwb3J0IGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcG9ydCwgYW5kIGl0IHdpbGwgYmUgYWRqdXN0ZWRcbiA3ODM6XHQgKiBvbiByZXR1cm4gYXMgbmVjZXNzc2FyeS5cbiA3ODQ6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gZm9jdXMgb24gbGluZXMgOTU1LTk3MC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIHRleHQuIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgaHlwb3RoZXNlcyBhYm91dCB3aGF0IHRob3NlIGxpbmVzIG1pZ2h0IGNvbnRhaW4uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgY2VydGFpbiBrZXkgY29uY2VwdHMgb3IgYXJndW1lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50LCBhbmQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyB0aGF0IHN1cHBvcnQgb3IgY2hhbGxlbmdlIHRob3NlIGFzc3VtcHRpb25zLiBJJiMzOTtsbCByZWFkIHdpdGggYSBjcml0aWNhbCBleWUsIGRpc3NlY3RpbmcgdGhlIGxhbmd1YWdlLCBhbmQgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYXV0aG9yJiMzOTtzIGNob2ljZXMgd2l0aGluIHRoYXQgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBzZWdtZW50IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHBpdm90YWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQsIGFuZCBteSBqb2IgaXMgdG8gZXh0cmFjdCB0aGUgY3JpdGljYWwgcG9pbnRzIGZvciBhbiBpbmZvcm1lZCBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU1Olx0XG4gOTU2Olx0XHRyZXR1cm4gMDtcbiA5NTc6XHR9XG4gOTU4Olx0XG4gOTU5Olx0c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIDk2MDpcdHtcbiA5NjE6XHRcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiA5NjI6XHRcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxuIDk2MzpcdFx0XHRcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0byk7XG4gOTY0Olx0XHRfX2xlMzIgcXJ0cl90eXBlID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0RBVEEpO1xuIDk2NTpcdFx0c3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLVx1MDAzZXNrKTtcbiA5NjY6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gOTY3Olx0XHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xuIDk2ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA5Njk6XHRcdHNpemVfdCBwbGVuO1xuIDk3MDpcdFx0dTMyIHR5cGU7XG4gOTcxOlx0XHRpbnQgcmM7XG4gOTcyOlx0XG4gOTczOlx0XHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgfihNU0dfRE9OVFdBSVQpKVxuIDk3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFFSVFIgTmFtZXNwYWNlIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUVJUUiBuYW1lc3BhY2UgaXMgaGFuZGxlZCwgYW5kIEkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEgd2hlcmUgdG8gc3RhcnQgZGlnZ2luZy4gTGV0JiMzOTtzIHplcm8gaW4gb24gYG5ldC9xcnRyL25zLmNgLiBNeSBndXQgc2F5cyB0aGF0IHRoZSBjb3JlIG5hbWVzcGFjZSBtYW5hZ2VtZW50IGlzIGxpa2VseSBjb25jZW50cmF0ZWQgc29tZXdoZXJlIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAxNzUgdGhyb3VnaCAxODcuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBjaGVjayBmb3IgcmVnaXN0cmF0aW9uLCBkZXJlZ2lzdHJhdGlvbiwgYW5kIGxvb2t1cCBmdW5jdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBsb2dpYyB0aGVyZSDigJMgdGhlIGhlYXJ0IG9mIGhvdyB0aGlzIG5hbWVzcGFjZSBpcyBkZWZpbmVkIGFuZCB1c2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRob3NlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NTpcdFxuIDE3NjpcdFx0bXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWRlc3Q7XG4gMTc3Olx0XHRtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpO1xuIDE3ODpcdFxuIDE3OTpcdFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gMTgwOlx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiAxODE6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4gMTgyOlx0fVxuIDE4MzpcdFxuIDE4NDpcdHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiAxODU6XHRcdFx0XHQgIGJvb2wgbmV3KVxuIDE4NjpcdHtcbiAxODc6XHRcdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbiAxODg6XHRcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuIDE4OTpcdFx0c3RydWN0IGt2ZWMgaXY7XG4gMTkwOlx0XHRpbnQgcmV0O1xuIDE5MTpcdFxuIDE5MjpcdFx0aXYuaW92X2Jhc2UgPSBcdTAwMjZwa3Q7XG4gMTkzOlx0XHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XG4gMTk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzQKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBjb3NtZXRpYyBpbXByb3ZlbWVudHMsIGxldCYjMzk7cyBjb25maXJtIHRoYXQuIEkmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZywgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNyaXRlcmlhLCBpdCBsb29rcyBsaWtlIGl0IGlzbiYjMzk7dC4gVGhlIHBhdGNoIGFmZmVjdHMgYGFmX3FydHIuY2AgYW5kIGBucy5jYCwgYnV0IGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbm9uLWZ1bmN0aW9uYWwuIFdlIGhhdmU6CgoxLiAgUmVmb3JtYXR0aW5nIG9mIG11bHRpLWxpbmUgY29tbWVudHMgaW4gYGFmX3FydHIuY2AgdG8gbWF0Y2gga2VybmVsIGNvZGluZyBzdHlsZS4gVGhpcyBpcyBwdXJlbHkgY29zbWV0aWMuCjIuICBBZGRpbmcgYSBzaW5nbGUgc3BhY2UgaW4gYSBwb2ludGVyIGNhc3QgYCh1OCopYCB0byBgKHU4ICopYCBpbiBgYWZfcXJ0ci5jYC4gQWdhaW4sIGp1c3Qgd2hpdGVzcGFjZS4KMy4gIEFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBsb2NhbCBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uIGBpbnQgKCplbnF1ZXVlX2ZuKSguLi4pYCBpbiBgcXJ0cl9zZW5kbXNnYCBpbiBgYWZfcXJ0ci5jYC4gVGhpcyBpbXByb3ZlcyByZWFkYWJpbGl0eSwgYnV0IGRvZXNuJiMzOTt0IGNoYW5nZSBjb21waWxlZCBjb2RlLgo0LiAgUmVtb3ZpbmcgYSByZWR1bmRhbnQgYHJldHVybjtgIHN0YXRlbWVudCBhdCB0aGUgdmVyeSBlbmQgb2YgYSBgdm9pZGAgZnVuY3Rpb24gKGBzZXJ2aWNlX2Fubm91bmNlX2RlbGApIGluIGBucy5jYC4gVGhpcyBpcyB0cml2aWFsIGFuZCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byBjaGVjayBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgY2F0ZWdvcmllcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBjb21tZW50cywgc3BhY2luZywgYW5kIG90aGVyICYjMzQ7bm9uLWV4ZWN1dGFibGUmIzM0OyBjb2RlIHF1YWxpZnkgZm9yIGEgbmVnYXRpdmUgcmVzdWx0LiBUaGlzIHBhdGNoIGNsZWFybHkgYWxpZ25zIHdpdGggdGhhdC4gVGhlcmUmIzM5O3Mgbm8gbW9kaWZpY2F0aW9uIG9mIGV4ZWN1dGFibGUgY29kZSBvciBsb2dpYywgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcywgbm8gbmV3IGFzc2VydGlvbnMsIG5vIHJlZmFjdG9yaW5nLgoKR2l2ZW4gdGhpcywgSSBhbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBtdXN0IGJlIHNldCB0byBgZmFsc2VgLgoKTm93LCBJIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVxdWlyZWQgZmllbGRzIGZvciBgc2V0LXJlc3VsdHNgOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBjb250YWlucyBvbmx5IGNvc21ldGljIGNvZGluZyBzdHlsZSBjaGFuZ2VzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcsIHBhcmFtZXRlciBuYW1lcyBpbiBhIGxvY2FsIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlLCBhbmQgcmVtb3ZhbCBvZiBhIHJlZHVuZGFudCBgcmV0dXJuO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKSB3aXRoIG5vIGNoYW5nZXMgdG8gZXhlY3V0YWJsZSBsb2dpYyBvciBjb21waWxlZCBjb2RlLgoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoKSSBjYW4gY29uZmlkZW50bHkgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29zbWV0aWMgc3R5bGUgY2xlYW51cHM6IG11bHRpLWxpbmUgY29tbWVudCBmb3JtYXR0aW5nIGFkanVzdG1lbnRzLCBzcGFjaW5nIGluIGEgcG9pbnRlciBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIGRlbGV0aW5nIGFuIHVubmVjZXNzYXJ5ICYjMzk7cmV0dXJuOyYjMzk7IHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJiMzOTtyZXR1cm47JiMzOTsgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBObyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWx0ZXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoxMC4wODUzNTg3MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1NjA4NTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvc21ldGljIHN0eWxlIGNsZWFudXBzOiBtdWx0aS1saW5lIGNvbW1lbnQgZm9ybWF0dGluZyBhZGp1c3RtZW50cywgc3BhY2luZyBpbiBhIHBvaW50ZXIgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCBkZWxldGluZyBhbiB1bm5lY2Vzc2FyeSAncmV0dXJuOycgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBObyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWx0ZXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjEwLjA4NTM2NDMzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTUxNDUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI0NTljNzZmMDI4OGJlMzUzYWJlYzdhZDMxZDMxOWQ1NDgzNTI1N2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTk6MTc6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcXG5AQCAtMzkzLDcgKzM5Myw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gXFx0fVxcbiBcXHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0XFxuLVxcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lICovXFxuK1xcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXFxuK1xcdCAqL1xcbiBcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY29uZmlybV9yeClcXG4gXFx0XFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQpO1xcbiBcXG5AQCAtNDcxLDcgKzQ3Miw3IEBAIGludCBxcnRyX2VuZHBvaW50X3Bvc3Qoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxcbiBcXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cXHUwMDNlY2I7XFxuIFxcbiBcXHQvKiBWZXJzaW9uIGZpZWxkIGluIHYxIGlzIGxpdHRsZSBlbmRpYW4sIHNvIHRoaXMgd29ya3MgZm9yIGJvdGggY2FzZXMgKi9cXG4tXFx0dmVyID0gKih1OCopZGF0YTtcXG4rXFx0dmVyID0gKih1OCAqKWRhdGE7XFxuIFxcbiBcXHRzd2l0Y2ggKHZlcikge1xcbiBcXHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XFxuQEAgLTc2OSw3ICs3NzAsOCBAQCBzdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcXG4gXFx0eGFfZXJhc2UoXFx1MDAyNnFydHJfcG9ydHMsIHBvcnQpO1xcbiBcXG4gXFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxcbi1cXHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50ICovXFxuK1xcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcXG4rXFx0ICovXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4gXFx0X19zb2NrX3B1dChcXHUwMDI2aXBjLVxcdTAwM2Vzayk7XFxuQEAgLTk1Nyw4ICs5NTksOCBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBhZGRyLCBtc2ctXFx1MDAzZW1zZ19uYW1lKTtcXG4tXFx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7XFxuK1xcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xcbiBcXHRfX2xlMzIgcXJ0cl90eXBlID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0RBVEEpO1xcbiBcXHRzdHJ1Y3QgcXJ0cl9zb2NrICppcGMgPSBxcnRyX3NrKHNvY2stXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXFxuaW5kZXggYmNiMDkwZWU3OWQ0OS4uYWFmNzdjN2Y1MDQ1YiAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9ucy5jXFxuKysrIGIvbmV0L3FydHIvbnMuY1xcbkBAIC0xNzksOCArMTc5LDYgQEAgc3RhdGljIHZvaWQgc2VydmljZV9hbm5vdW5jZV9kZWwoc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QsXFxuIFxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU5PREVWKVxcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcXFxuXFxcIik7XFxuLVxcbi1cXHRyZXR1cm47XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTEuNTQxNDU4MjEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTY5OTk3MzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29zbWV0aWMgc3R5bGUgY2xlYW51cHM6IG11bHRpLWxpbmUgY29tbWVudCBmb3JtYXR0aW5nIGFkanVzdG1lbnRzLCBzcGFjaW5nIGluIGEgcG9pbnRlciBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIGRlbGV0aW5nIGFuIHVubmVjZXNzYXJ5ICdyZXR1cm47JyBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIE5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbHRlcmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNDU5Yzc2ZjAyODhiZTM1M2FiZWM3YWQzMWQzMTlkNTQ4MzUyNTdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTk6MTc6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbmluZGV4IDc4MzQ3YzkzN2FmNzYuLjNmNGU1NmEzOTljNTEgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcbisrKyBiL25ldC9xcnRyL2FmX3FydHIuY1xuQEAgLTM5Myw3ICszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbitcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXG4rXHQgKi9cbiBcdGlmIChyYyBcdTAwMjZcdTAwMjYgY29uZmlybV9yeClcbiBcdFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0KTtcbiBcbkBAIC00NzEsNyArNDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbitcdHZlciA9ICoodTggKilkYXRhO1xuIFxuIFx0c3dpdGNoICh2ZXIpIHtcbiBcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcbkBAIC03NjksNyArNzcwLDggQEAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXG4gXHR4YV9lcmFzZShcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcbiBcbiBcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2Vcbi1cdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnQgKi9cbitcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbitcdCAqL1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRfX3NvY2tfcHV0KFx1MDAyNmlwYy1cdTAwM2Vzayk7XG5AQCAtOTU3LDggKzk1OSw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbi1cdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxuLVx0XHRcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7XG4rXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbitcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuIFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcbiBcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXG5pbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvbnMuY1xuKysrIGIvbmV0L3FydHIvbnMuY1xuQEAgLTE3OSw4ICsxNzksNiBAQCBzdGF0aWMgdm9pZCBzZXJ2aWNlX2Fubm91bmNlX2RlbChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdCxcbiBcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXG4gXHRcdHByX2VycihcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwiKTtcbi1cbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTEuNTQxNDU5NjQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTk3Njc4OTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBRUlRSIERpZmYqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIFFSVFIgcGF0Y2ggc2VyaWVzLiBMZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBkaWZmIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmlyc3QgZ2xhbmNlLlxuXG5GaXJzdCwgSSBzZWUgc29tZSBjaGFuZ2VzIGluIGBuZXQvcXJ0ci9hZl9xcnRyLmNgLiBUaGVyZSdzIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGFuZCB3aGl0ZXNwYWNlIGNsZWFudXAuIEkgYWxzbyBzZWUgYSBjaGFuZ2UgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIGhhcyB6ZXJvIGVmZmVjdCBvbiB0aGUgY29tcGlsZWQgY29kZS5cblxuSSB0aGVuIHNlZSBjaGFuZ2VzIGluIGBuZXQvcXJ0ci9ucy5jYCwgd2hpY2ggcmVtb3ZlIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgaW4gYSBgdm9pZGAgZnVuY3Rpb24uICBBZ2Fpbiwgbm8gaW1wYWN0IG9uIHRoZSBjb21waWxlZCByZXN1bHQuXG5cbkxvb2tpbmcgYXQgdGhlIHByb21wdCdzIG5lZ2F0aXZlIGNyaXRlcmlhLCAqYWxsKiBvZiB0aGVzZSBjaGFuZ2VzIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgXCJOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzXCIgY2F0ZWdvcnkuICBXZSd2ZSBnb3QgY29tbWVudCBtb2RpZmljYXRpb25zLCB3aGl0ZXNwYWNlIGNoYW5nZXMsIHZhcmlhYmxlIHBhcmFtZXRlciBuYW1lcyBpbiBmdW5jdGlvbiBwb2ludGVyLCBhbmQgcmVkdW5kYW50IGByZXR1cm47YCBzdGF0ZW1lbnRzLiBOb25lIG9mIHRoZXNlIGFmZmVjdCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcyBvZiB0aGUgZGlmZiwgSSBhbSBjb25maWRlbnQgaW4gZGVjbGFyaW5nIHRoYXQgdGhpcyBjaGFuZ2UgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTcuNTE4MjUxODYxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM5MTpcXHRcXHRcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbiAzOTI6XFx0XFx0XFx0XFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XFxuIDM5MzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzOTQ6XFx0XFx0fVxcbiAzOTU6XFx0XFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbiAzOTY6XFx0XFx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmVcXG4gMzk3OlxcdFxcdCAqL1xcbiAzOTg6XFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNvbmZpcm1fcngpXFxuIDM5OTpcXHRcXHRcXHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVxcdTAwM2VzcV9ub2RlLCB0by1cXHUwMDNlc3FfcG9ydCk7XFxuIDQwMDpcXHRcXG4gNDAxOlxcdFxcdGlmIChyYyA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbiA0MDI6XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdHJldHVybiByYztcXG4gNDA1OlxcdH1cXG4gNDA2OlxcdFxcbiA0MDc6XFx0LyogTG9va3VwIG5vZGUgYnkgaWQuXFxuIDQwODpcXHQgKlxcbiA0MDk6XFx0ICogY2FsbGVycyBtdXN0IHJlbGVhc2Ugd2l0aCBxcnRyX25vZGVfcmVsZWFzZSgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjE3LjUxODQ0MjkzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NzYxMjI0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBRUlRSIHN0dWZmIGlzIGhhbmRsZWQgYXQgdGhlIG5ldGxpbmsgbGV2ZWwuIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNydWNpYWwgZGF0YSBoYW5kbGluZyBzdGVwcy4gTGluZXMgNDY1LTQ4MCBpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCBzaG91bGQgZ2l2ZSBtZSBzb21lIGtleSBpbnNpZ2h0cyBpbnRvIHRoZSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbmV0bGluayBtZXNzYWdlIHByb2Nlc3NpbmcsIG1heWJlIHNvbWUgcGFja2V0IGZvcm1hdCBpbnRlcnByZXRhdGlvbnMsIG9yIHNvbWUgY29yZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYml0cy4gSSBhbnRpY2lwYXRlIGl0J2xsIHNoZWQgbGlnaHQgb24gaG93IGRhdGEgZ2V0cyBpbiBhbmQgb3V0IG9mIHRoZSBRUlRSIHNvY2tldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTkuMzk0NTY4Mzg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHRcXHRpZiAobGVuID09IDAgfHwgbGVuIFxcdTAwMjYgMylcXG4gNDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHRza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgbGVuLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gNDY5OlxcdFxcdGlmICghc2tiKVxcbiA0NzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLVxcdTAwM2VjYjtcXG4gNDczOlxcdFxcbiA0NzQ6XFx0XFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXFxuIDQ3NTpcXHRcXHR2ZXIgPSAqKHU4ICopZGF0YTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0c3dpdGNoICh2ZXIpIHtcXG4gNDc4OlxcdFxcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcXG4gNDc5OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKnYxKSlcXG4gNDgwOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiA0ODE6XFx0XFx0XFx0djEgPSBkYXRhO1xcbiA0ODI6XFx0XFx0XFx0aGRybGVuID0gc2l6ZW9mKCp2MSk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdFxcdGNiLVxcdTAwM2V0eXBlID0gbGUzMl90b19jcHUodjEtXFx1MDAzZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoxOS4zOTQ2NTQ2MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzEyNjU2MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgdGV4dCBhbmQgc3ludGhlc2l6ZSBpdHMga2V5IHRha2Vhd2F5cyBhcyBpZiB0aGV5IHdlcmUgbXkgb3duLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBpbXBsaWVkIGluc3RydWN0aW9uczpcblxuKipBbmFseXppbmcgdGhlIFJlbGV2YW50IFNlY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gemVyb2luZyBpbiBvbiBsaW5lcyA3NjUtNzgwLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIGNvcmUgYXJndW1lbnRzLCBhbnkgbm92ZWwgZGF0YSBvciBwZXJzcGVjdGl2ZXMsIGFuZCB0aGUgb3ZlcmFsbCBuYXJyYXRpdmUgZmxvdyBvZiB0aGlzIHNwZWNpZmljIHNlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBpbnRyb2R1Y2VkLCB3aGV0aGVyIGl0J3Mgc3VwcG9ydGluZyBldmlkZW5jZSwgYSBjb3VudGVyYXJndW1lbnQsIG9yIHBlcmhhcHMgYSBjb25jbHVkaW5nIHRob3VnaHQgZm9yIGEgc3BlY2lmaWMgcG9pbnQuIEknbGwgYmUgd2F0Y2hpbmcgY2xvc2VseSBmb3IgaG93IGl0IGNvbm5lY3RzIHRvIHRoZSBicm9hZGVyIHN1YmplY3QsIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgb21pc3Npb25zIG9yIGFyZWFzIHRoYXQgbmVlZCBmdXJ0aGVyIHNjcnV0aW55IGJhc2VkIG9uIG15IGV4cGVydGlzZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgYXBwbGllcyB0byBjdXJyZW50IHJlc2VhcmNoLCBJIHdpbGwgYmUgY29tcGFyaW5nIHRvIHdoYXQgSSBjdXJyZW50bHkgYmVsaWV2ZSB0byBiZSB0cnVlIG9uIHRoZSB0b3BpYy4gTGV0J3Mgc2VlIHdoYXQgdGhlc2UgbGluZXMgcmV2ZWFsLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjIxLjcwNzMxMzE3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjU6XFx0XFx0fVxcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRpZiAocG9ydCA9PSBRUlRSX1BPUlRfQ1RSTClcXG4gNzY4OlxcdFxcdFxcdHBvcnQgPSAwO1xcbiA3Njk6XFx0XFxuIDc3MDpcXHRcXHR4YV9lcmFzZShcXHUwMDI2cXJ0cl9wb3J0cywgcG9ydCk7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2VcXG4gNzczOlxcdFxcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcXG4gNzc0OlxcdFxcdCAqL1xcbiA3NzU6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDc3NjpcXHRcXG4gNzc3OlxcdFxcdF9fc29ja19wdXQoXFx1MDAyNmlwYy1cXHUwMDNlc2spO1xcbiA3Nzg6XFx0fVxcbiA3Nzk6XFx0XFxuIDc4MDpcXHQvKiBBc3NpZ24gcG9ydCBudW1iZXIgdG8gc29ja2V0LlxcbiA3ODE6XFx0ICpcXG4gNzgyOlxcdCAqIFNwZWNpZnkgcG9ydCBpbiB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHBvcnQsIGFuZCBpdCB3aWxsIGJlIGFkanVzdGVkXFxuIDc4MzpcXHQgKiBvbiByZXR1cm4gYXMgbmVjZXNzc2FyeS5cXG4gNzg0OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjIxLjcwNzQwOTY1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MTUwNzAzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyA5NTUtOTcwLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSB0ZXh0LiBNeSBtaW5kIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGh5cG90aGVzZXMgYWJvdXQgd2hhdCB0aG9zZSBsaW5lcyBtaWdodCBjb250YWluLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbnRpY2lwYXRpbmcgY2VydGFpbiBrZXkgY29uY2VwdHMgb3IgYXJndW1lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50LCBhbmQgSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgc3VwcG9ydCBvciBjaGFsbGVuZ2UgdGhvc2UgYXNzdW1wdGlvbnMuIEknbGwgcmVhZCB3aXRoIGEgY3JpdGljYWwgZXllLCBkaXNzZWN0aW5nIHRoZSBsYW5ndWFnZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGF1dGhvcidzIGNob2ljZXMgd2l0aGluIHRoYXQgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBzZWdtZW50IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHBpdm90YWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQsIGFuZCBteSBqb2IgaXMgdG8gZXh0cmFjdCB0aGUgY3JpdGljYWwgcG9pbnRzIGZvciBhbiBpbmZvcm1lZCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoyMy40MjI0ODI1OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHJldHVybiAwO1xcbiA5NTc6XFx0fVxcbiA5NTg6XFx0XFxuIDk1OTpcXHRzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuIDk2MDpcXHR7XFxuIDk2MTpcXHRcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIGFkZHIsIG1zZy1cXHUwMDNlbXNnX25hbWUpO1xcbiA5NjI6XFx0XFx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUsXFxuIDk2MzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xcbiA5NjQ6XFx0XFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcXG4gOTY1OlxcdFxcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cXHUwMDNlc2spO1xcbiA5NjY6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xcbiA5Njg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gOTY5OlxcdFxcdHNpemVfdCBwbGVuO1xcbiA5NzA6XFx0XFx0dTMyIHR5cGU7XFxuIDk3MTpcXHRcXHRpbnQgcmM7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IH4oTVNHX0RPTlRXQUlUKSlcXG4gOTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoyMy40MjI1ODI5NTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg3MDQyNzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUVJUUiBOYW1lc3BhY2UgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFFSVFIgbmFtZXNwYWNlIGlzIGhhbmRsZWQsIGFuZCBJIGhhdmUgYSBwcmV0dHkgZ29vZCBpZGVhIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCdzIHplcm8gaW4gb24gYG5ldC9xcnRyL25zLmNgLiBNeSBndXQgc2F5cyB0aGF0IHRoZSBjb3JlIG5hbWVzcGFjZSBtYW5hZ2VtZW50IGlzIGxpa2VseSBjb25jZW50cmF0ZWQgc29tZXdoZXJlIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDE3NSB0aHJvdWdoIDE4Ny4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gY2hlY2sgZm9yIHJlZ2lzdHJhdGlvbiwgZGVyZWdpc3RyYXRpb24sIGFuZCBsb29rdXAgZnVuY3Rpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBsb2dpYyB0aGVyZSDigJMgdGhlIGhlYXJ0IG9mIGhvdyB0aGlzIG5hbWVzcGFjZSBpcyBkZWZpbmVkIGFuZCB1c2VkLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhvc2UgbGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjI1LjI5MzAyMDg3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRtc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDtcXG4gMTc3OlxcdFxcdG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZigqZGVzdCk7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XFxuIDE4MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVilcXG4gMTgxOlxcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGFubm91bmNlIGRlbCBzZXJ2aWNlXFxcXG5cXFwiKTtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0c3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxcbiAxODU6XFx0XFx0XFx0XFx0ICBib29sIG5ldylcXG4gMTg2OlxcdHtcXG4gMTg3OlxcdFxcdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcXG4gMTg4OlxcdFxcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xcbiAxODk6XFx0XFx0c3RydWN0IGt2ZWMgaXY7XFxuIDE5MDpcXHRcXHRpbnQgcmV0O1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRpdi5pb3ZfYmFzZSA9IFxcdTAwMjZwa3Q7XFxuIDE5MzpcXHRcXHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XFxuIDE5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MjUuMjkzMTQ5NTIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NDgyNTM0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgY29zbWV0aWMgaW1wcm92ZW1lbnRzLCBsZXQncyBjb25maXJtIHRoYXQuIEkndmUgZ290IHRvIGRldGVybWluZSBpZiBpdCdzIHdvcnRoIGZ1enppbmcsIGFuZCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjcml0ZXJpYSwgaXQgbG9va3MgbGlrZSBpdCBpc24ndC4gVGhlIHBhdGNoIGFmZmVjdHMgYGFmX3FydHIuY2AgYW5kIGBucy5jYCwgYnV0IGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbm9uLWZ1bmN0aW9uYWwuIFdlIGhhdmU6XG5cbjEuICBSZWZvcm1hdHRpbmcgb2YgbXVsdGktbGluZSBjb21tZW50cyBpbiBgYWZfcXJ0ci5jYCB0byBtYXRjaCBrZXJuZWwgY29kaW5nIHN0eWxlLiBUaGlzIGlzIHB1cmVseSBjb3NtZXRpYy5cbjIuICBBZGRpbmcgYSBzaW5nbGUgc3BhY2UgaW4gYSBwb2ludGVyIGNhc3QgYCh1OCopYCB0byBgKHU4ICopYCBpbiBgYWZfcXJ0ci5jYC4gQWdhaW4sIGp1c3Qgd2hpdGVzcGFjZS5cbjMuICBBZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgbG9jYWwgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiBgaW50ICgqZW5xdWV1ZV9mbikoLi4uKWAgaW4gYHFydHJfc2VuZG1zZ2AgaW4gYGFmX3FydHIuY2AuIFRoaXMgaW1wcm92ZXMgcmVhZGFiaWxpdHksIGJ1dCBkb2Vzbid0IGNoYW5nZSBjb21waWxlZCBjb2RlLlxuNC4gIFJlbW92aW5nIGEgcmVkdW5kYW50IGByZXR1cm47YCBzdGF0ZW1lbnQgYXQgdGhlIHZlcnkgZW5kIG9mIGEgYHZvaWRgIGZ1bmN0aW9uIChgc2VydmljZV9hbm5vdW5jZV9kZWxgKSBpbiBgbnMuY2AuIFRoaXMgaXMgdHJpdmlhbCBhbmQgZG9lc24ndCBjaGFuZ2UgdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgZ28gb3ZlciB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byBjaGVjayBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgY2F0ZWdvcmllcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBjb21tZW50cywgc3BhY2luZywgYW5kIG90aGVyIFwibm9uLWV4ZWN1dGFibGVcIiBjb2RlIHF1YWxpZnkgZm9yIGEgbmVnYXRpdmUgcmVzdWx0LiBUaGlzIHBhdGNoIGNsZWFybHkgYWxpZ25zIHdpdGggdGhhdC4gVGhlcmUncyBubyBtb2RpZmljYXRpb24gb2YgZXhlY3V0YWJsZSBjb2RlIG9yIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gcmVmYWN0b3JpbmcuXG5cbkdpdmVuIHRoaXMsIEkgYW0gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2AgbXVzdCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuTm93LCBJIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVxdWlyZWQgZmllbGRzIGZvciBgc2V0LXJlc3VsdHNgOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBjb250YWlucyBvbmx5IGNvc21ldGljIGNvZGluZyBzdHlsZSBjaGFuZ2VzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcsIHBhcmFtZXRlciBuYW1lcyBpbiBhIGxvY2FsIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlLCBhbmQgcmVtb3ZhbCBvZiBhIHJlZHVuZGFudCBgcmV0dXJuO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKSB3aXRoIG5vIGNoYW5nZXMgdG8gZXhlY3V0YWJsZSBsb2dpYyBvciBjb21waWxlZCBjb2RlLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBcXFsgXVxuKiAgIGBFbmFibGVDb25maWdzYDogXFxbIF1cblxuSSBjYW4gY29uZmlkZW50bHkgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzQsIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzozMS4yNDE0MDY0NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJ3JldHVybjsnIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJ3JldHVybjsnIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzozMS4yNDE0MzM2OTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7wb6l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 18:34:40 +0000 UTC FinishedAt: 2026-09-13 19:17:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29zbWV0aWMgc3R5bGUgY2xlYW51cHM6IG11bHRpLWxpbmUgY29tbWVudCBmb3JtYXR0aW5nIGFkanVzdG1lbnRzLCBzcGFjaW5nIGluIGEgcG9pbnRlciBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIGRlbGV0aW5nIGFuIHVubmVjZXNzYXJ5ICYjMzk7cmV0dXJuOyYjMzk7IHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYjQ1OWM3NmYwMjg4YmUzNTNhYmVjN2FkMzFkMzE5ZDU0ODM1MjU3ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDE5OjE3OjA4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL2FmX3FydHIuYyBiL25ldC9xcnRyL2FmX3FydHIuY1xuaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL2FmX3FydHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3FydHIvYWZfcXJ0ci5jXG5AQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbiYjNDM7XHQgKiBjb25maXJtX3J4IGZsYWcgaWYgd2UgZHJvcHBlZCB0aGlzIG9uZVxuJiM0MztcdCAqL1xuIFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIFxuQEAgLTQ3MSw3ICYjNDM7NDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbiYjNDM7XHR2ZXIgPSAqKHU4ICopZGF0YTtcbiBcbiBcdHN3aXRjaCAodmVyKSB7XG4gXHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XG5AQCAtNzY5LDcgJiM0Mzs3NzAsOCBAQCBzdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcbiBcdHhhX2VyYXNlKFx1MDAyNnFydHJfcG9ydHMsIHBvcnQpO1xuIFxuIFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxuLVx0ICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqL1xuJiM0MztcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbiYjNDM7XHQgKi9cbiBcdHN5bmNocm9uaXplX3JjdSgpO1xuIFxuIFx0X19zb2NrX3B1dChcdTAwMjZpcGMtXHUwMDNlc2spO1xuQEAgLTk1Nyw4ICYjNDM7OTU5LDggQEAgc3RhdGljIGludCBxcnRyX2JjYXN0X2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXG4ge1xuIFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBhZGRyLCBtc2ctXHUwMDNlbXNnX25hbWUpO1xuLVx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsXG4tXHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqKTtcbiYjNDM7XHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZnJvbSwgc3RydWN0IHNvY2thZGRyX3FydHIgKnRvKTtcbiBcdF9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7XG4gXHRzdHJ1Y3QgcXJ0cl9zb2NrICppcGMgPSBxcnRyX3NrKHNvY2stXHUwMDNlc2spO1xuIFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cdTAwM2VzaztcbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuY1xuaW5kZXggYmNiMDkwZWU3OWQ0OS4uYWFmNzdjN2Y1MDQ1YiAxMDA2NDRcbi0tLSBhL25ldC9xcnRyL25zLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmNcbkBAIC0xNzksOCAmIzQzOzE3OSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZpY2VfYW5ub3VuY2VfZGVsKHN0cnVjdCBzb2NrYWRkcl9xcnRyICpkZXN0LFxuIFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gXHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiBcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4tXG4tXHRyZXR1cm47XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJiMzOTtyZXR1cm47JiMzOTsgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBObyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWx0ZXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBiNDU5Yzc2ZjAyODhiZTM1M2FiZWM3YWQzMWQzMTlkNTQ4MzUyNTdkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTk6MTc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmMKaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDQKLS0tIGEvbmV0L3FydHIvYWZfcXJ0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL2FmX3FydHIuYwpAQCAtMzkzLDcgJiM0MzszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCW11dGV4X3VubG9jaygmYW1wO25vZGUtJmd0O2VwX2xvY2spOwogCX0KIAkvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0Ci0JICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi8KJiM0MzsJICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUKJiM0MzsJICovCiAJaWYgKHJjICZhbXA7JmFtcDsgY29uZmlybV9yeCkKIAkJcXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by0mZ3Q7c3Ffbm9kZSwgdG8tJmd0O3NxX3BvcnQpOwogCkBAIC00NzEsNyAmIzQzOzQ3Miw3IEBAIGludCBxcnRyX2VuZHBvaW50X3Bvc3Qoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKQogCWNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLSZndDtjYjsKIAogCS8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqLwotCXZlciA9ICoodTgqKWRhdGE7CiYjNDM7CXZlciA9ICoodTggKilkYXRhOwogCiAJc3dpdGNoICh2ZXIpIHsKIAljYXNlIFFSVFJfUFJPVE9fVkVSXzE6CkBAIC03NjksNyAmIzQzOzc3MCw4IEBAIHN0YXRpYyB2b2lkIHFydHJfcG9ydF9yZW1vdmUoc3RydWN0IHFydHJfc29jayAqaXBjKQogCXhhX2VyYXNlKCZhbXA7cXJ0cl9wb3J0cywgcG9ydCk7CiAKIAkvKiBFbnN1cmUgdGhhdCBpZiBxcnRyX3BvcnRfbG9va3VwKCkgZGlkIGVudGVyIHRoZSBSQ1UgcmVhZCBzZWN0aW9uIHdlCi0JICogd2FpdCBmb3IgaXQgdG8gdXAgaW5jcmVtZW50IHRoZSByZWZjb3VudCAqLwomIzQzOwkgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50CiYjNDM7CSAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJX19zb2NrX3B1dCgmYW1wO2lwYy0mZ3Q7c2spOwpAQCAtOTU3LDggJiM0Mzs5NTksOCBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKQogewogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLSZndDttc2dfbmFtZSk7Ci0JaW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsCi0JCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIHN0cnVjdCBzb2NrYWRkcl9xcnRyICopOwomIzQzOwlpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSwKJiM0MzsJCQkgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pOwogCV9fbGUzMiBxcnRyX3R5cGUgPSBjcHVfdG9fbGUzMihRUlRSX1RZUEVfREFUQSk7CiAJc3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLSZndDtzayk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0mZ3Q7c2s7CmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9ucy5jIGIvbmV0L3FydHIvbnMuYwppbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NAotLS0gYS9uZXQvcXJ0ci9ucy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9xcnRyL25zLmMKQEAgLTE3OSw4ICYjNDM7MTc5LDYgQEAgc3RhdGljIHZvaWQgc2VydmljZV9hbm5vdW5jZV9kZWwoc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QsCiAJcmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCAmYW1wO21zZywgJmFtcDtpdiwgMSwgc2l6ZW9mKHBrdCkpOwogCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ICE9IC1FTk9ERVYpCiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxuJiMzNDspOwotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBsb29rdXBfbm90aWZ5KHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0bywgc3RydWN0IHFydHJfc2VydmVyICpzcnYsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxODA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb246IFFSVFIgRGlmZioqCgpPa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIFFSVFIgcGF0Y2ggc2VyaWVzLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGlmZiBsb29rcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGF0IGZpcnN0IGdsYW5jZS4KCkZpcnN0LCBJIHNlZSBzb21lIGNoYW5nZXMgaW4gYG5ldC9xcnRyL2FmX3FydHIuY2AuIFRoZXJlJiMzOTtzIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGFuZCB3aGl0ZXNwYWNlIGNsZWFudXAuIEkgYWxzbyBzZWUgYSBjaGFuZ2UgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIGhhcyB6ZXJvIGVmZmVjdCBvbiB0aGUgY29tcGlsZWQgY29kZS4KCkkgdGhlbiBzZWUgY2hhbmdlcyBpbiBgbmV0L3FydHIvbnMuY2AsIHdoaWNoIHJlbW92ZSBhIHJlZHVuZGFudCByZXR1cm4gc3RhdGVtZW50IGluIGEgYHZvaWRgIGZ1bmN0aW9uLiAgQWdhaW4sIG5vIGltcGFjdCBvbiB0aGUgY29tcGlsZWQgcmVzdWx0LgoKTG9va2luZyBhdCB0aGUgcHJvbXB0JiMzOTtzIG5lZ2F0aXZlIGNyaXRlcmlhLCAqYWxsKiBvZiB0aGVzZSBjaGFuZ2VzIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgJiMzNDtOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzJiMzNDsgY2F0ZWdvcnkuICBXZSYjMzk7dmUgZ290IGNvbW1lbnQgbW9kaWZpY2F0aW9ucywgd2hpdGVzcGFjZSBjaGFuZ2VzLCB2YXJpYWJsZSBwYXJhbWV0ZXIgbmFtZXMgaW4gZnVuY3Rpb24gcG9pbnRlciwgYW5kIHJlZHVuZGFudCBgcmV0dXJuO2Agc3RhdGVtZW50cy4gTm9uZSBvZiB0aGVzZSBhZmZlY3QgY29udHJvbCBmbG93LCBkYXRhIHN0cnVjdHVyZXMsIG9yIHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzIG9mIHRoZSBkaWZmLCBJIGFtIGNvbmZpZGVudCBpbiBkZWNsYXJpbmcgdGhhdCB0aGlzIGNoYW5nZSBpcyBub3Qgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzkwOlx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gMzkxOlx0XHRcdGlmICghcmMgXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuIDM5MjpcdFx0XHRcdG5vZGUtXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XG4gMzkzOlx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIDM5NDpcdFx0fVxuIDM5NTpcdFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuIDM5NjpcdFx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmVcbiAzOTc6XHRcdCAqL1xuIDM5ODpcdFx0aWYgKHJjIFx1MDAyNlx1MDAyNiBjb25maXJtX3J4KVxuIDM5OTpcdFx0XHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVx1MDAzZXNxX25vZGUsIHRvLVx1MDAzZXNxX3BvcnQpO1xuIDQwMDpcdFxuIDQwMTpcdFx0aWYgKHJjID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxuIDQwMjpcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bm9kZS1cdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XG4gNDAzOlx0XG4gNDA0Olx0XHRyZXR1cm4gcmM7XG4gNDA1Olx0fVxuIDQwNjpcdFxuIDQwNzpcdC8qIExvb2t1cCBub2RlIGJ5IGlkLlxuIDQwODpcdCAqXG4gNDA5Olx0ICogY2FsbGVycyBtdXN0IHJlbGVhc2Ugd2l0aCBxcnRyX25vZGVfcmVsZWFzZSgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OgoKKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgUVJUUiBzdHVmZiBpcyBoYW5kbGVkIGF0IHRoZSBuZXRsaW5rIGxldmVsLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgcmlnaHQgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNydWNpYWwgZGF0YSBoYW5kbGluZyBzdGVwcy4gTGluZXMgNDY1LTQ4MCBpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCBzaG91bGQgZ2l2ZSBtZSBzb21lIGtleSBpbnNpZ2h0cyBpbnRvIHRoZSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuLi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbmV0bGluayBtZXNzYWdlIHByb2Nlc3NpbmcsIG1heWJlIHNvbWUgcGFja2V0IGZvcm1hdCBpbnRlcnByZXRhdGlvbnMsIG9yIHNvbWUgY29yZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYml0cy4gSSBhbnRpY2lwYXRlIGl0JiMzOTtsbCBzaGVkIGxpZ2h0IG9uIGhvdyBkYXRhIGdldHMgaW4gYW5kIG91dCBvZiB0aGUgUVJUUiBzb2NrZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ2NTpcdFx0aWYgKGxlbiA9PSAwIHx8IGxlbiBcdTAwMjYgMylcbiA0NjY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNDY3Olx0XG4gNDY4Olx0XHRza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgbGVuLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcbiA0Njk6XHRcdGlmICghc2tiKVxuIDQ3MDpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0NzE6XHRcbiA0NzI6XHRcdGNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLVx1MDAzZWNiO1xuIDQ3MzpcdFxuIDQ3NDpcdFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXG4gNDc1Olx0XHR2ZXIgPSAqKHU4ICopZGF0YTtcbiA0NzY6XHRcbiA0Nzc6XHRcdHN3aXRjaCAodmVyKSB7XG4gNDc4Olx0XHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XG4gNDc5Olx0XHRcdGlmIChsZW4gXHUwMDNjIHNpemVvZigqdjEpKVxuIDQ4MDpcdFx0XHRcdGdvdG8gZXJyO1xuIDQ4MTpcdFx0XHR2MSA9IGRhdGE7XG4gNDgyOlx0XHRcdGhkcmxlbiA9IHNpemVvZigqdjEpO1xuIDQ4MzpcdFxuIDQ4NDpcdFx0XHRjYi1cdTAwM2V0eXBlID0gbGUzMl90b19jcHUodjEtXHUwMDNldHlwZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU0NAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBJJiMzOTttIHJlYWR5IHRvIGRpdmUgaW50byB0aGF0IHRleHQgYW5kIHN5bnRoZXNpemUgaXRzIGtleSB0YWtlYXdheXMgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBpbXBsaWVkIGluc3RydWN0aW9uczoKCioqQW5hbHl6aW5nIHRoZSBSZWxldmFudCBTZWN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyA3NjUtNzgwLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJiMzOTttIGltbWVkaWF0ZWx5IGxvb2tpbmcgZm9yIHRoZSBjb3JlIGFyZ3VtZW50cywgYW55IG5vdmVsIGRhdGEgb3IgcGVyc3BlY3RpdmVzLCBhbmQgdGhlIG92ZXJhbGwgbmFycmF0aXZlIGZsb3cgb2YgdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGludHJvZHVjZWQsIHdoZXRoZXIgaXQmIzM5O3Mgc3VwcG9ydGluZyBldmlkZW5jZSwgYSBjb3VudGVyYXJndW1lbnQsIG9yIHBlcmhhcHMgYSBjb25jbHVkaW5nIHRob3VnaHQgZm9yIGEgc3BlY2lmaWMgcG9pbnQuIEkmIzM5O2xsIGJlIHdhdGNoaW5nIGNsb3NlbHkgZm9yIGhvdyBpdCBjb25uZWN0cyB0byB0aGUgYnJvYWRlciBzdWJqZWN0LCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIG9taXNzaW9ucyBvciBhcmVhcyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueSBiYXNlZCBvbiBteSBleHBlcnRpc2UuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBhcHBsaWVzIHRvIGN1cnJlbnQgcmVzZWFyY2gsIEkgd2lsbCBiZSBjb21wYXJpbmcgdG8gd2hhdCBJIGN1cnJlbnRseSBiZWxpZXZlIHRvIGJlIHRydWUgb24gdGhlIHRvcGljLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlc2UgbGluZXMgcmV2ZWFsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvcXJ0ci9hZl9xcnRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc2NTpcdFx0fVxuIDc2NjpcdFxuIDc2NzpcdFx0aWYgKHBvcnQgPT0gUVJUUl9QT1JUX0NUUkwpXG4gNzY4Olx0XHRcdHBvcnQgPSAwO1xuIDc2OTpcdFxuIDc3MDpcdFx0eGFfZXJhc2UoXHUwMDI2cXJ0cl9wb3J0cywgcG9ydCk7XG4gNzcxOlx0XG4gNzcyOlx0XHQvKiBFbnN1cmUgdGhhdCBpZiBxcnRyX3BvcnRfbG9va3VwKCkgZGlkIGVudGVyIHRoZSBSQ1UgcmVhZCBzZWN0aW9uIHdlXG4gNzczOlx0XHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50XG4gNzc0Olx0XHQgKi9cbiA3NzU6XHRcdHN5bmNocm9uaXplX3JjdSgpO1xuIDc3NjpcdFxuIDc3NzpcdFx0X19zb2NrX3B1dChcdTAwMjZpcGMtXHUwMDNlc2spO1xuIDc3ODpcdH1cbiA3Nzk6XHRcbiA3ODA6XHQvKiBBc3NpZ24gcG9ydCBudW1iZXIgdG8gc29ja2V0LlxuIDc4MTpcdCAqXG4gNzgyOlx0ICogU3BlY2lmeSBwb3J0IGluIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcG9ydCwgYW5kIGl0IHdpbGwgYmUgYWRqdXN0ZWRcbiA3ODM6XHQgKiBvbiByZXR1cm4gYXMgbmVjZXNzc2FyeS5cbiA3ODQ6XHQgKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0JiMzOTtzIHNlZS4uLiBJIG5lZWQgdG8gZm9jdXMgb24gbGluZXMgOTU1LTk3MC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGF0IHNwZWNpZmljIHNlY3Rpb24gb2YgdGhlIHRleHQuIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgaHlwb3RoZXNlcyBhYm91dCB3aGF0IHRob3NlIGxpbmVzIG1pZ2h0IGNvbnRhaW4uIEdpdmVuIG15IGV4cGVydGlzZSwgSSYjMzk7bSBhbnRpY2lwYXRpbmcgY2VydGFpbiBrZXkgY29uY2VwdHMgb3IgYXJndW1lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50LCBhbmQgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgbnVhbmNlcyB0aGF0IHN1cHBvcnQgb3IgY2hhbGxlbmdlIHRob3NlIGFzc3VtcHRpb25zLiBJJiMzOTtsbCByZWFkIHdpdGggYSBjcml0aWNhbCBleWUsIGRpc3NlY3RpbmcgdGhlIGxhbmd1YWdlLCBhbmQgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgYXV0aG9yJiMzOTtzIGNob2ljZXMgd2l0aGluIHRoYXQgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBzZWdtZW50IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHBpdm90YWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQsIGFuZCBteSBqb2IgaXMgdG8gZXh0cmFjdCB0aGUgY3JpdGljYWwgcG9pbnRzIGZvciBhbiBpbmZvcm1lZCBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL2FmX3FydHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTU1Olx0XG4gOTU2Olx0XHRyZXR1cm4gMDtcbiA5NTc6XHR9XG4gOTU4Olx0XG4gOTU5Olx0c3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIDk2MDpcdHtcbiA5NjE6XHRcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbiA5NjI6XHRcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxuIDk2MzpcdFx0XHRcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKmZyb20sIHN0cnVjdCBzb2NrYWRkcl9xcnRyICp0byk7XG4gOTY0Olx0XHRfX2xlMzIgcXJ0cl90eXBlID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0RBVEEpO1xuIDk2NTpcdFx0c3RydWN0IHFydHJfc29jayAqaXBjID0gcXJ0cl9zayhzb2NrLVx1MDAzZXNrKTtcbiA5NjY6XHRcdHN0cnVjdCBzb2NrICpzayA9IHNvY2stXHUwMDNlc2s7XG4gOTY3Olx0XHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xuIDk2ODpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcbiA5Njk6XHRcdHNpemVfdCBwbGVuO1xuIDk3MDpcdFx0dTMyIHR5cGU7XG4gOTcxOlx0XHRpbnQgcmM7XG4gOTcyOlx0XG4gOTczOlx0XHRpZiAobXNnLVx1MDAzZW1zZ19mbGFncyBcdTAwMjYgfihNU0dfRE9OVFdBSVQpKVxuIDk3NDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTk6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gdGhlIFFSVFIgTmFtZXNwYWNlIENvZGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgUVJUUiBuYW1lc3BhY2UgaXMgaGFuZGxlZCwgYW5kIEkgaGF2ZSBhIHByZXR0eSBnb29kIGlkZWEgd2hlcmUgdG8gc3RhcnQgZGlnZ2luZy4gTGV0JiMzOTtzIHplcm8gaW4gb24gYG5ldC9xcnRyL25zLmNgLiBNeSBndXQgc2F5cyB0aGF0IHRoZSBjb3JlIG5hbWVzcGFjZSBtYW5hZ2VtZW50IGlzIGxpa2VseSBjb25jZW50cmF0ZWQgc29tZXdoZXJlIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBvbiBsaW5lcyAxNzUgdGhyb3VnaCAxODcuIFRoYXQmIzM5O3MgdXN1YWxseSBhIGdvb2Qgc3BvdCB0byBjaGVjayBmb3IgcmVnaXN0cmF0aW9uLCBkZXJlZ2lzdHJhdGlvbiwgYW5kIGxvb2t1cCBmdW5jdGlvbnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBsb2dpYyB0aGVyZSDigJMgdGhlIGhlYXJ0IG9mIGhvdyB0aGlzIG5hbWVzcGFjZSBpcyBkZWZpbmVkIGFuZCB1c2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZ2VtcyBhcmUgaGlkZGVuIGluIHRob3NlIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxOToxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9xcnRyL25zLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3NTpcdFxuIDE3NjpcdFx0bXNnLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWRlc3Q7XG4gMTc3Olx0XHRtc2cubXNnX25hbWVsZW4gPSBzaXplb2YoKmRlc3QpO1xuIDE3ODpcdFxuIDE3OTpcdFx0cmV0ID0ga2VybmVsX3NlbmRtc2cocXJ0cl9ucy5zb2NrLCBcdTAwMjZtc2csIFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XG4gMTgwOlx0XHRpZiAocmV0IFx1MDAzYyAwIFx1MDAyNlx1MDAyNiByZXQgIT0gLUVOT0RFVilcbiAxODE6XHRcdFx0cHJfZXJyKFwmIzM0O2ZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwmIzM0Oyk7XG4gMTgyOlx0fVxuIDE4MzpcdFxuIDE4NDpcdHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcbiAxODU6XHRcdFx0XHQgIGJvb2wgbmV3KVxuIDE4NjpcdHtcbiAxODc6XHRcdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcbiAxODg6XHRcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xuIDE4OTpcdFx0c3RydWN0IGt2ZWMgaXY7XG4gMTkwOlx0XHRpbnQgcmV0O1xuIDE5MTpcdFxuIDE5MjpcdFx0aXYuaW92X2Jhc2UgPSBcdTAwMjZwa3Q7XG4gMTkzOlx0XHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XG4gMTk0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzQKCQkJCQkJCW91dHB1dDogOTIKCQkJCQkJCXRob3VnaHRzOiA2NDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBjb3NtZXRpYyBpbXByb3ZlbWVudHMsIGxldCYjMzk7cyBjb25maXJtIHRoYXQuIEkmIzM5O3ZlIGdvdCB0byBkZXRlcm1pbmUgaWYgaXQmIzM5O3Mgd29ydGggZnV6emluZywgYW5kIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNyaXRlcmlhLCBpdCBsb29rcyBsaWtlIGl0IGlzbiYjMzk7dC4gVGhlIHBhdGNoIGFmZmVjdHMgYGFmX3FydHIuY2AgYW5kIGBucy5jYCwgYnV0IGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbm9uLWZ1bmN0aW9uYWwuIFdlIGhhdmU6CgoxLiAgUmVmb3JtYXR0aW5nIG9mIG11bHRpLWxpbmUgY29tbWVudHMgaW4gYGFmX3FydHIuY2AgdG8gbWF0Y2gga2VybmVsIGNvZGluZyBzdHlsZS4gVGhpcyBpcyBwdXJlbHkgY29zbWV0aWMuCjIuICBBZGRpbmcgYSBzaW5nbGUgc3BhY2UgaW4gYSBwb2ludGVyIGNhc3QgYCh1OCopYCB0byBgKHU4ICopYCBpbiBgYWZfcXJ0ci5jYC4gQWdhaW4sIGp1c3Qgd2hpdGVzcGFjZS4KMy4gIEFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBsb2NhbCBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uIGBpbnQgKCplbnF1ZXVlX2ZuKSguLi4pYCBpbiBgcXJ0cl9zZW5kbXNnYCBpbiBgYWZfcXJ0ci5jYC4gVGhpcyBpbXByb3ZlcyByZWFkYWJpbGl0eSwgYnV0IGRvZXNuJiMzOTt0IGNoYW5nZSBjb21waWxlZCBjb2RlLgo0LiAgUmVtb3ZpbmcgYSByZWR1bmRhbnQgYHJldHVybjtgIHN0YXRlbWVudCBhdCB0aGUgdmVyeSBlbmQgb2YgYSBgdm9pZGAgZnVuY3Rpb24gKGBzZXJ2aWNlX2Fubm91bmNlX2RlbGApIGluIGBucy5jYC4gVGhpcyBpcyB0cml2aWFsIGFuZCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW9yLgoKTm93LCBsZXQmIzM5O3MgZ28gb3ZlciB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byBjaGVjayBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgY2F0ZWdvcmllcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBjb21tZW50cywgc3BhY2luZywgYW5kIG90aGVyICYjMzQ7bm9uLWV4ZWN1dGFibGUmIzM0OyBjb2RlIHF1YWxpZnkgZm9yIGEgbmVnYXRpdmUgcmVzdWx0LiBUaGlzIHBhdGNoIGNsZWFybHkgYWxpZ25zIHdpdGggdGhhdC4gVGhlcmUmIzM5O3Mgbm8gbW9kaWZpY2F0aW9uIG9mIGV4ZWN1dGFibGUgY29kZSBvciBsb2dpYywgZGF0YSBzdHJ1Y3R1cmUgY2hhbmdlcywgbm8gbmV3IGFzc2VydGlvbnMsIG5vIHJlZmFjdG9yaW5nLgoKR2l2ZW4gdGhpcywgSSBhbSBjb25maWRlbnQgdGhhdCBgV29ydGhGdXp6aW5nYCBtdXN0IGJlIHNldCB0byBgZmFsc2VgLgoKTm93LCBJIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVxdWlyZWQgZmllbGRzIGZvciBgc2V0LXJlc3VsdHNgOgoKKiAgIGBXb3J0aEZ1enppbmdgOiBmYWxzZQoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBjb250YWlucyBvbmx5IGNvc21ldGljIGNvZGluZyBzdHlsZSBjaGFuZ2VzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcsIHBhcmFtZXRlciBuYW1lcyBpbiBhIGxvY2FsIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlLCBhbmQgcmVtb3ZhbCBvZiBhIHJlZHVuZGFudCBgcmV0dXJuO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKSB3aXRoIG5vIGNoYW5nZXMgdG8gZXhlY3V0YWJsZSBsb2dpYyBvciBjb21waWxlZCBjb2RlLgoqICAgYEZvY3VzU3ltYm9sc2A6IFxbIF0KKiAgIGBFbmFibGVDb25maWdzYDogXFsgXQoKSSBjYW4gY29uZmlkZW50bHkgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29zbWV0aWMgc3R5bGUgY2xlYW51cHM6IG11bHRpLWxpbmUgY29tbWVudCBmb3JtYXR0aW5nIGFkanVzdG1lbnRzLCBzcGFjaW5nIGluIGEgcG9pbnRlciBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIGRlbGV0aW5nIGFuIHVubmVjZXNzYXJ5ICYjMzk7cmV0dXJuOyYjMzk7IHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJiMzOTtyZXR1cm47JiMzOTsgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBObyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWx0ZXJlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDE5OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoxMC4wODUzNTg3MzdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE1NjA4NTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvc21ldGljIHN0eWxlIGNsZWFudXBzOiBtdWx0aS1saW5lIGNvbW1lbnQgZm9ybWF0dGluZyBhZGp1c3RtZW50cywgc3BhY2luZyBpbiBhIHBvaW50ZXIgY2FzdCwgYWRkaW5nIHBhcmFtZXRlciBuYW1lcyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgZGVjbGFyYXRpb24sIGFuZCBkZWxldGluZyBhbiB1bm5lY2Vzc2FyeSAncmV0dXJuOycgc3RhdGVtZW50IGF0IHRoZSBlbmQgb2YgYSB2b2lkIGZ1bmN0aW9uLiBObyBleGVjdXRhYmxlIGxvZ2ljLCBjb250cm9sIGZsb3csIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgYWx0ZXJlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjEwLjA4NTM2NDMzN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1NTUxNDUyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGI0NTljNzZmMDI4OGJlMzUzYWJlYzdhZDMxZDMxOWQ1NDgzNTI1N2RcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBTZXAgMTMgMTk6MTc6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3FydHIvYWZfcXJ0ci5jIGIvbmV0L3FydHIvYWZfcXJ0ci5jXFxuaW5kZXggNzgzNDdjOTM3YWY3Ni4uM2Y0ZTU2YTM5OWM1MSAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcXG4rKysgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcXG5AQCAtMzkzLDcgKzM5Myw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9ub2RlX2VucXVldWUoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZub2RlLVxcdTAwM2VlcF9sb2NrKTtcXG4gXFx0fVxcbiBcXHQvKiBOZWVkIHRvIGVuc3VyZSB0aGF0IGEgc3Vic2VxdWVudCBtZXNzYWdlIGNhcnJpZXMgdGhlIG90aGVyd2lzZSBsb3N0XFxuLVxcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lICovXFxuK1xcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXFxuK1xcdCAqL1xcbiBcXHRpZiAocmMgXFx1MDAyNlxcdTAwMjYgY29uZmlybV9yeClcXG4gXFx0XFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cXHUwMDNlc3Ffbm9kZSwgdG8tXFx1MDAzZXNxX3BvcnQpO1xcbiBcXG5AQCAtNDcxLDcgKzQ3Miw3IEBAIGludCBxcnRyX2VuZHBvaW50X3Bvc3Qoc3RydWN0IHFydHJfZW5kcG9pbnQgKmVwLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKVxcbiBcXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cXHUwMDNlY2I7XFxuIFxcbiBcXHQvKiBWZXJzaW9uIGZpZWxkIGluIHYxIGlzIGxpdHRsZSBlbmRpYW4sIHNvIHRoaXMgd29ya3MgZm9yIGJvdGggY2FzZXMgKi9cXG4tXFx0dmVyID0gKih1OCopZGF0YTtcXG4rXFx0dmVyID0gKih1OCAqKWRhdGE7XFxuIFxcbiBcXHRzd2l0Y2ggKHZlcikge1xcbiBcXHRjYXNlIFFSVFJfUFJPVE9fVkVSXzE6XFxuQEAgLTc2OSw3ICs3NzAsOCBAQCBzdGF0aWMgdm9pZCBxcnRyX3BvcnRfcmVtb3ZlKHN0cnVjdCBxcnRyX3NvY2sgKmlwYylcXG4gXFx0eGFfZXJhc2UoXFx1MDAyNnFydHJfcG9ydHMsIHBvcnQpO1xcbiBcXG4gXFx0LyogRW5zdXJlIHRoYXQgaWYgcXJ0cl9wb3J0X2xvb2t1cCgpIGRpZCBlbnRlciB0aGUgUkNVIHJlYWQgc2VjdGlvbiB3ZVxcbi1cXHQgKiB3YWl0IGZvciBpdCB0byB1cCBpbmNyZW1lbnQgdGhlIHJlZmNvdW50ICovXFxuK1xcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcXG4rXFx0ICovXFxuIFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbiBcXG4gXFx0X19zb2NrX3B1dChcXHUwMDI2aXBjLVxcdTAwM2Vzayk7XFxuQEAgLTk1Nyw4ICs5NTksOCBAQCBzdGF0aWMgaW50IHFydHJfYmNhc3RfZW5xdWV1ZShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuIHtcXG4gXFx0REVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqLCBhZGRyLCBtc2ctXFx1MDAzZW1zZ19uYW1lKTtcXG4tXFx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqLCBpbnQsXFxuLVxcdFxcdFxcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7XFxuK1xcdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsIGludCB0eXBlLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xcbiBcXHRfX2xlMzIgcXJ0cl90eXBlID0gY3B1X3RvX2xlMzIoUVJUUl9UWVBFX0RBVEEpO1xcbiBcXHRzdHJ1Y3QgcXJ0cl9zb2NrICppcGMgPSBxcnRyX3NrKHNvY2stXFx1MDAzZXNrKTtcXG4gXFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXFxuaW5kZXggYmNiMDkwZWU3OWQ0OS4uYWFmNzdjN2Y1MDQ1YiAxMDA2NDRcXG4tLS0gYS9uZXQvcXJ0ci9ucy5jXFxuKysrIGIvbmV0L3FydHIvbnMuY1xcbkBAIC0xNzksOCArMTc5LDYgQEAgc3RhdGljIHZvaWQgc2VydmljZV9hbm5vdW5jZV9kZWwoc3RydWN0IHNvY2thZGRyX3FydHIgKmRlc3QsXFxuIFxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAtRU5PREVWKVxcbiBcXHRcXHRwcl9lcnIoXFxcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcXFxuXFxcIik7XFxuLVxcbi1cXHRyZXR1cm47XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGxvb2t1cF9ub3RpZnkoc3RydWN0IHNvY2thZGRyX3FydHIgKnRvLCBzdHJ1Y3QgcXJ0cl9zZXJ2ZXIgKnNydixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTEuNTQxNDU4MjEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTY5OTk3MzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uc2lzdHMgZW50aXJlbHkgb2YgY29zbWV0aWMgc3R5bGUgY2xlYW51cHM6IG11bHRpLWxpbmUgY29tbWVudCBmb3JtYXR0aW5nIGFkanVzdG1lbnRzLCBzcGFjaW5nIGluIGEgcG9pbnRlciBjYXN0LCBhZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiwgYW5kIGRlbGV0aW5nIGFuIHVubmVjZXNzYXJ5ICdyZXR1cm47JyBzdGF0ZW1lbnQgYXQgdGhlIGVuZCBvZiBhIHZvaWQgZnVuY3Rpb24uIE5vIGV4ZWN1dGFibGUgbG9naWMsIGNvbnRyb2wgZmxvdywgb3IgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbHRlcmVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiNDU5Yzc2ZjAyODhiZTM1M2FiZWM3YWQzMWQzMTlkNTQ4MzUyNTdkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTk6MTc6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvcXJ0ci9hZl9xcnRyLmMgYi9uZXQvcXJ0ci9hZl9xcnRyLmNcbmluZGV4IDc4MzQ3YzkzN2FmNzYuLjNmNGU1NmEzOTljNTEgMTAwNjQ0XG4tLS0gYS9uZXQvcXJ0ci9hZl9xcnRyLmNcbisrKyBiL25ldC9xcnRyL2FmX3FydHIuY1xuQEAgLTM5Myw3ICszOTMsOCBAQCBzdGF0aWMgaW50IHFydHJfbm9kZV9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG11dGV4X3VubG9jayhcdTAwMjZub2RlLVx1MDAzZWVwX2xvY2spO1xuIFx0fVxuIFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxuLVx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmUgKi9cbitcdCAqIGNvbmZpcm1fcnggZmxhZyBpZiB3ZSBkcm9wcGVkIHRoaXMgb25lXG4rXHQgKi9cbiBcdGlmIChyYyBcdTAwMjZcdTAwMjYgY29uZmlybV9yeClcbiBcdFx0cXJ0cl90eF9mbG93X2ZhaWxlZChub2RlLCB0by1cdTAwM2VzcV9ub2RlLCB0by1cdTAwM2VzcV9wb3J0KTtcbiBcbkBAIC00NzEsNyArNDcyLDcgQEAgaW50IHFydHJfZW5kcG9pbnRfcG9zdChzdHJ1Y3QgcXJ0cl9lbmRwb2ludCAqZXAsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pXG4gXHRjYiA9IChzdHJ1Y3QgcXJ0cl9jYiAqKXNrYi1cdTAwM2VjYjtcbiBcbiBcdC8qIFZlcnNpb24gZmllbGQgaW4gdjEgaXMgbGl0dGxlIGVuZGlhbiwgc28gdGhpcyB3b3JrcyBmb3IgYm90aCBjYXNlcyAqL1xuLVx0dmVyID0gKih1OCopZGF0YTtcbitcdHZlciA9ICoodTggKilkYXRhO1xuIFxuIFx0c3dpdGNoICh2ZXIpIHtcbiBcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcbkBAIC03NjksNyArNzcwLDggQEAgc3RhdGljIHZvaWQgcXJ0cl9wb3J0X3JlbW92ZShzdHJ1Y3QgcXJ0cl9zb2NrICppcGMpXG4gXHR4YV9lcmFzZShcdTAwMjZxcnRyX3BvcnRzLCBwb3J0KTtcbiBcbiBcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2Vcbi1cdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnQgKi9cbitcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcbitcdCAqL1xuIFx0c3luY2hyb25pemVfcmN1KCk7XG4gXG4gXHRfX3NvY2tfcHV0KFx1MDAyNmlwYy1cdTAwM2Vzayk7XG5AQCAtOTU3LDggKzk1OSw4IEBAIHN0YXRpYyBpbnQgcXJ0cl9iY2FzdF9lbnF1ZXVlKHN0cnVjdCBxcnRyX25vZGUgKm5vZGUsIHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGludCBxcnRyX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKVxuIHtcbiBcdERFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3FydHIgKiwgYWRkciwgbXNnLVx1MDAzZW1zZ19uYW1lKTtcbi1cdGludCAoKmVucXVldWVfZm4pKHN0cnVjdCBxcnRyX25vZGUgKiwgc3RydWN0IHNrX2J1ZmYgKiwgaW50LFxuLVx0XHRcdCAgc3RydWN0IHNvY2thZGRyX3FydHIgKiwgc3RydWN0IHNvY2thZGRyX3FydHIgKik7XG4rXHRpbnQgKCplbnF1ZXVlX2ZuKShzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgdHlwZSxcbitcdFx0XHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xuIFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcbiBcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cdTAwM2Vzayk7XG4gXHRzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLVx1MDAzZXNrO1xuZGlmZiAtLWdpdCBhL25ldC9xcnRyL25zLmMgYi9uZXQvcXJ0ci9ucy5jXG5pbmRleCBiY2IwOTBlZTc5ZDQ5Li5hYWY3N2M3ZjUwNDViIDEwMDY0NFxuLS0tIGEvbmV0L3FydHIvbnMuY1xuKysrIGIvbmV0L3FydHIvbnMuY1xuQEAgLTE3OSw4ICsxNzksNiBAQCBzdGF0aWMgdm9pZCBzZXJ2aWNlX2Fubm91bmNlX2RlbChzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqZGVzdCxcbiBcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXHUwMDI2bXNnLCBcdTAwMjZpdiwgMSwgc2l6ZW9mKHBrdCkpO1xuIFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FTk9ERVYpXG4gXHRcdHByX2VycihcImZhaWxlZCB0byBhbm5vdW5jZSBkZWwgc2VydmljZVxcblwiKTtcbi1cbi1cdHJldHVybjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTEuNTQxNDU5NjQzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTk3Njc4OTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBFdmFsdWF0aW9uOiBRUlRSIERpZmYqKlxuXG5Pa2F5LCBzbyB0aGUgdXNlciB3YW50cyBtZSB0byBldmFsdWF0ZSB0aGlzIFFSVFIgcGF0Y2ggc2VyaWVzLiBMZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBkaWZmIGxvb2tzIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXQgZmlyc3QgZ2xhbmNlLlxuXG5GaXJzdCwgSSBzZWUgc29tZSBjaGFuZ2VzIGluIGBuZXQvcXJ0ci9hZl9xcnRyLmNgLiBUaGVyZSdzIHNvbWUgY29tbWVudCBmb3JtYXR0aW5nIGFuZCB3aGl0ZXNwYWNlIGNsZWFudXAuIEkgYWxzbyBzZWUgYSBjaGFuZ2UgaW4gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24sIHdoaWNoIGhhcyB6ZXJvIGVmZmVjdCBvbiB0aGUgY29tcGlsZWQgY29kZS5cblxuSSB0aGVuIHNlZSBjaGFuZ2VzIGluIGBuZXQvcXJ0ci9ucy5jYCwgd2hpY2ggcmVtb3ZlIGEgcmVkdW5kYW50IHJldHVybiBzdGF0ZW1lbnQgaW4gYSBgdm9pZGAgZnVuY3Rpb24uICBBZ2Fpbiwgbm8gaW1wYWN0IG9uIHRoZSBjb21waWxlZCByZXN1bHQuXG5cbkxvb2tpbmcgYXQgdGhlIHByb21wdCdzIG5lZ2F0aXZlIGNyaXRlcmlhLCAqYWxsKiBvZiB0aGVzZSBjaGFuZ2VzIGZhbGwgc3F1YXJlbHkgaW50byB0aGUgXCJOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzXCIgY2F0ZWdvcnkuICBXZSd2ZSBnb3QgY29tbWVudCBtb2RpZmljYXRpb25zLCB3aGl0ZXNwYWNlIGNoYW5nZXMsIHZhcmlhYmxlIHBhcmFtZXRlciBuYW1lcyBpbiBmdW5jdGlvbiBwb2ludGVyLCBhbmQgcmVkdW5kYW50IGByZXR1cm47YCBzdGF0ZW1lbnRzLiBOb25lIG9mIHRoZXNlIGFmZmVjdCBjb250cm9sIGZsb3csIGRhdGEgc3RydWN0dXJlcywgb3IgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZS5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcyBvZiB0aGUgZGlmZiwgSSBhbSBjb25maWRlbnQgaW4gZGVjbGFyaW5nIHRoYXQgdGhpcyBjaGFuZ2UgaXMgbm90IHdvcnRoIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODA2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTcuNTE4MjUxODYxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg4NDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuIDM5MTpcXHRcXHRcXHRpZiAoIXJjIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbiAzOTI6XFx0XFx0XFx0XFx0bm9kZS1cXHUwMDNlaGVsbG9fc2VudCA9IHRydWU7XFxuIDM5MzpcXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNm5vZGUtXFx1MDAzZWVwX2xvY2spO1xcbiAzOTQ6XFx0XFx0fVxcbiAzOTU6XFx0XFx0LyogTmVlZCB0byBlbnN1cmUgdGhhdCBhIHN1YnNlcXVlbnQgbWVzc2FnZSBjYXJyaWVzIHRoZSBvdGhlcndpc2UgbG9zdFxcbiAzOTY6XFx0XFx0ICogY29uZmlybV9yeCBmbGFnIGlmIHdlIGRyb3BwZWQgdGhpcyBvbmVcXG4gMzk3OlxcdFxcdCAqL1xcbiAzOTg6XFx0XFx0aWYgKHJjIFxcdTAwMjZcXHUwMDI2IGNvbmZpcm1fcngpXFxuIDM5OTpcXHRcXHRcXHRxcnRyX3R4X2Zsb3dfZmFpbGVkKG5vZGUsIHRvLVxcdTAwM2VzcV9ub2RlLCB0by1cXHUwMDNlc3FfcG9ydCk7XFxuIDQwMDpcXHRcXG4gNDAxOlxcdFxcdGlmIChyYyA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHR5cGUgPT0gUVJUUl9UWVBFX0hFTExPKVxcbiA0MDI6XFx0XFx0XFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZub2RlLVxcdTAwM2VzYXlfaGVsbG8sIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7XFxuIDQwMzpcXHRcXG4gNDA0OlxcdFxcdHJldHVybiByYztcXG4gNDA1OlxcdH1cXG4gNDA2OlxcdFxcbiA0MDc6XFx0LyogTG9va3VwIG5vZGUgYnkgaWQuXFxuIDQwODpcXHQgKlxcbiA0MDk6XFx0ICogY2FsbGVycyBtdXN0IHJlbGVhc2Ugd2l0aCBxcnRyX25vZGVfcmVsZWFzZSgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjE3LjUxODQ0MjkzMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4NzYxMjI0MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDpcblxuKipEaXZpbmcgaW50byB0aGUgUVJUUiBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBRUlRSIHN0dWZmIGlzIGhhbmRsZWQgYXQgdGhlIG5ldGxpbmsgbGV2ZWwuIEknbSBnb2luZyB0byBqdW1wIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2Vybi4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGxvb2sgYXQgdGhlIGNydWNpYWwgZGF0YSBoYW5kbGluZyBzdGVwcy4gTGluZXMgNDY1LTQ4MCBpbiBgbmV0L3FydHIvYWZfcXJ0ci5jYCBzaG91bGQgZ2l2ZSBtZSBzb21lIGtleSBpbnNpZ2h0cyBpbnRvIHRoZSBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLi4uIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgbmV0bGluayBtZXNzYWdlIHByb2Nlc3NpbmcsIG1heWJlIHNvbWUgcGFja2V0IGZvcm1hdCBpbnRlcnByZXRhdGlvbnMsIG9yIHNvbWUgY29yZSBjb25uZWN0aW9uIG1hbmFnZW1lbnQgYml0cy4gSSBhbnRpY2lwYXRlIGl0J2xsIHNoZWQgbGlnaHQgb24gaG93IGRhdGEgZ2V0cyBpbiBhbmQgb3V0IG9mIHRoZSBRUlRSIHNvY2tldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MTkuMzk0NTY4Mzg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2NTpcXHRcXHRpZiAobGVuID09IDAgfHwgbGVuIFxcdTAwMjYgMylcXG4gNDY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHRza2IgPSBfX25ldGRldl9hbGxvY19za2IoTlVMTCwgbGVuLCBHRlBfQVRPTUlDIHwgX19HRlBfTk9XQVJOKTtcXG4gNDY5OlxcdFxcdGlmICghc2tiKVxcbiA0NzA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGNiID0gKHN0cnVjdCBxcnRyX2NiICopc2tiLVxcdTAwM2VjYjtcXG4gNDczOlxcdFxcbiA0NzQ6XFx0XFx0LyogVmVyc2lvbiBmaWVsZCBpbiB2MSBpcyBsaXR0bGUgZW5kaWFuLCBzbyB0aGlzIHdvcmtzIGZvciBib3RoIGNhc2VzICovXFxuIDQ3NTpcXHRcXHR2ZXIgPSAqKHU4ICopZGF0YTtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0c3dpdGNoICh2ZXIpIHtcXG4gNDc4OlxcdFxcdGNhc2UgUVJUUl9QUk9UT19WRVJfMTpcXG4gNDc5OlxcdFxcdFxcdGlmIChsZW4gXFx1MDAzYyBzaXplb2YoKnYxKSlcXG4gNDgwOlxcdFxcdFxcdFxcdGdvdG8gZXJyO1xcbiA0ODE6XFx0XFx0XFx0djEgPSBkYXRhO1xcbiA0ODI6XFx0XFx0XFx0aGRybGVuID0gc2l6ZW9mKCp2MSk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdFxcdGNiLVxcdTAwM2V0eXBlID0gbGUzMl90b19jcHUodjEtXFx1MDAzZXR5cGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoxOS4zOTQ2NTQ2MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzEyNjU2MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbnRvIHRoYXQgdGV4dCBhbmQgc3ludGhlc2l6ZSBpdHMga2V5IHRha2Vhd2F5cyBhcyBpZiB0aGV5IHdlcmUgbXkgb3duLiBIZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcsIGJhc2VkIG9uIHRoZSBpbXBsaWVkIGluc3RydWN0aW9uczpcblxuKipBbmFseXppbmcgdGhlIFJlbGV2YW50IFNlY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gemVyb2luZyBpbiBvbiBsaW5lcyA3NjUtNzgwLiBHaXZlbiBteSBiYWNrZ3JvdW5kLCBJJ20gaW1tZWRpYXRlbHkgbG9va2luZyBmb3IgdGhlIGNvcmUgYXJndW1lbnRzLCBhbnkgbm92ZWwgZGF0YSBvciBwZXJzcGVjdGl2ZXMsIGFuZCB0aGUgb3ZlcmFsbCBuYXJyYXRpdmUgZmxvdyBvZiB0aGlzIHNwZWNpZmljIHNlY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBpbnRyb2R1Y2VkLCB3aGV0aGVyIGl0J3Mgc3VwcG9ydGluZyBldmlkZW5jZSwgYSBjb3VudGVyYXJndW1lbnQsIG9yIHBlcmhhcHMgYSBjb25jbHVkaW5nIHRob3VnaHQgZm9yIGEgc3BlY2lmaWMgcG9pbnQuIEknbGwgYmUgd2F0Y2hpbmcgY2xvc2VseSBmb3IgaG93IGl0IGNvbm5lY3RzIHRvIHRoZSBicm9hZGVyIHN1YmplY3QsIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgb21pc3Npb25zIG9yIGFyZWFzIHRoYXQgbmVlZCBmdXJ0aGVyIHNjcnV0aW55IGJhc2VkIG9uIG15IGV4cGVydGlzZS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgYXBwbGllcyB0byBjdXJyZW50IHJlc2VhcmNoLCBJIHdpbGwgYmUgY29tcGFyaW5nIHRvIHdoYXQgSSBjdXJyZW50bHkgYmVsaWV2ZSB0byBiZSB0cnVlIG9uIHRoZSB0b3BpYy4gTGV0J3Mgc2VlIHdoYXQgdGhlc2UgbGluZXMgcmV2ZWFsLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NDQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjIxLjcwNzMxMzE3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9xcnRyL2FmX3FydHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NjU6XFx0XFx0fVxcbiA3NjY6XFx0XFxuIDc2NzpcXHRcXHRpZiAocG9ydCA9PSBRUlRSX1BPUlRfQ1RSTClcXG4gNzY4OlxcdFxcdFxcdHBvcnQgPSAwO1xcbiA3Njk6XFx0XFxuIDc3MDpcXHRcXHR4YV9lcmFzZShcXHUwMDI2cXJ0cl9wb3J0cywgcG9ydCk7XFxuIDc3MTpcXHRcXG4gNzcyOlxcdFxcdC8qIEVuc3VyZSB0aGF0IGlmIHFydHJfcG9ydF9sb29rdXAoKSBkaWQgZW50ZXIgdGhlIFJDVSByZWFkIHNlY3Rpb24gd2VcXG4gNzczOlxcdFxcdCAqIHdhaXQgZm9yIGl0IHRvIHVwIGluY3JlbWVudCB0aGUgcmVmY291bnRcXG4gNzc0OlxcdFxcdCAqL1xcbiA3NzU6XFx0XFx0c3luY2hyb25pemVfcmN1KCk7XFxuIDc3NjpcXHRcXG4gNzc3OlxcdFxcdF9fc29ja19wdXQoXFx1MDAyNmlwYy1cXHUwMDNlc2spO1xcbiA3Nzg6XFx0fVxcbiA3Nzk6XFx0XFxuIDc4MDpcXHQvKiBBc3NpZ24gcG9ydCBudW1iZXIgdG8gc29ja2V0LlxcbiA3ODE6XFx0ICpcXG4gNzgyOlxcdCAqIFNwZWNpZnkgcG9ydCBpbiB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHBvcnQsIGFuZCBpdCB3aWxsIGJlIGFkanVzdGVkXFxuIDc4MzpcXHQgKiBvbiByZXR1cm4gYXMgbmVjZXNzc2FyeS5cXG4gNzg0OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjIxLjcwNzQwOTY1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE3MTUwNzAzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIEknbSByZWFkeSB0byBkaXZlIGludG8gdGhpcy4gTGV0J3Mgc2VlLi4uIEkgbmVlZCB0byBmb2N1cyBvbiBsaW5lcyA5NTUtOTcwLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhhdCBzcGVjaWZpYyBzZWN0aW9uIG9mIHRoZSB0ZXh0LiBNeSBtaW5kIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGh5cG90aGVzZXMgYWJvdXQgd2hhdCB0aG9zZSBsaW5lcyBtaWdodCBjb250YWluLiBHaXZlbiBteSBleHBlcnRpc2UsIEknbSBhbnRpY2lwYXRpbmcgY2VydGFpbiBrZXkgY29uY2VwdHMgb3IgYXJndW1lbnRzIHRoYXQgYXJlIGxpa2VseSB0byBiZSBwcmVzZW50LCBhbmQgSSdsbCBiZSBsb29raW5nIGZvciBudWFuY2VzIHRoYXQgc3VwcG9ydCBvciBjaGFsbGVuZ2UgdGhvc2UgYXNzdW1wdGlvbnMuIEknbGwgcmVhZCB3aXRoIGEgY3JpdGljYWwgZXllLCBkaXNzZWN0aW5nIHRoZSBsYW5ndWFnZSwgYW5kIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGF1dGhvcidzIGNob2ljZXMgd2l0aGluIHRoYXQgc3BlY2lmaWMgY29udGV4dC4gVGhpcyBzZWdtZW50IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIHBpdm90YWwgdG8gdGhlIG92ZXJhbGwgYXJndW1lbnQsIGFuZCBteSBqb2IgaXMgdG8gZXh0cmFjdCB0aGUgY3JpdGljYWwgcG9pbnRzIGZvciBhbiBpbmZvcm1lZCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoyMy40MjI0ODI1OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvYWZfcXJ0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk1NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk1NTpcXHRcXG4gOTU2OlxcdFxcdHJldHVybiAwO1xcbiA5NTc6XFx0fVxcbiA5NTg6XFx0XFxuIDk1OTpcXHRzdGF0aWMgaW50IHFydHJfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pXFxuIDk2MDpcXHR7XFxuIDk2MTpcXHRcXHRERUNMQVJFX1NPQ0tBRERSKHN0cnVjdCBzb2NrYWRkcl9xcnRyICosIGFkZHIsIG1zZy1cXHUwMDNlbXNnX25hbWUpO1xcbiA5NjI6XFx0XFx0aW50ICgqZW5xdWV1ZV9mbikoc3RydWN0IHFydHJfbm9kZSAqbm9kZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHR5cGUsXFxuIDk2MzpcXHRcXHRcXHRcXHQgIHN0cnVjdCBzb2NrYWRkcl9xcnRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8pO1xcbiA5NjQ6XFx0XFx0X19sZTMyIHFydHJfdHlwZSA9IGNwdV90b19sZTMyKFFSVFJfVFlQRV9EQVRBKTtcXG4gOTY1OlxcdFxcdHN0cnVjdCBxcnRyX3NvY2sgKmlwYyA9IHFydHJfc2soc29jay1cXHUwMDNlc2spO1xcbiA5NjY6XFx0XFx0c3RydWN0IHNvY2sgKnNrID0gc29jay1cXHUwMDNlc2s7XFxuIDk2NzpcXHRcXHRzdHJ1Y3QgcXJ0cl9ub2RlICpub2RlO1xcbiA5Njg6XFx0XFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4gOTY5OlxcdFxcdHNpemVfdCBwbGVuO1xcbiA5NzA6XFx0XFx0dTMyIHR5cGU7XFxuIDk3MTpcXHRcXHRpbnQgcmM7XFxuIDk3MjpcXHRcXG4gOTczOlxcdFxcdGlmIChtc2ctXFx1MDAzZW1zZ19mbGFncyBcXHUwMDI2IH4oTVNHX0RPTlRXQUlUKSlcXG4gOTc0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzoyMy40MjI1ODI5NTJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg3MDQyNzIxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgUVJUUiBOYW1lc3BhY2UgQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFFSVFIgbmFtZXNwYWNlIGlzIGhhbmRsZWQsIGFuZCBJIGhhdmUgYSBwcmV0dHkgZ29vZCBpZGVhIHdoZXJlIHRvIHN0YXJ0IGRpZ2dpbmcuIExldCdzIHplcm8gaW4gb24gYG5ldC9xcnRyL25zLmNgLiBNeSBndXQgc2F5cyB0aGF0IHRoZSBjb3JlIG5hbWVzcGFjZSBtYW5hZ2VtZW50IGlzIGxpa2VseSBjb25jZW50cmF0ZWQgc29tZXdoZXJlIHdpdGhpbiB0aGF0IGZpbGUuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDE3NSB0aHJvdWdoIDE4Ny4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHNwb3QgdG8gY2hlY2sgZm9yIHJlZ2lzdHJhdGlvbiwgZGVyZWdpc3RyYXRpb24sIGFuZCBsb29rdXAgZnVuY3Rpb25zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBsb2dpYyB0aGVyZSDigJMgdGhlIGhlYXJ0IG9mIGhvdyB0aGlzIG5hbWVzcGFjZSBpcyBkZWZpbmVkIGFuZCB1c2VkLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBoaWRkZW4gaW4gdGhvc2UgbGluZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDE5OjE3OjI1LjI5MzAyMDg3MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3FydHIvbnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNzU6XFx0XFxuIDE3NjpcXHRcXHRtc2cubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRyICopZGVzdDtcXG4gMTc3OlxcdFxcdG1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZigqZGVzdCk7XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldCA9IGtlcm5lbF9zZW5kbXNnKHFydHJfbnMuc29jaywgXFx1MDAyNm1zZywgXFx1MDAyNml2LCAxLCBzaXplb2YocGt0KSk7XFxuIDE4MDpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiByZXQgIT0gLUVOT0RFVilcXG4gMTgxOlxcdFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGFubm91bmNlIGRlbCBzZXJ2aWNlXFxcXG5cXFwiKTtcXG4gMTgyOlxcdH1cXG4gMTgzOlxcdFxcbiAxODQ6XFx0c3RhdGljIHZvaWQgbG9va3VwX25vdGlmeShzdHJ1Y3Qgc29ja2FkZHJfcXJ0ciAqdG8sIHN0cnVjdCBxcnRyX3NlcnZlciAqc3J2LFxcbiAxODU6XFx0XFx0XFx0XFx0ICBib29sIG5ldylcXG4gMTg2OlxcdHtcXG4gMTg3OlxcdFxcdHN0cnVjdCBxcnRyX2N0cmxfcGt0IHBrdDtcXG4gMTg4OlxcdFxcdHN0cnVjdCBtc2doZHIgbXNnID0geyB9O1xcbiAxODk6XFx0XFx0c3RydWN0IGt2ZWMgaXY7XFxuIDE5MDpcXHRcXHRpbnQgcmV0O1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRpdi5pb3ZfYmFzZSA9IFxcdTAwMjZwa3Q7XFxuIDE5MzpcXHRcXHRpdi5pb3ZfbGVuID0gc2l6ZW9mKHBrdCk7XFxuIDE5NDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTk6MTc6MjUuMjkzMTQ5NTIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NDgyNTM0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgY29zbWV0aWMgaW1wcm92ZW1lbnRzLCBsZXQncyBjb25maXJtIHRoYXQuIEkndmUgZ290IHRvIGRldGVybWluZSBpZiBpdCdzIHdvcnRoIGZ1enppbmcsIGFuZCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjcml0ZXJpYSwgaXQgbG9va3MgbGlrZSBpdCBpc24ndC4gVGhlIHBhdGNoIGFmZmVjdHMgYGFmX3FydHIuY2AgYW5kIGBucy5jYCwgYnV0IGFsbCB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbm9uLWZ1bmN0aW9uYWwuIFdlIGhhdmU6XG5cbjEuICBSZWZvcm1hdHRpbmcgb2YgbXVsdGktbGluZSBjb21tZW50cyBpbiBgYWZfcXJ0ci5jYCB0byBtYXRjaCBrZXJuZWwgY29kaW5nIHN0eWxlLiBUaGlzIGlzIHB1cmVseSBjb3NtZXRpYy5cbjIuICBBZGRpbmcgYSBzaW5nbGUgc3BhY2UgaW4gYSBwb2ludGVyIGNhc3QgYCh1OCopYCB0byBgKHU4ICopYCBpbiBgYWZfcXJ0ci5jYC4gQWdhaW4sIGp1c3Qgd2hpdGVzcGFjZS5cbjMuICBBZGRpbmcgcGFyYW1ldGVyIG5hbWVzIHRvIGEgbG9jYWwgZnVuY3Rpb24gcG9pbnRlciBkZWNsYXJhdGlvbiBgaW50ICgqZW5xdWV1ZV9mbikoLi4uKWAgaW4gYHFydHJfc2VuZG1zZ2AgaW4gYGFmX3FydHIuY2AuIFRoaXMgaW1wcm92ZXMgcmVhZGFiaWxpdHksIGJ1dCBkb2Vzbid0IGNoYW5nZSBjb21waWxlZCBjb2RlLlxuNC4gIFJlbW92aW5nIGEgcmVkdW5kYW50IGByZXR1cm47YCBzdGF0ZW1lbnQgYXQgdGhlIHZlcnkgZW5kIG9mIGEgYHZvaWRgIGZ1bmN0aW9uIChgc2VydmljZV9hbm5vdW5jZV9kZWxgKSBpbiBgbnMuY2AuIFRoaXMgaXMgdHJpdmlhbCBhbmQgZG9lc24ndCBjaGFuZ2UgdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IuXG5cbk5vdywgbGV0J3MgZ28gb3ZlciB0aGUgY3JpdGVyaWEuIEkgbmVlZCB0byBjaGVjayBpZiAqYWxsKiBtb2RpZmllZCBjb2RlIGZhbGxzIGludG8gb25lIG9yIG1vcmUgY2F0ZWdvcmllcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIGNyaXRlcmlhIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBjb21tZW50cywgc3BhY2luZywgYW5kIG90aGVyIFwibm9uLWV4ZWN1dGFibGVcIiBjb2RlIHF1YWxpZnkgZm9yIGEgbmVnYXRpdmUgcmVzdWx0LiBUaGlzIHBhdGNoIGNsZWFybHkgYWxpZ25zIHdpdGggdGhhdC4gVGhlcmUncyBubyBtb2RpZmljYXRpb24gb2YgZXhlY3V0YWJsZSBjb2RlIG9yIGxvZ2ljLCBkYXRhIHN0cnVjdHVyZSBjaGFuZ2VzLCBubyBuZXcgYXNzZXJ0aW9ucywgbm8gcmVmYWN0b3JpbmcuXG5cbkdpdmVuIHRoaXMsIEkgYW0gY29uZmlkZW50IHRoYXQgYFdvcnRoRnV6emluZ2AgbXVzdCBiZSBzZXQgdG8gYGZhbHNlYC5cblxuTm93LCBJIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVxdWlyZWQgZmllbGRzIGZvciBgc2V0LXJlc3VsdHNgOlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IGZhbHNlXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBjb250YWlucyBvbmx5IGNvc21ldGljIGNvZGluZyBzdHlsZSBjaGFuZ2VzIChjb21tZW50IGZvcm1hdHRpbmcsIHNwYWNpbmcsIHBhcmFtZXRlciBuYW1lcyBpbiBhIGxvY2FsIGZ1bmN0aW9uIHBvaW50ZXIgcHJvdG90eXBlLCBhbmQgcmVtb3ZhbCBvZiBhIHJlZHVuZGFudCBgcmV0dXJuO2AgaW4gYSB2b2lkIGZ1bmN0aW9uKSB3aXRoIG5vIGNoYW5nZXMgdG8gZXhlY3V0YWJsZSBsb2dpYyBvciBjb21waWxlZCBjb2RlLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBcXFsgXVxuKiAgIGBFbmFibGVDb25maWdzYDogXFxbIF1cblxuSSBjYW4gY29uZmlkZW50bHkgcHJvY2VlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMzQsIk91dHB1dFRva2VucyI6OTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzozMS4yNDE0MDY0NjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJ3JldHVybjsnIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25zaXN0cyBlbnRpcmVseSBvZiBjb3NtZXRpYyBzdHlsZSBjbGVhbnVwczogbXVsdGktbGluZSBjb21tZW50IGZvcm1hdHRpbmcgYWRqdXN0bWVudHMsIHNwYWNpbmcgaW4gYSBwb2ludGVyIGNhc3QsIGFkZGluZyBwYXJhbWV0ZXIgbmFtZXMgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGRlY2xhcmF0aW9uLCBhbmQgZGVsZXRpbmcgYW4gdW5uZWNlc3NhcnkgJ3JldHVybjsnIHN0YXRlbWVudCBhdCB0aGUgZW5kIG9mIGEgdm9pZCBmdW5jdGlvbi4gTm8gZXhlY3V0YWJsZSBsb2dpYywgY29udHJvbCBmbG93LCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsdGVyZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxOToxNzozMS4yNDE0MzM2OTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7wb6l[1] Phase: Running StartedAt: 2026-09-13 19:17:42 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7wb6l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-13 19:17:42 +0000 UTC FinishedAt: 2026-09-13 19:17:46 +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,}