Name: series-workflowdvspw Phase: Failed StartedAt: 2026-08-26 13:19:16 +0000 UTC FinishedAt: 2026-08-26 14:02:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdvspw[0] Phase: Succeeded StartedAt: 2026-08-26 13:19:16 +0000 UTC FinishedAt: 2026-08-26 14:02:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdvspw[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 13:19:16 +0000 UTC FinishedAt: 2026-08-26 14:02:37 +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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlYTMxZWRlMDVlNDRkZjA5MzIyMDJkZWRkZGUwYjVmZTg1OGZiZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNDowMjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uMWYwNjFmNDg3M2I1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC03NzksNiAmIzQzOzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4mIzQzO1x0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO1x0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC01ODAzLDYgJiM0Mzs1ODA2LDk5IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKTtcbiYjNDM7XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICoqbmFtZXM7XG4mIzQzO1x0c2l6ZV90IGksIGosIGNudDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xuJiM0MztcdGlmICghbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxsb2NhdGUgb25lIGVudHJ5IGZvciBhbiBlbXB0eSBsaXN0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlXG4mIzQzO1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuYW1lc1tpXSB8fCAhbmFtZXNbaV1bMF0pIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRuYW1lc1tpXSk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XG4mIzQzO1x0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNiAhb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTgyNSw2ICYjNDM7NTkyMSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHRlcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCBcdTAwMjZpZCk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0VOVClcbkBAIC01ODY3LDYgJiM0Mzs1OTY2LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk5NSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiAmIzQzOzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xuQEAgLTk2MjksNiAmIzQzOzk3NDAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uYjhjMWQ5OGQ2OWQ4NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4mIzQzO1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdpdGggYnRmX21vZHVsZV9uYW1lczpcbiYjNDM7XHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkIGFzIGJlZm9yZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzXG4mIzQzO1x0ICogcmV0dXJuZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGFmZmVjdHM6XG4mIzQzO1x0ICogLSBCUEYgQ08tUkUgcmVsb2NhdGlvbnMgYWdhaW5zdCB0eXBlcyBkZWZpbmVkIGluIG1vZHVsZXM7XG4mIzQzO1x0ICogLSBCVEYtYmFzZWQgcmVzb2x1dGlvbiBvZiBmdW5jdGlvbiBhdHRhY2ggdGFyZ2V0cyBmb3JcbiYjNDM7XHQgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7XG4mIzQzO1x0ICogLSBzdHJ1Y3Rfb3BzIGtlcm5lbCB0eXBlIHJlc29sdXRpb247XG4mIzQzO1x0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbiYjNDM7XHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiBcbiBcdHNpemVfdCA6MDtcbiB9O1xuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcbiYjNDM7I2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBucl9idGZfbW9kdWxlX25hbWVzXG4gXG4gLyoqXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkYzcyYmVmMDE0Yzhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xuQEAgLTAsMCAmIzQzOzEsMTM5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtidGZfbW9kdWxlX25hbWVzLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4mIzQzO1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0LyogVmVyaWZ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovXG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGRlZmF1bHRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBkZWZhdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7XHRza2VsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW1cbiYjNDM7ICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW5cbiYjNDM7ICogYnRmX21vZHVsZV9uYW1lcywgc28gaXRzIEJURiBpcyBza2lwcGVkIGFuZCB0aGUgQlBGIHByb2dyYW0gZmFpbHMgdG8gbG9hZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDttb2R1bGVfbm9uZXhpc3RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcbiYjNDM7XHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwmIzM0O1wmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHlcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IE5VTEwgfTtcbiYjNDM7XHRjb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyBcJiMzNDtcJiMzNDsgfTtcbiYjNDM7XHRjb25zdCBjaGFyICpkdXBsaWNhdGVfbmFtZXNbXSA9IHtcbiYjNDM7XHRcdFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LCBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyxcbiYjNDM7XHR9O1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBuYW1lcyxcbiYjNDM7XHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuJiM0MztcdFx0ICBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgbnVsbFwmIzM0Oyk7XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7XG4mIzQzO1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcbiYjNDM7XHRcdCAgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XCYjMzQ7KTtcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0MztcbiYjNDM7XHRvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBkdXBsaWNhdGVfbmFtZXM7XG4mIzQzO1x0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuJiM0MztcdFx0ICBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZHVwbGljYXRlIG5hbWVcJiMzNDspO1xuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWVudi5oYXNfdGVzdG1vZCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX3NraXBcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19za2lwKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19lbXB0eSgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTQ6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAobGliYnBmKSBhbmQgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZWEzMWVkZTA1ZTQ0ZGYwOTMyMjAyZGVkZGRlMGI1ZmU4NThmYmVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTQ6MDI6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwppbmRleCA1MTRlNGU5ZGFhODI1Li4xZjA2MWY0ODczYjU1IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTc3OSw2ICYjNDM7Nzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CWNoYXIgKipidGZfbW9kdWxlX25hbWVzOwomIzQzOwlzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lczsKJiM0MzsKIAljaGFyIHBhdGhbXTsKIH07CiAKQEAgLTU4MDMsNiAmIzQzOzU4MDYsOTkgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiYjNDM7ewomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0pOwomIzQzOwl6ZnJlZSgmYW1wO29iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyk7CiYjNDM7CW9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKJiM0MzsJCQkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICoqbmFtZXM7CiYjNDM7CXNpemVfdCBpLCBqLCBjbnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7CiYjNDM7CWlmICghbmFtZXMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZQomIzQzOwkgKiBkZWZhdWx0IGJlaGF2aW9yLgomIzQzOwkgKi8KJiM0MzsJb2JqLSZndDtidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLAomIzQzOwkJCQkgICAgICAgc2l6ZW9mKCpvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpKTsKJiM0MzsJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O2ludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcbiYjMzQ7LCBpKTsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChzdHJjbXAob2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2pdLCBuYW1lc1tpXSkgPT0gMCkgewomIzQzOwkJCQlwcl93YXJuKCYjMzQ7ZHVwbGljYXRlIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgJiMzOTslcyYjMzk7XG4mIzM0OywKJiM0MzsJCQkJCW5hbWVzW2ldKTsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBlcnJfb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7CiYjNDM7CQlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tpXSkgewomIzQzOwkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfb3V0OgomIzQzOwlicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpc19tb2R1bGVfYnRmX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoc3RyY21wKG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9kZWJ1ZygmIzM0O3NraXBwaW5nIG1vZHVsZSBCVEYgJiMzOTslcyYjMzk7LCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xuJiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyAmYW1wOyZhbXA7ICFvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiYjNDM7ewomIzQzOwlyZXR1cm4gb2JqLSZndDtidGZfbW9kdWxlX25hbWVzICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lcyA9PSBvYmotJmd0O2J0Zl9tb2R1bGVfY250OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBicGZfYnRmX2luZm8gaW5mbzsKQEAgLTU4MjUsNiAmIzQzOzU5MjEsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAlpZiAoIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfTU9EVUxFX0JURikpCiAJCXJldHVybiAwOwogCiYjNDM7CWlmIChub19tb2R1bGVfYnRmc19uZWVkZWQob2JqKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXdoaWxlICh0cnVlKSB7CiAJCWVyciA9IGJwZl9idGZfZ2V0X25leHRfaWQoaWQsICZhbXA7aWQpOwogCQlpZiAoZXJyICZhbXA7JmFtcDsgZXJybm8gPT0gRU5PRU5UKQpAQCAtNTg2Nyw2ICYjNDM7NTk2NiwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCWlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkgewomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJYnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotJmd0O2J0Zl92bWxpbnV4KTsKIAkJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwogCQlpZiAoZXJyKSB7CkBAIC01ODkxLDYgJiM0Mzs1OTk1LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQlicmVhazsKIAkJfQogCQlvYmotJmd0O2J0Zl9tb2R1bGVfY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChlcnIpIHsKQEAgLTg1MDgsNiAmIzQzOzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAkJfQogCX0KIAomIzQzOwllcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7CiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTsKQEAgLTk2MjksNiAmIzQzOzk3NDAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTsKJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLmI4YzFkOThkNjlkODUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuCiYjNDM7CSAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgomIzQzOwkgKiBidGZfbW9kdWxlX25hbWVzLgomIzQzOwkgKgomIzQzOwkgKiBXaXRoIGJ0Zl9tb2R1bGVfbmFtZXM6CiYjNDM7CSAqIC0gd2hlbiBwcm92aWRlZCwgb25seSB0aGUgQlRGcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgYXJlIGxvYWRlZDsKJiM0MzsJICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7CiYjNDM7CSAqIC0gd2hlbiBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCBhcyBiZWZvcmUuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzCiYjNDM7CSAqIHJldHVybmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFmZmVjdHM6CiYjNDM7CSAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzOwomIzQzOwkgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvcgomIzQzOwkgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7CiYjNDM7CSAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uOwomIzQzOwkgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7CiYjNDM7CXNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzOwogCiAJc2l6ZV90IDowOwogfTsKLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGgKJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXMKIAogLyoqCiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RjNzJiZWYwMTRjOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYwpAQCAtMCwwICYjNDM7MSwxMzkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtidGZfbW9kdWxlX25hbWVzLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsCiYjNDM7CQkubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsJc2tlbCA9IE5VTEw7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW0KJiM0MzsgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpbgomIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgJiMzNDttb2R1bGVfbm9uZXhpc3QmIzM0OyB9OwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLAomIzQzOwkJLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAtRVNSQ0gsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gZW1wdHkgZmlsdGVyIHNraXBzIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLiBUaGUgQlBGCiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19lbXB0eSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7JiMzNDsgfTsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVTUkNILCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHkmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2ludmFsaWQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9OwomIzQzOwljb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyAmIzM0OyYjMzQ7IH07CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0gewomIzQzOwkJJiMzNDticGZfdGVzdG1vZCYjMzQ7LCAmIzM0O2JwZl90ZXN0bW9kJiMzNDssCiYjNDM7CX07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBuYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCwKJiM0MzsJCSAgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgbnVsbCYjMzQ7KTsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsKJiM0MzsJb3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5JiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzOwomIzQzOwlvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBkdXBsaWNhdGVfbmFtZXM7CiYjNDM7CW9wdHMubnJfYnRmX21vZHVsZV9uYW1lcyA9IDI7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGR1cGxpY2F0ZSBuYW1lJiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfbG9hZCYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfc2tpcCYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCgpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfZW1wdHkmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjMyYWRjMGYzM2Y2ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMKQEAgLTAsMCAmIzQzOzEsMTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODMKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm8gS2VybmVsIEZ1enppbmcgTmVlZGVkKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGFuZCBzb21lIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgdG91Y2hlZC4gRXhjZWxsZW50LCBJIGxpa2Ugc2VlaW5nIHRoYXQgZGlzdGluY3Rpb24uIE5vIG1vZGlmaWNhdGlvbnMgdW5kZXIgYGtlcm5lbC9gLCBgbmV0L2AsIGBkcml2ZXJzL2AsIG9yIGFueSBvZiB0aG9zZSBjb3JlIGtlcm5lbCBkaXJlY3Rvcmllcy4gVGhpcyBpcyBwdXJlbHkgdXNlci1zcGFjZSBzdHVmZjogbGliYnBmLCBhbmQgdGVzdHMgZm9yIHRoYXQgbGliLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGFmZmVjdCB0aGUga2VybmVsJiMzOTtzIGZ1enppbmcgc3RyYXRlZ3k/IFN5emthbGxlciwgZm9yIGluc3RhbmNlLCBmdXp6ZXMgdGhlIGtlcm5lbCAqdGhyb3VnaCogc3lzY2FsbHMsIHJpZ2h0PyBJdCBkb2VzbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgbGliYnBmLiBJdCBtaWdodCAqdXNlKiBsaWJicGYgYXMgcGFydCBvZiBpdHMgc2V0dXAsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgY29kZS4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHVzZXItc3BhY2UgdG9vbGluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBsaWJicGYgYW5kIGl0cyB0ZXN0cywgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGZvciBhIGtlcm5lbCBmdXp6ZXIgbGlrZSBTeXprYWxsZXIuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZS4uLiBva2F5LCBjb25maXJtaW5nIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkOiBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY2AuIFllcCwgYWxsIHVuZGVyIGB0b29scy9gLiBObyBrZXJuZWwgbW9kaWZpY2F0aW9ucyBkZXRlY3RlZC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGtlcm5lbC1sZXZlbCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTQ6MDI6MTUuNDE5MTYxOTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MTk4ODUzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKGxpYmJwZikgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNDowMjoxNS40MTkxNjk5NjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzgzNTE0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZWEzMWVkZTA1ZTQ0ZGYwOTMyMjAyZGVkZGRlMGI1ZmU4NThmYmVjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE0OjAyOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuaW5kZXggNTE0ZTRlOWRhYTgyNS4uMWYwNjFmNDg3M2I1NSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC03NzksNiArNzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXHRjaGFyICp0b2tlbl9wYXRoO1xcbiBcXHRpbnQgdG9rZW5fZmQ7XFxuIFxcbitcXHRjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcXG4rXFx0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcbiBcXHRjaGFyIHBhdGhbXTtcXG4gfTtcXG4gXFxuQEAgLTU4MDMsNiArNTgwNiw5OSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4re1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspXFxuK1xcdFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xcbitcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKTtcXG4rXFx0b2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKipuYW1lcztcXG4rXFx0c2l6ZV90IGksIGosIGNudDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7XFxuK1xcdGlmICghbmFtZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0ZSBvbmUgZW50cnkgZm9yIGFuIGVtcHR5IGxpc3QgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGVcXG4rXFx0ICogZGVmYXVsdCBiZWhhdmlvci5cXG4rXFx0ICovXFxuK1xcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZigqb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKSk7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxcXG5cXFwiLCBpKTtcXG4rXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKSB7XFxuK1xcdFxcdFxcdGlmIChzdHJjbXAob2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2pdLCBuYW1lc1tpXSkgPT0gMCkge1xcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAnJXMnXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRuYW1lc1tpXSk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0gPSBzdHJkdXAobmFtZXNbaV0pO1xcbitcXHRcXHRpZiAoIW9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcysrO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX291dDpcXG4rXFx0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgaXNfbW9kdWxlX2J0Zl9uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkrKykge1xcbitcXHRcXHRpZiAoc3RyY21wKG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHByX2RlYnVnKFxcXCJza2lwcGluZyBtb2R1bGUgQlRGICclcycsIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXFxcXG5cXFwiLCBuYW1lKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBub19tb2R1bGVfYnRmc19uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4re1xcbitcXHRyZXR1cm4gb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzIFxcdTAwMjZcXHUwMDI2ICFvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0cmV0dXJuIG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cXHUwMDNlYnRmX21vZHVsZV9jbnQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcXG5AQCAtNTgyNSw2ICs1OTIxLDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdGlmICgha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9NT0RVTEVfQlRGKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0d2hpbGUgKHRydWUpIHtcXG4gXFx0XFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXFx1MDAyNmlkKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXFxuQEAgLTU4NjcsNiArNTk2NiwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xcbitcXHRcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cXHUwMDNlYnRmX3ZtbGludXgpO1xcbiBcXHRcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG5AQCAtNTg5MSw2ICs1OTk1LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9jbnQrKztcXG4rXFxuK1xcdFxcdGlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGVycikge1xcbkBAIC04NTA4LDYgKzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRlcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcXG4gXFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTtcXG5AQCAtOTYyOSw2ICs5NzQwLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRjbG9zZShvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcXG4gXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlanVtcHRhYmxlX21hcHMpO1xcbiBcXG4rXFx0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcXG4rXFxuIFxcdGZyZWUob2JqKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi5iOGMxZDk4ZDY5ZDg1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuQEAgLTIyNCwxMCArMjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XFxuIFxcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxcbiBcXHQgKi9cXG4gXFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XFxuK1xcdC8qXFxuK1xcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXFxuK1xcdCAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxcbitcXHQgKiBidGZfbW9kdWxlX25hbWVzLlxcbitcXHQgKlxcbitcXHQgKiBXaXRoIGJ0Zl9tb2R1bGVfbmFtZXM6XFxuK1xcdCAqIC0gd2hlbiBwcm92aWRlZCwgb25seSB0aGUgQlRGcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgYXJlIGxvYWRlZDtcXG4rXFx0ICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7XFxuK1xcdCAqIC0gd2hlbiBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCBhcyBiZWZvcmUuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzXFxuK1xcdCAqIHJldHVybmVkLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGFmZmVjdHM6XFxuK1xcdCAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzO1xcbitcXHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvclxcbitcXHQgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7XFxuK1xcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xcbitcXHQgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLlxcbitcXHQgKi9cXG4rXFx0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xcbiBcXG4gXFx0c2l6ZV90IDowO1xcbiB9O1xcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXFxuKyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lc1xcbiBcXG4gLyoqXFxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZGM3MmJlZjAxNGM4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbkBAIC0wLDAgKzEsMTM5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXFxuK1xcdFxcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdC8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkZWZhdWx0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdFxcXCIpO1xcbitcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rXFx0c2tlbCA9IE5VTEw7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXFxuKyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXFxuKyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgfTtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcXG4rXFx0XFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcXG4rICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFxcXCJcXFwiIH07XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGVtcHR5XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xcbitcXHRjb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyBcXFwiXFxcIiB9O1xcbitcXHRjb25zdCBjaGFyICpkdXBsaWNhdGVfbmFtZXNbXSA9IHtcXG4rXFx0XFx0XFxcImJwZl90ZXN0bW9kXFxcIiwgXFxcImJwZl90ZXN0bW9kXFxcIixcXG4rXFx0fTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbmFtZXMsXFxuK1xcdFxcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXFx1MDAyNm9wdHMpO1xcbitcXHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcXG4rXFx0XFx0ICBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIG51bGxcXFwiKTtcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rXFxuK1xcdG9wdHMuYnRmX21vZHVsZV9uYW1lcyA9IGVtcHR5X25hbWVzO1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXFxuK1xcdFxcdCAgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVxcXCIpO1xcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbitcXG4rXFx0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZHVwbGljYXRlX25hbWVzO1xcbitcXHRvcHRzLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAyO1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXFxuK1xcdFxcdCAgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVxcXCIpO1xcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKVxcbit7XFxuK1xcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9uYW1lc19sb2FkXFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfbmFtZXNfc2tpcFxcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2VtcHR5XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE0OjAyOjE2Ljc1ODA0MDU5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMDgwOTg1Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKGxpYmJwZikgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZWEzMWVkZTA1ZTQ0ZGYwOTMyMjAyZGVkZGRlMGI1ZmU4NThmYmVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTQ6MDI6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uMWYwNjFmNDg3M2I1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC03NzksNiArNzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciAqdG9rZW5fcGF0aDtcbiBcdGludCB0b2tlbl9mZDtcbiBcbitcdGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xuK1x0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4rXG4gXHRjaGFyIHBhdGhbXTtcbiB9O1xuIFxuQEAgLTU4MDMsNiArNTgwNiw5OSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKVxuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSk7XG4rXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XG4rXHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbitcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbit7XG4rXHRjb25zdCBjaGFyICoqbmFtZXM7XG4rXHRzaXplX3QgaSwgaiwgY250O1xuK1x0aW50IGVycjtcbitcbitcdG5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7XG4rXHRpZiAoIW5hbWVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xuK1xuK1x0LypcbitcdCAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZVxuK1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbitcdCAqL1xuK1x0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgPSBjYWxsb2MoY250ID86IDEsXG4rXHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xuK1x0XHRcdHByX3dhcm4oXCJpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCIsIGkpO1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGorKykge1xuK1x0XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XG4rXHRcdFx0XHRwcl93YXJuKFwiZHVwbGljYXRlIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgJyVzJ1xcblwiLFxuK1x0XHRcdFx0XHRuYW1lc1tpXSk7XG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XG4rXHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pIHtcbitcdFx0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcysrO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX291dDpcbitcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19tb2R1bGVfYnRmX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNpemVfdCBpO1xuK1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKSB7XG4rXHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRwcl9kZWJ1ZyhcInNraXBwaW5nIG1vZHVsZSBCVEYgJyVzJywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcXG5cIiwgbmFtZSk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuK3tcbitcdHJldHVybiBvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcdTAwMjZcdTAwMjYgIW9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzO1xuK31cbitcbitzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuK3tcbitcdHJldHVybiBvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9PSBvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcbkBAIC01ODI1LDYgKzU5MjEsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdGlmICgha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9NT0RVTEVfQlRGKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXHUwMDI2aWQpO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXG5AQCAtNTg2Nyw2ICs1OTY2LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cdTAwM2VidGZfdm1saW51eCk7XG4gXHRcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTU4OTEsNiArNTk5NSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCsrO1xuK1xuK1x0XHRpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC04NTA4LDYgKzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTYyOSw2ICs5NzQwLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRjbG9zZShvYmotXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xuIFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcbiBcbitcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4rXG4gXHRmcmVlKG9iaik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi5iOGMxZDk4ZDY5ZDg1IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuQEAgLTIyNCwxMCArMjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XG4gXHQgKiBwb2ludCAoL3N5cy9mcy9icGYpLCBpbiBjYXNlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZS5cbiBcdCAqL1xuIFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XG4rXHQvKlxuK1x0ICogT3B0aW9uYWwgbGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgc2hvdWxkIGJlIGxvYWRlZC5cbitcdCAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxuK1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbitcdCAqXG4rXHQgKiBXaXRoIGJ0Zl9tb2R1bGVfbmFtZXM6XG4rXHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XG4rXHQgKiAtIHdoZW4gYW4gZW1wdHkgbGlzdCBpcyBwcm92aWRlZCwgbm8gbW9kdWxlIEJURnMgYXJlIGxvYWRlZDtcbitcdCAqIC0gd2hlbiBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCBhcyBiZWZvcmUuXG4rXHQgKlxuK1x0ICogVGhlIGxpc3QgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlIC1FSU5WQUwgaXNcbitcdCAqIHJldHVybmVkLlxuK1x0ICpcbitcdCAqIFRoaXMgYWZmZWN0czpcbitcdCAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzO1xuK1x0ICogLSBCVEYtYmFzZWQgcmVzb2x1dGlvbiBvZiBmdW5jdGlvbiBhdHRhY2ggdGFyZ2V0cyBmb3JcbitcdCAqICAgZmVudHJ5L2ZleGl0L2Ztb2RfcmV0L2ZyZXBsYWNlL0xTTSBwcm9ncmFtcztcbitcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xuK1x0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cbitcdCAqL1xuK1x0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4rXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiBcbiBcdHNpemVfdCA6MDtcbiB9O1xuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcbisjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RjNzJiZWYwMTRjOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICsxLDEzOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFwiXG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbitcdCk7XG4rXG4rXHQvKiBWZXJpZnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi9cbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGRlZmF1bHRcIik7XG4rXG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1x0c2tlbCA9IE5VTEw7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfT0socmV0LCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcIik7XG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rLypcbisgKiBWZXJpZnkgdGhhdCBhbiB1bnJlcXVlc3RlZCBtb2R1bGUgQlRGIGlzIHNraXBwZWQuIFRoZSBCUEYgcHJvZ3JhbVxuKyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXG4rICogYnRmX21vZHVsZV9uYW1lcywgc28gaXRzIEJURiBpcyBza2lwcGVkIGFuZCB0aGUgQlBGIHByb2dyYW0gZmFpbHMgdG8gbG9hZC5cbisgKi9cbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcIm1vZHVsZV9ub25leGlzdFwiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbitcdCk7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFwiKTtcbitcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGFuIGVtcHR5IGZpbHRlciBza2lwcyBsb2FkaW5nIGFsbCBtb2R1bGUgQlRGcy4gVGhlIEJQRlxuKyAqIHByb2dyYW0gcmVxdWlyZXMgYnBmX3Rlc3Rtb2QgQlRGLCBzbyBpdCBmYWlscyB0byBsb2FkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcIlwiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHlcIik7XG4rXG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuK1x0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXCJcIiB9O1xuK1x0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7XG4rXHRcdFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdG1vZFwiLFxuK1x0fTtcbitcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuK1x0XHQgIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIG51bGxcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7XG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4rXHRcdCAgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZHVwbGljYXRlX25hbWVzO1xuK1x0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcbitcdFx0ICBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVwiKTtcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXG4re1xuK1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJ0Zl9tb2R1bGVfbmFtZXNfbG9hZFwiKSlcbitcdFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJ0Zl9tb2R1bGVfbmFtZXNfc2tpcFwiKSlcbitcdFx0YnRmX21vZHVsZV9uYW1lc19za2lwKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHlcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkXCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX2ludmFsaWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICsxLDEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rU0VDKFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfbmFtZXMpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE0OjAyOjE2Ljc1ODA0MTg0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDgwOTQ2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vIEtlcm5lbCBGdXp6aW5nIE5lZWRlZCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGFuZCBzb21lIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgdG91Y2hlZC4gRXhjZWxsZW50LCBJIGxpa2Ugc2VlaW5nIHRoYXQgZGlzdGluY3Rpb24uIE5vIG1vZGlmaWNhdGlvbnMgdW5kZXIgYGtlcm5lbC9gLCBgbmV0L2AsIGBkcml2ZXJzL2AsIG9yIGFueSBvZiB0aG9zZSBjb3JlIGtlcm5lbCBkaXJlY3Rvcmllcy4gVGhpcyBpcyBwdXJlbHkgdXNlci1zcGFjZSBzdHVmZjogbGliYnBmLCBhbmQgdGVzdHMgZm9yIHRoYXQgbGliLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYWZmZWN0IHRoZSBrZXJuZWwncyBmdXp6aW5nIHN0cmF0ZWd5PyBTeXprYWxsZXIsIGZvciBpbnN0YW5jZSwgZnV6emVzIHRoZSBrZXJuZWwgKnRocm91Z2gqIHN5c2NhbGxzLCByaWdodD8gSXQgZG9lc24ndCBkaXJlY3RseSB0YXJnZXQgbGliYnBmLiBJdCBtaWdodCAqdXNlKiBsaWJicGYgYXMgcGFydCBvZiBpdHMgc2V0dXAsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgY29kZS4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHVzZXItc3BhY2UgdG9vbGluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBsaWJicGYgYW5kIGl0cyB0ZXN0cywgdGhpcyBpc24ndCBnb2luZyB0byBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgZm9yIGEga2VybmVsIGZ1enplciBsaWtlIFN5emthbGxlci5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRpbWUuLi4gb2theSwgY29uZmlybWluZyB0aGUgbGlzdCBvZiBmaWxlcyBtb2RpZmllZDogYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNgLiBZZXAsIGFsbCB1bmRlciBgdG9vbHMvYC4gTm8ga2VybmVsIG1vZGlmaWNhdGlvbnMgZGV0ZWN0ZWQuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBrZXJuZWwtbGV2ZWwgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MywiT3V0cHV0VG9rZW5zIjo2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE0OjAyOjI2LjgzODk5MTA2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTQ6MDI6MjYuODM5MDI5ODMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdvspw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 13:19:16 +0000 UTC FinishedAt: 2026-08-26 14:02:27 +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+CgkJCTx0ZD4yMDI2LzA4LzI2IDE0OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlYTMxZWRlMDVlNDRkZjA5MzIyMDJkZWRkZGUwYjVmZTg1OGZiZWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxNDowMjoxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uMWYwNjFmNDg3M2I1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC03NzksNiAmIzQzOzc3OSw5IEBAIHN0cnVjdCBicGZfb2JqZWN0IHtcbiBcdGNoYXIgKnRva2VuX3BhdGg7XG4gXHRpbnQgdG9rZW5fZmQ7XG4gXG4mIzQzO1x0Y2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO1x0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO1xuIFx0Y2hhciBwYXRoW107XG4gfTtcbiBcbkBAIC01ODAzLDYgJiM0Mzs1ODA2LDk5IEBAIGludCBicGZfY29yZV9hZGRfY2FuZHMoc3RydWN0IGJwZl9jb3JlX2NhbmQgKmxvY2FsX2NhbmQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xuJiM0MztcdHpmcmVlKFx1MDAyNm9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKTtcbiYjNDM7XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBjaGFyICoqbmFtZXM7XG4mIzQzO1x0c2l6ZV90IGksIGosIGNudDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRuYW1lcyA9IE9QVFNfR0VUKG9wdHMsIGJ0Zl9tb2R1bGVfbmFtZXMsIE5VTEwpO1xuJiM0MztcdGlmICghbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQWxsb2NhdGUgb25lIGVudHJ5IGZvciBhbiBlbXB0eSBsaXN0IHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlXG4mIzQzO1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcbiYjNDM7XHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuJiM0MztcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY250OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0aWYgKCFuYW1lc1tpXSB8fCAhbmFtZXNbaV1bMF0pIHtcbiYjNDM7XHRcdFx0cHJfd2FybihcJiMzNDtpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGomIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cHJfd2FybihcJiMzNDtkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAmIzM5OyVzJiMzOTtcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHRuYW1lc1tpXSk7XG4mIzQzO1x0XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XG4mIzQzO1x0XHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzW2ldKSB7XG4mIzQzO1x0XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyYjNDM7JiM0Mzs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGlzX21vZHVsZV9idGZfbmVlZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgaTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfZGVidWcoXCYjMzQ7c2tpcHBpbmcgbW9kdWxlIEJURiAmIzM5OyVzJiMzOTssIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXFxuXCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzIFx1MDAyNlx1MDAyNiAhb2JqLVx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIG9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cdTAwM2VidGZfbW9kdWxlX2NudDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiB7XG4gXHRzdHJ1Y3QgYnBmX2J0Zl9pbmZvIGluZm87XG5AQCAtNTgyNSw2ICYjNDM7NTkyMSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0aWYgKCFrZXJuZWxfc3VwcG9ydHMob2JqLCBGRUFUX01PRFVMRV9CVEYpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHR3aGlsZSAodHJ1ZSkge1xuIFx0XHRlcnIgPSBicGZfYnRmX2dldF9uZXh0X2lkKGlkLCBcdTAwMjZpZCk7XG4gXHRcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVycm5vID09IEVOT0VOVClcbkBAIC01ODY3LDYgJiM0Mzs1OTY2LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHRpZiAoIWlzX21vZHVsZV9idGZfbmVlZGVkKG9iaiwgbmFtZSkpIHtcbiYjNDM7XHRcdFx0Y2xvc2UoZmQpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdGJ0ZiA9IGJ0Zl9nZXRfZnJvbV9mZChmZCwgb2JqLVx1MDAzZWJ0Zl92bWxpbnV4KTtcbiBcdFx0ZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpO1xuIFx0XHRpZiAoZXJyKSB7XG5AQCAtNTg5MSw2ICYjNDM7NTk5NSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKG9iaikpXG4mIzQzO1x0XHRcdGJyZWFrO1xuIFx0fVxuIFxuIFx0aWYgKGVycikge1xuQEAgLTg1MDgsNiAmIzQzOzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGJwZl9vYmplY3RfaW5pdF9idGZfbW9kdWxlX25hbWVzKG9iaiwgb3B0cyk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7XG4gXHRlcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2NvbGxlY3RfZXh0ZXJucyhvYmopO1xuQEAgLTk2MjksNiAmIzQzOzk3NDAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4gXHRcdGNsb3NlKG9iai1cdTAwM2VqdW1wdGFibGVfbWFwc1tpXS5mZCk7XG4gXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlanVtcHRhYmxlX21hcHMpO1xuIFxuJiM0MztcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4mIzQzO1xuIFx0ZnJlZShvYmopO1xuIH1cbiBcbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5oIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuaW5kZXggYjk2NWFkNTcxNTQwMy4uYjhjMWQ5OGQ2OWQ4NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcbkBAIC0yMjQsMTAgJiM0MzsyMjQsMzIgQEAgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzIHtcbiBcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxuIFx0ICovXG4gXHRjb25zdCBjaGFyICpicGZfdG9rZW5fcGF0aDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXG4mIzQzO1x0ICogbnJfYnRmX21vZHVsZV9uYW1lcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluXG4mIzQzO1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdpdGggYnRmX21vZHVsZV9uYW1lczpcbiYjNDM7XHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7XG4mIzQzO1x0ICogLSB3aGVuIE5VTEwsIGFsbCBtb2R1bGUgQlRGcyBhcmUgbG9hZGVkIGFzIGJlZm9yZS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzXG4mIzQzO1x0ICogcmV0dXJuZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGlzIGFmZmVjdHM6XG4mIzQzO1x0ICogLSBCUEYgQ08tUkUgcmVsb2NhdGlvbnMgYWdhaW5zdCB0eXBlcyBkZWZpbmVkIGluIG1vZHVsZXM7XG4mIzQzO1x0ICogLSBCVEYtYmFzZWQgcmVzb2x1dGlvbiBvZiBmdW5jdGlvbiBhdHRhY2ggdGFyZ2V0cyBmb3JcbiYjNDM7XHQgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7XG4mIzQzO1x0ICogLSBzdHJ1Y3Rfb3BzIGtlcm5lbCB0eXBlIHJlc29sdXRpb247XG4mIzQzO1x0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjb25zdCBjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcbiYjNDM7XHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiBcbiBcdHNpemVfdCA6MDtcbiB9O1xuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcbiYjNDM7I2RlZmluZSBicGZfb2JqZWN0X29wZW5fb3B0c19fbGFzdF9maWVsZCBucl9idGZfbW9kdWxlX25hbWVzXG4gXG4gLyoqXG4gICogQGJyaWVmICoqYnBmX29iamVjdF9fb3BlbigpKiogY3JlYXRlcyBhIGJwZl9vYmplY3QgYnkgb3BlbmluZ1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjNkYzcyYmVmMDE0Yzhcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xuQEAgLTAsMCAmIzQzOzEsMTM5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcJiMzNDtidGZfbW9kdWxlX25hbWVzLnNrZWwuaFwmIzM0O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7IH07XG4mIzQzO1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4mIzQzO1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4mIzQzO1x0KTtcbiYjNDM7XG4mIzQzO1x0LyogVmVyaWZ5IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovXG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhOVUxMKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGRlZmF1bHRcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX09LKHJldCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCBkZWZhdWx0XCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7XHRza2VsID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuJiM0MztcdEFTU0VSVF9PSyhyZXQsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcJiMzNDspO1xuJiM0MztvdXQ6XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW1cbiYjNDM7ICogcmVxdWlyZXMgdGhlIEJURiBvZiBicGZfdGVzdG1vZCwgYnV0IGJwZl90ZXN0bW9kIGlzIG5vdCBzcGVjaWZpZWQgaW5cbiYjNDM7ICogYnRmX21vZHVsZV9uYW1lcywgc28gaXRzIEJURiBpcyBza2lwcGVkIGFuZCB0aGUgQlBGIHByb2dyYW0gZmFpbHMgdG8gbG9hZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcJiMzNDttb2R1bGVfbm9uZXhpc3RcJiMzNDsgfTtcbiYjNDM7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXG4mIzQzO1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcbiYjNDM7XHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4mIzQzO1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19sb2FkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcbiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFwmIzM0O1wmIzM0OyB9O1xuJiM0MztcbiYjNDM7XHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbiYjNDM7XHRcdC5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLFxuJiM0MztcdCk7XG4mIzQzO1xuJiM0MztcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcbiYjNDM7XHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHlcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuJiM0MztcdGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IE5VTEwgfTtcbiYjNDM7XHRjb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyBcJiMzNDtcJiMzNDsgfTtcbiYjNDM7XHRjb25zdCBjaGFyICpkdXBsaWNhdGVfbmFtZXNbXSA9IHtcbiYjNDM7XHRcdFwmIzM0O2JwZl90ZXN0bW9kXCYjMzQ7LCBcJiMzNDticGZfdGVzdG1vZFwmIzM0OyxcbiYjNDM7XHR9O1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuJiM0MztcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBuYW1lcyxcbiYjNDM7XHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbiYjNDM7XHQpO1xuJiM0MztcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuJiM0MztcdFx0ICBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgbnVsbFwmIzM0Oyk7XG4mIzQzO1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbiYjNDM7XG4mIzQzO1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7XG4mIzQzO1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbiYjNDM7XHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcbiYjNDM7XHRcdCAgXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5XCYjMzQ7KTtcbiYjNDM7XHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuJiM0MztcbiYjNDM7XHRvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBkdXBsaWNhdGVfbmFtZXM7XG4mIzQzO1x0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcbiYjNDM7XHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuJiM0MztcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuJiM0MztcdFx0ICBcJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZHVwbGljYXRlIG5hbWVcJiMzNDspO1xuJiM0MztcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWVudi5oYXNfdGVzdG1vZCkge1xuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXCYjMzQ7YnRmX21vZHVsZV9uYW1lc19sb2FkXCYjMzQ7KSlcbiYjNDM7XHRcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX3NraXBcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19za2lwKCk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfZW1wdHlcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19lbXB0eSgpO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcJiMzNDtidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcJiMzNDspKVxuJiM0MztcdFx0YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbkBAIC0wLDAgJiM0MzsxLDEzIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl90cmFjaW5nLmhcdTAwM2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0codGVzdF9idGZfbW9kdWxlX25hbWVzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCYjMzQ7bGljZW5zZVwmIzM0OykgPSBcJiMzNDtHUExcJiMzNDs7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTQ6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSB0b29scyAobGliYnBmKSBhbmQgc2VsZnRlc3RzLiBJdCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhZWEzMWVkZTA1ZTQ0ZGYwOTMyMjAyZGVkZGRlMGI1ZmU4NThmYmVjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgMjYgMTQ6MDI6MTMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuYwppbmRleCA1MTRlNGU5ZGFhODI1Li4xZjA2MWY0ODczYjU1IDEwMDY0NAotLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMKQEAgLTc3OSw2ICYjNDM7Nzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3QgewogCWNoYXIgKnRva2VuX3BhdGg7CiAJaW50IHRva2VuX2ZkOwogCiYjNDM7CWNoYXIgKipidGZfbW9kdWxlX25hbWVzOwomIzQzOwlzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lczsKJiM0MzsKIAljaGFyIHBhdGhbXTsKIH07CiAKQEAgLTU4MDMsNiAmIzQzOzU4MDYsOTkgQEAgaW50IGJwZl9jb3JlX2FkZF9jYW5kcyhzdHJ1Y3QgYnBmX2NvcmVfY2FuZCAqbG9jYWxfY2FuZCwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiYjNDM7ewomIzQzOwlzaXplX3QgaTsKJiM0MzsKJiM0MzsJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KQomIzQzOwkJemZyZWUoJmFtcDtvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXNbaV0pOwomIzQzOwl6ZnJlZSgmYW1wO29iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyk7CiYjNDM7CW9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaiwKJiM0MzsJCQkJCSAgICBjb25zdCBzdHJ1Y3QgYnBmX29iamVjdF9vcGVuX29wdHMgKm9wdHMpCiYjNDM7ewomIzQzOwljb25zdCBjaGFyICoqbmFtZXM7CiYjNDM7CXNpemVfdCBpLCBqLCBjbnQ7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CW5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7CiYjNDM7CWlmICghbmFtZXMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJY250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZQomIzQzOwkgKiBkZWZhdWx0IGJlaGF2aW9yLgomIzQzOwkgKi8KJiM0MzsJb2JqLSZndDtidGZfbW9kdWxlX25hbWVzID0gY2FsbG9jKGNudCA/OiAxLAomIzQzOwkJCQkgICAgICAgc2l6ZW9mKCpvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpKTsKJiM0MzsJaWYgKCFvYmotJmd0O2J0Zl9tb2R1bGVfbmFtZXMpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGNudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWlmICghbmFtZXNbaV0gfHwgIW5hbWVzW2ldWzBdKSB7CiYjNDM7CQkJcHJfd2FybigmIzM0O2ludmFsaWQga2VybmVsIG1vZHVsZSBCVEYgbmFtZSBhdCBpbmRleCAlenVcbiYjMzQ7LCBpKTsKJiM0MzsJCQllcnIgPSAtRUlOVkFMOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWZvciAoaiA9IDA7IGogJmx0OyBpOyBqJiM0MzsmIzQzOykgewomIzQzOwkJCWlmIChzdHJjbXAob2JqLSZndDtidGZfbW9kdWxlX25hbWVzW2pdLCBuYW1lc1tpXSkgPT0gMCkgewomIzQzOwkJCQlwcl93YXJuKCYjMzQ7ZHVwbGljYXRlIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgJiMzOTslcyYjMzk7XG4mIzM0OywKJiM0MzsJCQkJCW5hbWVzW2ldKTsKJiM0MzsJCQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCQkJZ290byBlcnJfb3V0OwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7CiYjNDM7CQlpZiAoIW9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tpXSkgewomIzQzOwkJCWVyciA9IC1FTk9NRU07CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJb2JqLSZndDtucl9idGZfbW9kdWxlX25hbWVzJiM0MzsmIzQzOzsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfb3V0OgomIzQzOwlicGZfb2JqZWN0X2ZyZWVfYnRmX21vZHVsZV9uYW1lcyhvYmopOwomIzQzOwlyZXR1cm4gZXJyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBpc19tb2R1bGVfYnRmX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc2l6ZV90IGk7CiYjNDM7CiYjNDM7CWlmICghb2JqLSZndDtidGZfbW9kdWxlX25hbWVzKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoc3RyY21wKG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMCkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9kZWJ1ZygmIzM0O3NraXBwaW5nIG1vZHVsZSBCVEYgJiMzOTslcyYjMzk7LCBub3QgaW4gYnRmX21vZHVsZV9uYW1lc1xuJiMzNDssIG5hbWUpOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9iai0mZ3Q7YnRmX21vZHVsZV9uYW1lcyAmYW1wOyZhbXA7ICFvYmotJmd0O25yX2J0Zl9tb2R1bGVfbmFtZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiYjNDM7ewomIzQzOwlyZXR1cm4gb2JqLSZndDtidGZfbW9kdWxlX25hbWVzICZhbXA7JmFtcDsKJiM0MzsJICAgICAgIG9iai0mZ3Q7bnJfYnRmX21vZHVsZV9uYW1lcyA9PSBvYmotJmd0O2J0Zl9tb2R1bGVfY250OwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBicGZfYnRmX2luZm8gaW5mbzsKQEAgLTU4MjUsNiAmIzQzOzU5MjEsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAlpZiAoIWtlcm5lbF9zdXBwb3J0cyhvYmosIEZFQVRfTU9EVUxFX0JURikpCiAJCXJldHVybiAwOwogCiYjNDM7CWlmIChub19tb2R1bGVfYnRmc19uZWVkZWQob2JqKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXdoaWxlICh0cnVlKSB7CiAJCWVyciA9IGJwZl9idGZfZ2V0X25leHRfaWQoaWQsICZhbXA7aWQpOwogCQlpZiAoZXJyICZhbXA7JmFtcDsgZXJybm8gPT0gRU5PRU5UKQpAQCAtNTg2Nyw2ICYjNDM7NTk2NiwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iaikKIAkJCWNvbnRpbnVlOwogCQl9CiAKJiM0MzsJCWlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkgewomIzQzOwkJCWNsb3NlKGZkKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJYnRmID0gYnRmX2dldF9mcm9tX2ZkKGZkLCBvYmotJmd0O2J0Zl92bWxpbnV4KTsKIAkJZXJyID0gbGliYnBmX2dldF9lcnJvcihidGYpOwogCQlpZiAoZXJyKSB7CkBAIC01ODkxLDYgJiM0Mzs1OTk1LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCQlicmVhazsKIAkJfQogCQlvYmotJmd0O2J0Zl9tb2R1bGVfY250JiM0MzsmIzQzOzsKJiM0MzsKJiM0MzsJCWlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChlcnIpIHsKQEAgLTg1MDgsNiAmIzQzOzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZiwKIAkJfQogCX0KIAomIzQzOwllcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTsKIAllcnIgPSBlcnIgPyA6IGJwZl9vYmplY3RfX2VsZl9jb2xsZWN0KG9iaik7CiAJZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTsKQEAgLTk2MjksNiAmIzQzOzk3NDAsOCBAQCB2b2lkIGJwZl9vYmplY3RfX2Nsb3NlKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopCiAJCWNsb3NlKG9iai0mZ3Q7anVtcHRhYmxlX21hcHNbaV0uZmQpOwogCXpmcmVlKCZhbXA7b2JqLSZndDtqdW1wdGFibGVfbWFwcyk7CiAKJiM0MzsJYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTsKJiM0MzsKIAlmcmVlKG9iaik7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oCmluZGV4IGI5NjVhZDU3MTU0MDMuLmI4YzFkOThkNjlkODUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL2JwZi9saWJicGYuaApAQCAtMjI0LDEwICYjNDM7MjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7CiAJICogcG9pbnQgKC9zeXMvZnMvYnBmKSwgaW4gY2FzZSB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUuCiAJICovCiAJY29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7CiYjNDM7CS8qCiYjNDM7CSAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuCiYjNDM7CSAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbgomIzQzOwkgKiBidGZfbW9kdWxlX25hbWVzLgomIzQzOwkgKgomIzQzOwkgKiBXaXRoIGJ0Zl9tb2R1bGVfbmFtZXM6CiYjNDM7CSAqIC0gd2hlbiBwcm92aWRlZCwgb25seSB0aGUgQlRGcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgYXJlIGxvYWRlZDsKJiM0MzsJICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7CiYjNDM7CSAqIC0gd2hlbiBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCBhcyBiZWZvcmUuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzCiYjNDM7CSAqIHJldHVybmVkLgomIzQzOwkgKgomIzQzOwkgKiBUaGlzIGFmZmVjdHM6CiYjNDM7CSAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzOwomIzQzOwkgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvcgomIzQzOwkgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7CiYjNDM7CSAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uOwomIzQzOwkgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLgomIzQzOwkgKi8KJiM0MzsJY29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7CiYjNDM7CXNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzOwogCiAJc2l6ZV90IDowOwogfTsKLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGgKJiM0MzsjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXMKIAogLyoqCiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RjNzJiZWYwMTRjOAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuYwpAQCAtMCwwICYjNDM7MSwxMzkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOyNpbmNsdWRlICZsdDt0ZXN0X3Byb2dzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDtidGZfbW9kdWxlX25hbWVzLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgJiMzNDticGZfdGVzdG1vZCYjMzQ7IH07CiYjNDM7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsCiYjNDM7CQkubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsCiYjNDM7CSk7CiYjNDM7CiYjNDM7CS8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKE5VTEwpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfT0socmV0LCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdCYjMzQ7KTsKJiM0MzsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsJc2tlbCA9IE5VTEw7CiYjNDM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7CiYjNDM7CUFTU0VSVF9PSyhyZXQsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gdW5yZXF1ZXN0ZWQgbW9kdWxlIEJURiBpcyBza2lwcGVkLiBUaGUgQlBGIHByb2dyYW0KJiM0MzsgKiByZXF1aXJlcyB0aGUgQlRGIG9mIGJwZl90ZXN0bW9kLCBidXQgYnBmX3Rlc3Rtb2QgaXMgbm90IHNwZWNpZmllZCBpbgomIzQzOyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19za2lwKHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7CiYjNDM7CWludCByZXQ7CiYjNDM7CXN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgJiMzNDttb2R1bGVfbm9uZXhpc3QmIzM0OyB9OwomIzQzOwomIzQzOwlMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cywKJiM0MzsJCS5idGZfbW9kdWxlX25hbWVzID0gbW9kX25hbWVzLAomIzQzOwkJLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLAomIzQzOwkpOwomIzQzOwomIzQzOwlza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKCZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpOwomIzQzOwlBU1NFUlRfRVEocmV0LCAtRVNSQ0gsICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fbG9hZCYjMzQ7KTsKJiM0MzsKJiM0MztvdXQ6CiYjNDM7CWJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogVmVyaWZ5IHRoYXQgYW4gZW1wdHkgZmlsdGVyIHNraXBzIGxvYWRpbmcgYWxsIG1vZHVsZSBCVEZzLiBUaGUgQlBGCiYjNDM7ICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19lbXB0eSh2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMOwomIzQzOwlpbnQgcmV0OwomIzQzOwlzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7ICYjMzQ7JiMzNDsgfTsKJiM0MzsKJiM0MzsJTElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsCiYjNDM7CQkuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcywKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHkmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJcmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTsKJiM0MzsJQVNTRVJUX0VRKHJldCwgLUVTUkNILCAmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHkmIzM0Oyk7CiYjNDM7CiYjNDM7b3V0OgomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2ludmFsaWQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDsKJiM0MzsJY29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9OwomIzQzOwljb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyAmIzM0OyYjMzQ7IH07CiYjNDM7CWNvbnN0IGNoYXIgKmR1cGxpY2F0ZV9uYW1lc1tdID0gewomIzQzOwkJJiMzNDticGZfdGVzdG1vZCYjMzQ7LCAmIzM0O2JwZl90ZXN0bW9kJiMzNDssCiYjNDM7CX07CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLAomIzQzOwkJLmJ0Zl9tb2R1bGVfbmFtZXMgPSBuYW1lcywKJiM0MzsJCS5ucl9idGZfbW9kdWxlX25hbWVzID0gMSwKJiM0MzsJKTsKJiM0MzsKJiM0MzsJc2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cygmYW1wO29wdHMpOwomIzQzOwlBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCwKJiM0MzsJCSAgJiMzNDtidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgbnVsbCYjMzQ7KTsKJiM0MzsJYnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTsKJiM0MzsKJiM0MzsJb3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGVtcHR5JiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzOwomIzQzOwlvcHRzLmJ0Zl9tb2R1bGVfbmFtZXMgPSBkdXBsaWNhdGVfbmFtZXM7CiYjNDM7CW9wdHMubnJfYnRmX21vZHVsZV9uYW1lcyA9IDI7CiYjNDM7CXNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoJmFtcDtvcHRzKTsKJiM0MzsJQVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsCiYjNDM7CQkgICYjMzQ7YnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIGR1cGxpY2F0ZSBuYW1lJiMzNDspOwomIzQzOwlidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKQomIzQzO3sKJiM0MzsJaWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHsKJiM0MzsJCXRlc3RfX3NraXAoKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfbG9hZCYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfc2tpcCYjMzQ7KSkKJiM0MzsJCWJ0Zl9tb2R1bGVfbmFtZXNfc2tpcCgpOwomIzQzOwomIzQzOwlpZiAodGVzdF9fc3RhcnRfc3VidGVzdCgmIzM0O2J0Zl9tb2R1bGVfbmFtZXNfZW1wdHkmIzM0OykpCiYjNDM7CQlidGZfbW9kdWxlX25hbWVzX2VtcHR5KCk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KCYjMzQ7YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkJiMzNDspKQomIzQzOwkJYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMjMyYWRjMGYzM2Y2ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmMKQEAgLTAsMCAmIzQzOzEsMTMgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsKJiM0MztTRUMoJiMzNDtmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0JiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcykKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztjaGFyIF9saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE0OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwODMKCQkJCQkJCW91dHB1dDogNjIKCQkJCQkJCXRob3VnaHRzOiAzMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm8gS2VybmVsIEZ1enppbmcgTmVlZGVkKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGFuZCBzb21lIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgdG91Y2hlZC4gRXhjZWxsZW50LCBJIGxpa2Ugc2VlaW5nIHRoYXQgZGlzdGluY3Rpb24uIE5vIG1vZGlmaWNhdGlvbnMgdW5kZXIgYGtlcm5lbC9gLCBgbmV0L2AsIGBkcml2ZXJzL2AsIG9yIGFueSBvZiB0aG9zZSBjb3JlIGtlcm5lbCBkaXJlY3Rvcmllcy4gVGhpcyBpcyBwdXJlbHkgdXNlci1zcGFjZSBzdHVmZjogbGliYnBmLCBhbmQgdGVzdHMgZm9yIHRoYXQgbGliLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogZG9lcyB0aGlzIGFmZmVjdCB0aGUga2VybmVsJiMzOTtzIGZ1enppbmcgc3RyYXRlZ3k/IFN5emthbGxlciwgZm9yIGluc3RhbmNlLCBmdXp6ZXMgdGhlIGtlcm5lbCAqdGhyb3VnaCogc3lzY2FsbHMsIHJpZ2h0PyBJdCBkb2VzbiYjMzk7dCBkaXJlY3RseSB0YXJnZXQgbGliYnBmLiBJdCBtaWdodCAqdXNlKiBsaWJicGYgYXMgcGFydCBvZiBpdHMgc2V0dXAsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgY29kZS4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHVzZXItc3BhY2UgdG9vbGluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBsaWJicGYgYW5kIGl0cyB0ZXN0cywgdGhpcyBpc24mIzM5O3QgZ29pbmcgdG8gaW50cm9kdWNlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGZvciBhIGtlcm5lbCBmdXp6ZXIgbGlrZSBTeXprYWxsZXIuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZS4uLiBva2F5LCBjb25maXJtaW5nIHRoZSBsaXN0IG9mIGZpbGVzIG1vZGlmaWVkOiBgdG9vbHMvbGliL2JwZi9saWJicGYuY2AsIGB0b29scy9saWIvYnBmL2xpYmJwZi5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY2AsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY2AuIFllcCwgYWxsIHVuZGVyIGB0b29scy9gLiBObyBrZXJuZWwgbW9kaWZpY2F0aW9ucyBkZXRlY3RlZC4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgaW4gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCB3YXJyYW50IGtlcm5lbC1sZXZlbCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE0OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxNDowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTQ6MDI6MTUuNDE5MTYxOTc3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0MTk4ODUzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKGxpYmJwZikgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxNDowMjoxNS40MTkxNjk5NjdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzgzNTE0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZWEzMWVkZTA1ZTQ0ZGYwOTMyMjAyZGVkZGRlMGI1ZmU4NThmYmVjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDI2IDE0OjAyOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmMgYi90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuaW5kZXggNTE0ZTRlOWRhYTgyNS4uMWYwNjFmNDg3M2I1NSAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvYnBmL2xpYmJwZi5jXFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xcbkBAIC03NzksNiArNzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xcbiBcXHRjaGFyICp0b2tlbl9wYXRoO1xcbiBcXHRpbnQgdG9rZW5fZmQ7XFxuIFxcbitcXHRjaGFyICoqYnRmX21vZHVsZV9uYW1lcztcXG4rXFx0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcbiBcXHRjaGFyIHBhdGhbXTtcXG4gfTtcXG4gXFxuQEAgLTU4MDMsNiArNTgwNiw5OSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4re1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzOyBpKyspXFxuK1xcdFxcdHpmcmVlKFxcdTAwMjZvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pO1xcbitcXHR6ZnJlZShcXHUwMDI2b2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKTtcXG4rXFx0b2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID0gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGJwZl9vYmplY3Rfb3Blbl9vcHRzICpvcHRzKVxcbit7XFxuK1xcdGNvbnN0IGNoYXIgKipuYW1lcztcXG4rXFx0c2l6ZV90IGksIGosIGNudDtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdG5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7XFxuK1xcdGlmICghbmFtZXMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y250ID0gT1BUU19HRVQob3B0cywgbnJfYnRmX21vZHVsZV9uYW1lcywgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBBbGxvY2F0ZSBvbmUgZW50cnkgZm9yIGFuIGVtcHR5IGxpc3QgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGVcXG4rXFx0ICogZGVmYXVsdCBiZWhhdmlvci5cXG4rXFx0ICovXFxuK1xcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyA9IGNhbGxvYyhjbnQgPzogMSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHNpemVvZigqb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKSk7XFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjbnQ7IGkrKykge1xcbitcXHRcXHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xcbitcXHRcXHRcXHRwcl93YXJuKFxcXCJpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxcXG5cXFwiLCBpKTtcXG4rXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRmb3IgKGogPSAwOyBqIFxcdTAwM2MgaTsgaisrKSB7XFxuK1xcdFxcdFxcdGlmIChzdHJjbXAob2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzW2pdLCBuYW1lc1tpXSkgPT0gMCkge1xcbitcXHRcXHRcXHRcXHRwcl93YXJuKFxcXCJkdXBsaWNhdGUga2VybmVsIG1vZHVsZSBCVEYgbmFtZSAnJXMnXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRuYW1lc1tpXSk7XFxuK1xcdFxcdFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRvYmotXFx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0gPSBzdHJkdXAobmFtZXNbaV0pO1xcbitcXHRcXHRpZiAoIW9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdG9iai1cXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcysrO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rZXJyX291dDpcXG4rXFx0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgaXNfbW9kdWxlX2J0Zl9uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRzaXplX3QgaTtcXG4rXFxuK1xcdGlmICghb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7IGkrKykge1xcbitcXHRcXHRpZiAoc3RyY21wKG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSwgbmFtZSkgPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFxuK1xcdHByX2RlYnVnKFxcXCJza2lwcGluZyBtb2R1bGUgQlRGICclcycsIG5vdCBpbiBidGZfbW9kdWxlX25hbWVzXFxcXG5cXFwiLCBuYW1lKTtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBub19tb2R1bGVfYnRmc19uZWVkZWQoY29uc3Qgc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4re1xcbitcXHRyZXR1cm4gb2JqLVxcdTAwM2VidGZfbW9kdWxlX25hbWVzIFxcdTAwMjZcXHUwMDI2ICFvYmotXFx1MDAzZW5yX2J0Zl9tb2R1bGVfbmFtZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGFsbF9uZWVkZWRfbW9kdWxlX2J0ZnNfbG9hZGVkKGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuK3tcXG4rXFx0cmV0dXJuIG9iai1cXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgb2JqLVxcdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzID09IG9iai1cXHUwMDNlYnRmX21vZHVsZV9jbnQ7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiB7XFxuIFxcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcXG5AQCAtNTgyNSw2ICs1OTIxLDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdGlmICgha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9NT0RVTEVfQlRGKSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0d2hpbGUgKHRydWUpIHtcXG4gXFx0XFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXFx1MDAyNmlkKTtcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXFxuQEAgLTU4NjcsNiArNTk2NiwxMSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xcbitcXHRcXHRcXHRjbG9zZShmZCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cXHUwMDNlYnRmX3ZtbGludXgpO1xcbiBcXHRcXHRlcnIgPSBsaWJicGZfZ2V0X2Vycm9yKGJ0Zik7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG5AQCAtNTg5MSw2ICs1OTk1LDkgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZV9idGZzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdG9iai1cXHUwMDNlYnRmX21vZHVsZV9jbnQrKztcXG4rXFxuK1xcdFxcdGlmIChhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChvYmopKVxcbitcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGVycikge1xcbkBAIC04NTA4LDYgKzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRlcnIgPSBicGZfb2JqZWN0X2luaXRfYnRmX21vZHVsZV9uYW1lcyhvYmosIG9wdHMpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdGVyciA9IGJwZl9vYmplY3RfX2VsZl9pbml0KG9iaik7XFxuIFxcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcXG4gXFx0ZXJyID0gZXJyID8gOiBicGZfb2JqZWN0X19jb2xsZWN0X2V4dGVybnMob2JqKTtcXG5AQCAtOTYyOSw2ICs5NzQwLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxcbiBcXHRcXHRjbG9zZShvYmotXFx1MDAzZWp1bXB0YWJsZV9tYXBzW2ldLmZkKTtcXG4gXFx0emZyZWUoXFx1MDAyNm9iai1cXHUwMDNlanVtcHRhYmxlX21hcHMpO1xcbiBcXG4rXFx0YnBmX29iamVjdF9mcmVlX2J0Zl9tb2R1bGVfbmFtZXMob2JqKTtcXG4rXFxuIFxcdGZyZWUob2JqKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2JwZi9saWJicGYuaCBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi5iOGMxZDk4ZDY5ZDg1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmhcXG4rKysgYi90b29scy9saWIvYnBmL2xpYmJwZi5oXFxuQEAgLTIyNCwxMCArMjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XFxuIFxcdCAqIHBvaW50ICgvc3lzL2ZzL2JwZiksIGluIGNhc2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHVuZGVzaXJhYmxlLlxcbiBcXHQgKi9cXG4gXFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XFxuK1xcdC8qXFxuK1xcdCAqIE9wdGlvbmFsIGxpc3Qgb2Yga2VybmVsIG1vZHVsZSBuYW1lcyB3aG9zZSBCVEZzIHNob3VsZCBiZSBsb2FkZWQuXFxuK1xcdCAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxcbitcXHQgKiBidGZfbW9kdWxlX25hbWVzLlxcbitcXHQgKlxcbitcXHQgKiBXaXRoIGJ0Zl9tb2R1bGVfbmFtZXM6XFxuK1xcdCAqIC0gd2hlbiBwcm92aWRlZCwgb25seSB0aGUgQlRGcyBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgYXJlIGxvYWRlZDtcXG4rXFx0ICogLSB3aGVuIGFuIGVtcHR5IGxpc3QgaXMgcHJvdmlkZWQsIG5vIG1vZHVsZSBCVEZzIGFyZSBsb2FkZWQ7XFxuK1xcdCAqIC0gd2hlbiBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCBhcyBiZWZvcmUuXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBsaXN0IG11c3Qgbm90IGNvbnRhaW4gZHVwbGljYXRlIGVudHJpZXM7IG90aGVyd2lzZSAtRUlOVkFMIGlzXFxuK1xcdCAqIHJldHVybmVkLlxcbitcXHQgKlxcbitcXHQgKiBUaGlzIGFmZmVjdHM6XFxuK1xcdCAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzO1xcbitcXHQgKiAtIEJURi1iYXNlZCByZXNvbHV0aW9uIG9mIGZ1bmN0aW9uIGF0dGFjaCB0YXJnZXRzIGZvclxcbitcXHQgKiAgIGZlbnRyeS9mZXhpdC9mbW9kX3JldC9mcmVwbGFjZS9MU00gcHJvZ3JhbXM7XFxuK1xcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xcbitcXHQgKiAtIGV4dGVybiAoa3N5bSkgcmVzb2x1dGlvbiBmb3Iga2VybmVsIHN5bWJvbHMgZGVmaW5lZCBpbiBtb2R1bGVzLlxcbitcXHQgKi9cXG4rXFx0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XFxuK1xcdHNpemVfdCBucl9idGZfbW9kdWxlX25hbWVzO1xcbiBcXG4gXFx0c2l6ZV90IDowO1xcbiB9O1xcbi0jZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIGJwZl90b2tlbl9wYXRoXFxuKyNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgbnJfYnRmX21vZHVsZV9uYW1lc1xcbiBcXG4gLyoqXFxuICAqIEBicmllZiAqKmJwZl9vYmplY3RfX29wZW4oKSoqIGNyZWF0ZXMgYSBicGZfb2JqZWN0IGJ5IG9wZW5pbmdcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4zZGM3MmJlZjAxNGM4XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbkBAIC0wLDAgKzEsMTM5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKyNpbmNsdWRlIFxcdTAwM2N0ZXN0X3Byb2dzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFxcXCJcXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0aW50IHJldDtcXG4rXFx0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcXFwiYnBmX3Rlc3Rtb2RcXFwiIH07XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXFxuK1xcdFxcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdC8qIFZlcmlmeSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqL1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKE5VTEwpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkZWZhdWx0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX09LKHJldCwgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZGVmYXVsdFxcXCIpO1xcbitcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rXFx0c2tlbCA9IE5VTEw7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHNcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfT0socmV0LCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFxcXCIpO1xcbitvdXQ6XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFZlcmlmeSB0aGF0IGFuIHVucmVxdWVzdGVkIG1vZHVsZSBCVEYgaXMgc2tpcHBlZC4gVGhlIEJQRiBwcm9ncmFtXFxuKyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXFxuKyAqIGJ0Zl9tb2R1bGVfbmFtZXMsIHNvIGl0cyBCVEYgaXMgc2tpcHBlZCBhbmQgdGhlIEJQRiBwcm9ncmFtIGZhaWxzIHRvIGxvYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XFxuK1xcdGludCByZXQ7XFxuK1xcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXFxcIm1vZHVsZV9ub25leGlzdFxcXCIgfTtcXG4rXFxuK1xcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxcbitcXHRcXHQuYnRmX21vZHVsZV9uYW1lcyA9IG1vZF9uYW1lcyxcXG4rXFx0XFx0Lm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAxLFxcbitcXHQpO1xcbitcXG4rXFx0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcXHUwMDI2b3B0cyk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0cmV0ID0gYnRmX21vZHVsZV9uYW1lc19fbG9hZChza2VsKTtcXG4rXFx0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcXFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFxcXCIpO1xcbitcXG4rb3V0OlxcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBWZXJpZnkgdGhhdCBhbiBlbXB0eSBmaWx0ZXIgc2tpcHMgbG9hZGluZyBhbGwgbW9kdWxlIEJURnMuIFRoZSBCUEZcXG4rICogcHJvZ3JhbSByZXF1aXJlcyBicGZfdGVzdG1vZCBCVEYsIHNvIGl0IGZhaWxzIHRvIGxvYWQuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX2VtcHR5KHZvaWQpXFxuK3tcXG4rXFx0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xcbitcXHRpbnQgcmV0O1xcbitcXHRzdGF0aWMgY29uc3QgY2hhciAqbW9kX25hbWVzW10gPSB7IFxcXCJcXFwiIH07XFxuK1xcbitcXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcXG4rXFx0XFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXFxuK1xcdCk7XFxuK1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcXFwiKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xcbitcXHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFxcXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGVtcHR5XFxcIik7XFxuK1xcbitvdXQ6XFxuK1xcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfaW52YWxpZCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGZfbW9kdWxlX25hbWVzICpza2VsID0gTlVMTDtcXG4rXFx0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xcbitcXHRjb25zdCBjaGFyICplbXB0eV9uYW1lc1tdID0geyBcXFwiXFxcIiB9O1xcbitcXHRjb25zdCBjaGFyICpkdXBsaWNhdGVfbmFtZXNbXSA9IHtcXG4rXFx0XFx0XFxcImJwZl90ZXN0bW9kXFxcIiwgXFxcImJwZl90ZXN0bW9kXFxcIixcXG4rXFx0fTtcXG4rXFx0TElCQlBGX09QVFMoYnBmX29iamVjdF9vcGVuX29wdHMsIG9wdHMsXFxuK1xcdFxcdC5idGZfbW9kdWxlX25hbWVzID0gbmFtZXMsXFxuK1xcdFxcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcXG4rXFx0KTtcXG4rXFxuK1xcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXFx1MDAyNm9wdHMpO1xcbitcXHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcXG4rXFx0XFx0ICBcXFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIG51bGxcXFwiKTtcXG4rXFx0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcXG4rXFxuK1xcdG9wdHMuYnRmX21vZHVsZV9uYW1lcyA9IGVtcHR5X25hbWVzO1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXFxuK1xcdFxcdCAgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVxcXCIpO1xcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbitcXG4rXFx0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZHVwbGljYXRlX25hbWVzO1xcbitcXHRvcHRzLm5yX2J0Zl9tb2R1bGVfbmFtZXMgPSAyO1xcbitcXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFxcdTAwMjZvcHRzKTtcXG4rXFx0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXFxuK1xcdFxcdCAgXFxcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVxcXCIpO1xcbitcXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3RfYnRmX21vZHVsZV9uYW1lcyh2b2lkKVxcbit7XFxuK1xcdGlmICghZW52Lmhhc190ZXN0bW9kKSB7XFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcXFwiYnRmX21vZHVsZV9uYW1lc19sb2FkXFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfbG9hZCgpO1xcbitcXG4rXFx0aWYgKHRlc3RfX3N0YXJ0X3N1YnRlc3QoXFxcImJ0Zl9tb2R1bGVfbmFtZXNfc2tpcFxcXCIpKVxcbitcXHRcXHRidGZfbW9kdWxlX25hbWVzX3NraXAoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2VtcHR5XFxcIikpXFxuK1xcdFxcdGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTtcXG4rXFxuK1xcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFxcXCJidGZfbW9kdWxlX25hbWVzX2ludmFsaWRcXFwiKSlcXG4rXFx0XFx0YnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjIzMmFkYzBmMzNmNmVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuY1xcbkBAIC0wLDAgKzEsMTMgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2N2bWxpbnV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbitcXG4rU0VDKFxcXCJmZW50cnkvYnBmX3Rlc3Rtb2RfbG9vcF90ZXN0XFxcIilcXG4raW50IEJQRl9QUk9HKHRlc3RfYnRmX21vZHVsZV9uYW1lcylcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE0OjAyOjE2Ljc1ODA0MDU5NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEwMDgwOTg1Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgdG9vbHMgKGxpYmJwZikgYW5kIHNlbGZ0ZXN0cy4gSXQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZWEzMWVkZTA1ZTQ0ZGYwOTMyMjAyZGVkZGRlMGI1ZmU4NThmYmVjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTQ6MDI6MTMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvYnBmL2xpYmJwZi5jIGIvdG9vbHMvbGliL2JwZi9saWJicGYuY1xuaW5kZXggNTE0ZTRlOWRhYTgyNS4uMWYwNjFmNDg3M2I1NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbisrKyBiL3Rvb2xzL2xpYi9icGYvbGliYnBmLmNcbkBAIC03NzksNiArNzc5LDkgQEAgc3RydWN0IGJwZl9vYmplY3Qge1xuIFx0Y2hhciAqdG9rZW5fcGF0aDtcbiBcdGludCB0b2tlbl9mZDtcbiBcbitcdGNoYXIgKipidGZfbW9kdWxlX25hbWVzO1xuK1x0c2l6ZV90IG5yX2J0Zl9tb2R1bGVfbmFtZXM7XG4rXG4gXHRjaGFyIHBhdGhbXTtcbiB9O1xuIFxuQEAgLTU4MDMsNiArNTgwNiw5OSBAQCBpbnQgYnBmX2NvcmVfYWRkX2NhbmRzKHN0cnVjdCBicGZfY29yZV9jYW5kICpsb2NhbF9jYW5kLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKHN0cnVjdCBicGZfb2JqZWN0ICpvYmopXG4re1xuK1x0c2l6ZV90IGk7XG4rXG4rXHRpZiAoIW9iai1cdTAwM2VidGZfbW9kdWxlX25hbWVzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKVxuK1x0XHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSk7XG4rXHR6ZnJlZShcdTAwMjZvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyk7XG4rXHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9IDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMoc3RydWN0IGJwZl9vYmplY3QgKm9iaixcbitcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyAqb3B0cylcbit7XG4rXHRjb25zdCBjaGFyICoqbmFtZXM7XG4rXHRzaXplX3QgaSwgaiwgY250O1xuK1x0aW50IGVycjtcbitcbitcdG5hbWVzID0gT1BUU19HRVQob3B0cywgYnRmX21vZHVsZV9uYW1lcywgTlVMTCk7XG4rXHRpZiAoIW5hbWVzKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNudCA9IE9QVFNfR0VUKG9wdHMsIG5yX2J0Zl9tb2R1bGVfbmFtZXMsIDApO1xuK1xuK1x0LypcbitcdCAqIEFsbG9jYXRlIG9uZSBlbnRyeSBmb3IgYW4gZW1wdHkgbGlzdCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIHRoZVxuK1x0ICogZGVmYXVsdCBiZWhhdmlvci5cbitcdCAqL1xuK1x0b2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXMgPSBjYWxsb2MoY250ID86IDEsXG4rXHRcdFx0XHQgICAgICAgc2l6ZW9mKCpvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcykpO1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjbnQ7IGkrKykge1xuK1x0XHRpZiAoIW5hbWVzW2ldIHx8ICFuYW1lc1tpXVswXSkge1xuK1x0XHRcdHByX3dhcm4oXCJpbnZhbGlkIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgYXQgaW5kZXggJXp1XFxuXCIsIGkpO1xuK1x0XHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4rXG4rXHRcdGZvciAoaiA9IDA7IGogXHUwMDNjIGk7IGorKykge1xuK1x0XHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbal0sIG5hbWVzW2ldKSA9PSAwKSB7XG4rXHRcdFx0XHRwcl93YXJuKFwiZHVwbGljYXRlIGtlcm5lbCBtb2R1bGUgQlRGIG5hbWUgJyVzJ1xcblwiLFxuK1x0XHRcdFx0XHRuYW1lc1tpXSk7XG4rXHRcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHRcdH1cbitcdFx0fVxuK1xuK1x0XHRvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lc1tpXSA9IHN0cmR1cChuYW1lc1tpXSk7XG4rXHRcdGlmICghb2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0pIHtcbitcdFx0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbitcdFx0fVxuK1xuK1x0XHRvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcysrO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX291dDpcbitcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4rXHRyZXR1cm4gZXJyO1xuK31cbitcbitzdGF0aWMgYm9vbCBpc19tb2R1bGVfYnRmX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHNpemVfdCBpO1xuK1xuK1x0aWYgKCFvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcylcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lczsgaSsrKSB7XG4rXHRcdGlmIChzdHJjbXAob2JqLVx1MDAzZWJ0Zl9tb2R1bGVfbmFtZXNbaV0sIG5hbWUpID09IDApXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRwcl9kZWJ1ZyhcInNraXBwaW5nIG1vZHVsZSBCVEYgJyVzJywgbm90IGluIGJ0Zl9tb2R1bGVfbmFtZXNcXG5cIiwgbmFtZSk7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIG5vX21vZHVsZV9idGZzX25lZWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuK3tcbitcdHJldHVybiBvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcdTAwMjZcdTAwMjYgIW9iai1cdTAwM2Vucl9idGZfbW9kdWxlX25hbWVzO1xuK31cbitcbitzdGF0aWMgYm9vbCBhbGxfbmVlZGVkX21vZHVsZV9idGZzX2xvYWRlZChjb25zdCBzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuK3tcbitcdHJldHVybiBvYmotXHUwMDNlYnRmX21vZHVsZV9uYW1lcyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBvYmotXHUwMDNlbnJfYnRmX21vZHVsZV9uYW1lcyA9PSBvYmotXHUwMDNlYnRmX21vZHVsZV9jbnQ7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIHtcbiBcdHN0cnVjdCBicGZfYnRmX2luZm8gaW5mbztcbkBAIC01ODI1LDYgKzU5MjEsOSBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlX2J0ZnMoc3RydWN0IGJwZl9vYmplY3QgKm9iailcbiBcdGlmICgha2VybmVsX3N1cHBvcnRzKG9iaiwgRkVBVF9NT0RVTEVfQlRGKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAobm9fbW9kdWxlX2J0ZnNfbmVlZGVkKG9iaikpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0d2hpbGUgKHRydWUpIHtcbiBcdFx0ZXJyID0gYnBmX2J0Zl9nZXRfbmV4dF9pZChpZCwgXHUwMDI2aWQpO1xuIFx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBlcnJubyA9PSBFTk9FTlQpXG5AQCAtNTg2Nyw2ICs1OTY2LDExIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmICghaXNfbW9kdWxlX2J0Zl9uZWVkZWQob2JqLCBuYW1lKSkge1xuK1x0XHRcdGNsb3NlKGZkKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1xuIFx0XHRidGYgPSBidGZfZ2V0X2Zyb21fZmQoZmQsIG9iai1cdTAwM2VidGZfdm1saW51eCk7XG4gXHRcdGVyciA9IGxpYmJwZl9nZXRfZXJyb3IoYnRmKTtcbiBcdFx0aWYgKGVycikge1xuQEAgLTU4OTEsNiArNTk5NSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGVfYnRmcyhzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHRcdG9iai1cdTAwM2VidGZfbW9kdWxlX2NudCsrO1xuK1xuK1x0XHRpZiAoYWxsX25lZWRlZF9tb2R1bGVfYnRmc19sb2FkZWQob2JqKSlcbitcdFx0XHRicmVhaztcbiBcdH1cbiBcbiBcdGlmIChlcnIpIHtcbkBAIC04NTA4LDYgKzg2MTUsMTAgQEAgc3RhdGljIHN0cnVjdCBicGZfb2JqZWN0ICpicGZfb2JqZWN0X29wZW4oY29uc3QgY2hhciAqcGF0aCwgY29uc3Qgdm9pZCAqb2JqX2J1ZixcbiBcdFx0fVxuIFx0fVxuIFxuK1x0ZXJyID0gYnBmX29iamVjdF9pbml0X2J0Zl9tb2R1bGVfbmFtZXMob2JqLCBvcHRzKTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0ZXJyID0gYnBmX29iamVjdF9fZWxmX2luaXQob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fZWxmX2NvbGxlY3Qob2JqKTtcbiBcdGVyciA9IGVyciA/IDogYnBmX29iamVjdF9fY29sbGVjdF9leHRlcm5zKG9iaik7XG5AQCAtOTYyOSw2ICs5NzQwLDggQEAgdm9pZCBicGZfb2JqZWN0X19jbG9zZShzdHJ1Y3QgYnBmX29iamVjdCAqb2JqKVxuIFx0XHRjbG9zZShvYmotXHUwMDNlanVtcHRhYmxlX21hcHNbaV0uZmQpO1xuIFx0emZyZWUoXHUwMDI2b2JqLVx1MDAzZWp1bXB0YWJsZV9tYXBzKTtcbiBcbitcdGJwZl9vYmplY3RfZnJlZV9idGZfbW9kdWxlX25hbWVzKG9iaik7XG4rXG4gXHRmcmVlKG9iaik7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9icGYvbGliYnBmLmggYi90b29scy9saWIvYnBmL2xpYmJwZi5oXG5pbmRleCBiOTY1YWQ1NzE1NDAzLi5iOGMxZDk4ZDY5ZDg1IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuKysrIGIvdG9vbHMvbGliL2JwZi9saWJicGYuaFxuQEAgLTIyNCwxMCArMjI0LDMyIEBAIHN0cnVjdCBicGZfb2JqZWN0X29wZW5fb3B0cyB7XG4gXHQgKiBwb2ludCAoL3N5cy9mcy9icGYpLCBpbiBjYXNlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyB1bmRlc2lyYWJsZS5cbiBcdCAqL1xuIFx0Y29uc3QgY2hhciAqYnBmX3Rva2VuX3BhdGg7XG4rXHQvKlxuK1x0ICogT3B0aW9uYWwgbGlzdCBvZiBrZXJuZWwgbW9kdWxlIG5hbWVzIHdob3NlIEJURnMgc2hvdWxkIGJlIGxvYWRlZC5cbitcdCAqIG5yX2J0Zl9tb2R1bGVfbmFtZXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyBpblxuK1x0ICogYnRmX21vZHVsZV9uYW1lcy5cbitcdCAqXG4rXHQgKiBXaXRoIGJ0Zl9tb2R1bGVfbmFtZXM6XG4rXHQgKiAtIHdoZW4gcHJvdmlkZWQsIG9ubHkgdGhlIEJURnMgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGVzIGFyZSBsb2FkZWQ7XG4rXHQgKiAtIHdoZW4gYW4gZW1wdHkgbGlzdCBpcyBwcm92aWRlZCwgbm8gbW9kdWxlIEJURnMgYXJlIGxvYWRlZDtcbitcdCAqIC0gd2hlbiBOVUxMLCBhbGwgbW9kdWxlIEJURnMgYXJlIGxvYWRlZCBhcyBiZWZvcmUuXG4rXHQgKlxuK1x0ICogVGhlIGxpc3QgbXVzdCBub3QgY29udGFpbiBkdXBsaWNhdGUgZW50cmllczsgb3RoZXJ3aXNlIC1FSU5WQUwgaXNcbitcdCAqIHJldHVybmVkLlxuK1x0ICpcbitcdCAqIFRoaXMgYWZmZWN0czpcbitcdCAqIC0gQlBGIENPLVJFIHJlbG9jYXRpb25zIGFnYWluc3QgdHlwZXMgZGVmaW5lZCBpbiBtb2R1bGVzO1xuK1x0ICogLSBCVEYtYmFzZWQgcmVzb2x1dGlvbiBvZiBmdW5jdGlvbiBhdHRhY2ggdGFyZ2V0cyBmb3JcbitcdCAqICAgZmVudHJ5L2ZleGl0L2Ztb2RfcmV0L2ZyZXBsYWNlL0xTTSBwcm9ncmFtcztcbitcdCAqIC0gc3RydWN0X29wcyBrZXJuZWwgdHlwZSByZXNvbHV0aW9uO1xuK1x0ICogLSBleHRlcm4gKGtzeW0pIHJlc29sdXRpb24gZm9yIGtlcm5lbCBzeW1ib2xzIGRlZmluZWQgaW4gbW9kdWxlcy5cbitcdCAqL1xuK1x0Y29uc3QgY2hhciAqKmJ0Zl9tb2R1bGVfbmFtZXM7XG4rXHRzaXplX3QgbnJfYnRmX21vZHVsZV9uYW1lcztcbiBcbiBcdHNpemVfdCA6MDtcbiB9O1xuLSNkZWZpbmUgYnBmX29iamVjdF9vcGVuX29wdHNfX2xhc3RfZmllbGQgYnBmX3Rva2VuX3BhdGhcbisjZGVmaW5lIGJwZl9vYmplY3Rfb3Blbl9vcHRzX19sYXN0X2ZpZWxkIG5yX2J0Zl9tb2R1bGVfbmFtZXNcbiBcbiAvKipcbiAgKiBAYnJpZWYgKipicGZfb2JqZWN0X19vcGVuKCkqKiBjcmVhdGVzIGEgYnBmX29iamVjdCBieSBvcGVuaW5nXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uM2RjNzJiZWYwMTRjOFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICsxLDEzOSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rI2luY2x1ZGUgXHUwMDNjdGVzdF9wcm9ncy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJidGZfbW9kdWxlX25hbWVzLnNrZWwuaFwiXG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19sb2FkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0aW50IHJldDtcbitcdHN0YXRpYyBjb25zdCBjaGFyICptb2RfbmFtZXNbXSA9IHsgXCJicGZfdGVzdG1vZFwiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbitcdCk7XG4rXG4rXHQvKiBWZXJpZnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi9cbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoTlVMTCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZGVmYXVsdFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX09LKHJldCwgXCJidGZfbW9kdWxlX25hbWVzX19sb2FkIGRlZmF1bHRcIik7XG4rXG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1x0c2tlbCA9IE5VTEw7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfT0socmV0LCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWRcIik7XG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rLypcbisgKiBWZXJpZnkgdGhhdCBhbiB1bnJlcXVlc3RlZCBtb2R1bGUgQlRGIGlzIHNraXBwZWQuIFRoZSBCUEYgcHJvZ3JhbVxuKyAqIHJlcXVpcmVzIHRoZSBCVEYgb2YgYnBmX3Rlc3Rtb2QsIGJ1dCBicGZfdGVzdG1vZCBpcyBub3Qgc3BlY2lmaWVkIGluXG4rICogYnRmX21vZHVsZV9uYW1lcywgc28gaXRzIEJURiBpcyBza2lwcGVkIGFuZCB0aGUgQlBGIHByb2dyYW0gZmFpbHMgdG8gbG9hZC5cbisgKi9cbitzdGF0aWMgdm9pZCBidGZfbW9kdWxlX25hbWVzX3NraXAodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcIm1vZHVsZV9ub25leGlzdFwiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHRcdC5ucl9idGZfbW9kdWxlX25hbWVzID0gMSxcbitcdCk7XG4rXG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQoc2tlbCk7XG4rXHRBU1NFUlRfRVEocmV0LCAtRVNSQ0gsIFwiYnRmX21vZHVsZV9uYW1lc19fbG9hZFwiKTtcbitcbitvdXQ6XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK31cbitcbisvKlxuKyAqIFZlcmlmeSB0aGF0IGFuIGVtcHR5IGZpbHRlciBza2lwcyBsb2FkaW5nIGFsbCBtb2R1bGUgQlRGcy4gVGhlIEJQRlxuKyAqIHByb2dyYW0gcmVxdWlyZXMgYnBmX3Rlc3Rtb2QgQlRGLCBzbyBpdCBmYWlscyB0byBsb2FkLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkodm9pZClcbit7XG4rXHRzdHJ1Y3QgYnRmX21vZHVsZV9uYW1lcyAqc2tlbCA9IE5VTEw7XG4rXHRpbnQgcmV0O1xuK1x0c3RhdGljIGNvbnN0IGNoYXIgKm1vZF9uYW1lc1tdID0geyBcIlwiIH07XG4rXG4rXHRMSUJCUEZfT1BUUyhicGZfb2JqZWN0X29wZW5fb3B0cywgb3B0cyxcbitcdFx0LmJ0Zl9tb2R1bGVfbmFtZXMgPSBtb2RfbmFtZXMsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdGlmICghQVNTRVJUX09LX1BUUihza2VsLCBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBlbXB0eVwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRyZXQgPSBidGZfbW9kdWxlX25hbWVzX19sb2FkKHNrZWwpO1xuK1x0QVNTRVJUX0VRKHJldCwgLUVTUkNILCBcImJ0Zl9tb2R1bGVfbmFtZXNfX2xvYWQgZW1wdHlcIik7XG4rXG4rb3V0OlxuK1x0YnRmX21vZHVsZV9uYW1lc19fZGVzdHJveShza2VsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkKHZvaWQpXG4re1xuK1x0c3RydWN0IGJ0Zl9tb2R1bGVfbmFtZXMgKnNrZWwgPSBOVUxMO1xuK1x0Y29uc3QgY2hhciAqbmFtZXNbXSA9IHsgTlVMTCB9O1xuK1x0Y29uc3QgY2hhciAqZW1wdHlfbmFtZXNbXSA9IHsgXCJcIiB9O1xuK1x0Y29uc3QgY2hhciAqZHVwbGljYXRlX25hbWVzW10gPSB7XG4rXHRcdFwiYnBmX3Rlc3Rtb2RcIiwgXCJicGZfdGVzdG1vZFwiLFxuK1x0fTtcbitcdExJQkJQRl9PUFRTKGJwZl9vYmplY3Rfb3Blbl9vcHRzLCBvcHRzLFxuK1x0XHQuYnRmX21vZHVsZV9uYW1lcyA9IG5hbWVzLFxuK1x0XHQubnJfYnRmX21vZHVsZV9uYW1lcyA9IDEsXG4rXHQpO1xuK1xuK1x0c2tlbCA9IGJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyhcdTAwMjZvcHRzKTtcbitcdEFTU0VSVF9FUShsaWJicGZfZ2V0X2Vycm9yKHNrZWwpLCAtRUlOVkFMLFxuK1x0XHQgIFwiYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzIG51bGxcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZW1wdHlfbmFtZXM7XG4rXHRza2VsID0gYnRmX21vZHVsZV9uYW1lc19fb3Blbl9vcHRzKFx1MDAyNm9wdHMpO1xuK1x0QVNTRVJUX0VRKGxpYmJwZl9nZXRfZXJyb3Ioc2tlbCksIC1FSU5WQUwsXG4rXHRcdCAgXCJidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMgZW1wdHlcIik7XG4rXHRidGZfbW9kdWxlX25hbWVzX19kZXN0cm95KHNrZWwpO1xuK1xuK1x0b3B0cy5idGZfbW9kdWxlX25hbWVzID0gZHVwbGljYXRlX25hbWVzO1xuK1x0b3B0cy5ucl9idGZfbW9kdWxlX25hbWVzID0gMjtcbitcdHNrZWwgPSBidGZfbW9kdWxlX25hbWVzX19vcGVuX29wdHMoXHUwMDI2b3B0cyk7XG4rXHRBU1NFUlRfRVEobGliYnBmX2dldF9lcnJvcihza2VsKSwgLUVJTlZBTCxcbitcdFx0ICBcImJ0Zl9tb2R1bGVfbmFtZXNfX29wZW5fb3B0cyBkdXBsaWNhdGUgbmFtZVwiKTtcbitcdGJ0Zl9tb2R1bGVfbmFtZXNfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuK1xuK3ZvaWQgdGVzdF9idGZfbW9kdWxlX25hbWVzKHZvaWQpXG4re1xuK1x0aWYgKCFlbnYuaGFzX3Rlc3Rtb2QpIHtcbitcdFx0dGVzdF9fc2tpcCgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJ0Zl9tb2R1bGVfbmFtZXNfbG9hZFwiKSlcbitcdFx0YnRmX21vZHVsZV9uYW1lc19sb2FkKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJ0Zl9tb2R1bGVfbmFtZXNfc2tpcFwiKSlcbitcdFx0YnRmX21vZHVsZV9uYW1lc19za2lwKCk7XG4rXG4rXHRpZiAodGVzdF9fc3RhcnRfc3VidGVzdChcImJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHlcIikpXG4rXHRcdGJ0Zl9tb2R1bGVfbmFtZXNfZW1wdHkoKTtcbitcbitcdGlmICh0ZXN0X19zdGFydF9zdWJ0ZXN0KFwiYnRmX21vZHVsZV9uYW1lc19pbnZhbGlkXCIpKVxuK1x0XHRidGZfbW9kdWxlX25hbWVzX2ludmFsaWQoKTtcbit9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2J0Zl9tb2R1bGVfbmFtZXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4yMzJhZGMwZjMzZjZlXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYnRmX21vZHVsZV9uYW1lcy5jXG5AQCAtMCwwICsxLDEzIEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbisjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rXG4rU0VDKFwiZmVudHJ5L2JwZl90ZXN0bW9kX2xvb3BfdGVzdFwiKVxuK2ludCBCUEZfUFJPRyh0ZXN0X2J0Zl9tb2R1bGVfbmFtZXMpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE0OjAyOjE2Ljc1ODA0MTg0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDgwOTQ2NDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IE5vIEtlcm5lbCBGdXp6aW5nIE5lZWRlZCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGFuZCBzb21lIHNlbGZ0ZXN0cy4gTm8ga2VybmVsIGNvZGUgaXMgYmVpbmcgdG91Y2hlZC4gRXhjZWxsZW50LCBJIGxpa2Ugc2VlaW5nIHRoYXQgZGlzdGluY3Rpb24uIE5vIG1vZGlmaWNhdGlvbnMgdW5kZXIgYGtlcm5lbC9gLCBgbmV0L2AsIGBkcml2ZXJzL2AsIG9yIGFueSBvZiB0aG9zZSBjb3JlIGtlcm5lbCBkaXJlY3Rvcmllcy4gVGhpcyBpcyBwdXJlbHkgdXNlci1zcGFjZSBzdHVmZjogbGliYnBmLCBhbmQgdGVzdHMgZm9yIHRoYXQgbGliLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBkb2VzIHRoaXMgYWZmZWN0IHRoZSBrZXJuZWwncyBmdXp6aW5nIHN0cmF0ZWd5PyBTeXprYWxsZXIsIGZvciBpbnN0YW5jZSwgZnV6emVzIHRoZSBrZXJuZWwgKnRocm91Z2gqIHN5c2NhbGxzLCByaWdodD8gSXQgZG9lc24ndCBkaXJlY3RseSB0YXJnZXQgbGliYnBmLiBJdCBtaWdodCAqdXNlKiBsaWJicGYgYXMgcGFydCBvZiBpdHMgc2V0dXAsIGJ1dCB0aGUgcGF0Y2ggaXRzZWxmIGlzIGNvbmZpbmVkIHRvIHVzZXItc3BhY2UgY29kZS4gU2luY2UgdGhlIGNoYW5nZXMgYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHVzZXItc3BhY2UgdG9vbGluZywgc3BlY2lmaWNhbGx5IGluIHRoZSBsaWJicGYgYW5kIGl0cyB0ZXN0cywgdGhpcyBpc24ndCBnb2luZyB0byBpbnRyb2R1Y2UgYW55IG5ldyBhdHRhY2sgc3VyZmFjZXMgZm9yIGEga2VybmVsIGZ1enplciBsaWtlIFN5emthbGxlci5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIG9uZSBtb3JlIHRpbWUuLi4gb2theSwgY29uZmlybWluZyB0aGUgbGlzdCBvZiBmaWxlcyBtb2RpZmllZDogYHRvb2xzL2xpYi9icGYvbGliYnBmLmNgLCBgdG9vbHMvbGliL2JwZi9saWJicGYuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9idGZfbW9kdWxlX25hbWVzLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9idGZfbW9kdWxlX25hbWVzLmNgLiBZZXAsIGFsbCB1bmRlciBgdG9vbHMvYC4gTm8ga2VybmVsIG1vZGlmaWNhdGlvbnMgZGV0ZWN0ZWQuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGlzIHBhdGNoIGRvZXNuJ3Qgd2FycmFudCBrZXJuZWwtbGV2ZWwgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA4MywiT3V0cHV0VG9rZW5zIjo2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE0OjAyOjI2LjgzODk5MTA2MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHRvb2xzIChsaWJicGYpIGFuZCBzZWxmdGVzdHMuIEl0IGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTQ6MDI6MjYuODM5MDI5ODMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdvspw[1] Phase: Running StartedAt: 2026-08-26 14:02:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdvspw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-26 14:02:37 +0000 UTC FinishedAt: 2026-08-26 14:02:43 +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,}