Name: series-workflowbchxp Phase: Succeeded StartedAt: 2026-07-10 09:36:38 +0000 UTC FinishedAt: 2026-07-10 14:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[0] Phase: Succeeded StartedAt: 2026-07-10 09:36:38 +0000 UTC FinishedAt: 2026-07-10 10:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 09:36:38 +0000 UTC FinishedAt: 2026-07-10 10:03:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "series_id": "3ec24a07-bd99-428a-bba1-8b19690f4209" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "anon_pipe_prefill_and_lock", "anon_pipe_trim_pool_and_unlock", "anon_pipe_get_page", "anon_pipe_put_page", "anon_pipe_prealloc_push", "anon_pipe_prealloc_pop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2smIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9nZXRfcGFnZSYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfcHV0X3BhZ2UmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3ByZWFsbG9jX3B1c2gmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3ByZWFsbG9jX3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBwcmVhbGxvY2F0aW9uIGxvZ2ljIGZvciBwaXBlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJlYWxsb2NhdGlvbiBwb29sIGFuZCBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgZHVyaW5nIHBpcGUgcmVhZHMgYW5kIHdyaXRlcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2E4MGM0OTgyMTg3NDdhZjA1NGZiMGExODlhMWFjNWQ3OTc0ZjVkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAzOjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuY1xuaW5kZXggNDI5YjA3MTRlYzU3NTUuLmIxNGQ1YmIyYjQ1YTQ1IDEwMDY0NFxuLS0tIGEvZnMvcGlwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9waXBlLmNcbkBAIC0xMTEsNzUgJiM0MzsxMTEsOTUgQEAgdm9pZCBwaXBlX2RvdWJsZV9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUxLFxuIFx0cGlwZV9sb2NrKHBpcGUyKTtcbiB9XG4gXG4tI2RlZmluZSBQSVBFX1BSRUFMTE9DX01BWCA4XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYW5vbl9waXBlX3ByZWFsbG9jX3BvcChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbiYjNDM7e1xuJiM0MztcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1zdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHtcbi1cdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tfTtcbiYjNDM7XHRwcmVhbGxvYy1cdTAwM2Vjb3VudC0tO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQdXNoIGEgcGFnZSB0byB0aGUgcHJlYWxsb2MgcG9vbC4gUmV0dXJucyB0cnVlIGlmIGFkZGVkLCBmYWxzZSBpZiBmdWxsLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAocHJlYWxsb2MtXHUwMDNlY291bnQgXHUwMDNlPSBQSVBFX1BSRUFMTE9DX01BWClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRwcmVhbGxvYy1cdTAwM2VwYWdlc1twcmVhbGxvYy1cdTAwM2Vjb3VudCYjNDM7JiM0MztdID0gcGFnZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuIFxuIC8qXG4tICogUHJlLWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgcGlwZS1cdTAwM2VtdXRleCBmb3IgbXVsdGktcGFnZSB3cml0ZXMuXG4tICogYWxsb2NfcGFnZSgpIHdpdGggR0ZQX0hJR0hVU0VSIGNhbiBzbGVlcCBpbiByZWNsYWltIGFuZCBydW5zIG1lbWNnXG4tICogY2hhcmdpbmc7IGRvaW5nIGl0IHVuZGVyIHRoZSBtdXRleCBzdGFsbHMgYSBjb25jdXJyZW50IHJlYWRlci5cbi0gKlxuLSAqIExvb3AgYWxsb2NfcGFnZSgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfYnVsa18qKCk6IHRoZSBidWxrIHBhdGggcmVmdXNlc1xuLSAqIF9fR0ZQX0FDQ09VTlQgdW5kZXIgbWVtY2cgKHNlZSBjb21taXQgOGRjYjMwNjBkODFkIFwmIzM0O21lbWNnOiBwYWdlX2FsbG9jOlxuLSAqIHNraXAgYnVsayBhbGxvY2F0b3IgZm9yIF9fR0ZQX0FDQ09VTlRcJiMzNDspIGFuZCBzaWxlbnRseSBkZWdyYWRlcyB0byBhIHNpbmdsZVxuLSAqIHBhZ2UuIEEgcGVyLXBhZ2UgbG9vcCBrZWVwcyBtZW1jZyBhY2NvdW50aW5nIGFuZCB0aGUgdGFzayBOVU1BIG1lbXBvbGljeVxuLSAqIGhvbm91cmVkIGZvciBldmVyeSBwYWdlOyB0aGUgcGVyLWNhbGwgb3ZlcmhlYWQgaXMgc21hbGwgY29tcGFyZWQgdG8gdGhlXG4tICogcGlwZS1cdTAwM2VtdXRleCBob2xkLXRpbWUgYmVpbmcgc2hydW5rLiBBbnkgc2hvcnRmYWxsIGlzIGNvdmVyZWQgYnkgdGhlXG4tICogaW4tbG9jayBhbGxvY19wYWdlKCkgZmFsbGJhY2sgaW4gYW5vbl9waXBlX2dldF9wYWdlKCkuXG4mIzQzOyAqIFRvcCB1cCB0aGUgcGlwZSYjMzk7cyBvd24gcG9vbCwgdGhlbiB0YWtlIHBpcGUtXHUwMDNlbXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuXG4mIzQzOyAqIFRoZSBzaG9ydGZhbGwgaXMgYWxsb2NhdGVkIG91dHNpZGUgdGhlIGxvY2s7IHRoZSBwdXNoIGFuZCB0aGUgY2FsbGVyJiMzOTtzIHdyaXRlXG4mIzQzOyAqIHRoZW4gcnVuIHVuZGVyIGEgc2luZ2xlIGxvY2sgYWNxdWlzaXRpb24sIGF2b2lkaW5nIGEgc2VwYXJhdGUgcHJlZmlsbFxuJiM0MzsgKiBsb2NrL3VubG9jayBjeWNsZS4gYW5vbl9waXBlX2dldF9wYWdlKCkgZHJhaW5zIHRoZSBwb29sIGluc3RlYWQgb2YgYWxsb2NhdGluZ1xuJiM0MzsgKiB1bmRlciB0aGUgbG9jay5cbiAgKi9cbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZ2V0X3BhZ2VfcHJlYWxsb2Moc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsXG4tXHRcdFx0XHRcdHNpemVfdCB0b3RhbF9sZW4pXG4mIzQzO3N0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IHdhbnQsIGk7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdHByZWFsbG9jLVx1MDAzZWNvdW50ID0gMDtcbi1cdGlmICh0b3RhbF9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9QUkVBTExPQ19NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGludCB3YW50LCBoYXZlLCBuZWVkLCBuID0gMDtcbiBcbiBcdHdhbnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIERJVl9ST1VORF9VUCh0b3RhbF9sZW4sIFBBR0VfU0laRSksXG4gXHRcdCAgICAgUElQRV9QUkVBTExPQ19NQVgpO1xuJiM0MztcdC8qIFVubG9ja2VkIHJlYWQ7IHRoZSBwb29sIGlzIHJlZmlsbGVkIHVuZGVyIHRoZSBsb2NrIGJlbG93LiAqL1xuJiM0MztcdGhhdmUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFJFQURfT05DRShwaXBlLVx1MDAzZXByZWFsbG9jLmNvdW50KSwgd2FudCk7XG4mIzQzO1x0bmVlZCA9IHdhbnQgLSBoYXZlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5lZWQpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAobiBcdTAwM2MgbmVlZCkge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0FDQ09VTlQpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd2FudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gXHRcdGlmICghcGFnZSlcbiBcdFx0XHRicmVhaztcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IHBhZ2U7XG4mIzQzO1x0XHRwYWdlc1tuJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdHdoaWxlIChuIFx1MDAyNlx1MDAyNiBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jLCBwYWdlc1tuIC0gMV0pKVxuJiM0MztcdFx0bi0tO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEp1c3QgZmx1c2ggYW55IGV4dHJhIHBhZ2UgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgdGhlIFRPQ1RPVVxuJiM0MztcdCAqIGVmZmVjdFxuJiM0MztcdCAqL1xuJiM0MztcdHdoaWxlIChuKVxuJiM0MztcdFx0cHV0X3BhZ2UocGFnZXNbLS1uXSk7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYW5vbl9waXBlX3ByZWFsbG9jX3BvcChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIHdpdGggcGlwZS1cdTAwM2VtdXRleCBoZWxkLiBUcmltIHRoZSBwb29sIGRvd24gdG8gUElQRV9QUkVBTExPQ19LRUVQIHVuZGVyXG4mIzQzOyAqIHRoZSBsb2NrLCBkcm9wIGl0LCB0aGVuIGZyZWUgdGhlIGV4Y2VzcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG4ge1xuLVx0aWYgKCFwcmVhbGxvYy1cdTAwM2Vjb3VudClcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmV4Y2Vzc1tQSVBFX1BSRUFMTE9DX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IG5leGNlc3MgPSAwO1xuIFxuLVx0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbiYjNDM7XHR3aGlsZSAocGlwZS1cdTAwM2VwcmVhbGxvYy5jb3VudCBcdTAwM2UgUElQRV9QUkVBTExPQ19LRUVQKVxuJiM0MztcdFx0ZXhjZXNzW25leGNlc3MmIzQzOyYjNDM7XSA9IGFub25fcGlwZV9wcmVhbGxvY19wb3AoXHUwMDI2cGlwZS1cdTAwM2VwcmVhbGxvYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuIFxuLVx0cmV0dXJuIHByZWFsbG9jLVx1MDAzZXBhZ2VzW3ByZWFsbG9jLVx1MDAzZWNvdW50XTtcbiYjNDM7XHR3aGlsZSAobmV4Y2VzcylcbiYjNDM7XHRcdHB1dF9wYWdlKGV4Y2Vzc1stLW5leGNlc3NdKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSlcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbi1cdC8qIERyYWluIHByZWFsbG9jIGZpcnN0IHRvIGtlZXAgdG1wX3BhZ2VbXSBob3QgZm9yIGxhdGVyIHNtYWxsIHdyaXRlcy4gKi9cbi1cdHBhZ2UgPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHByZWFsbG9jKTtcbiYjNDM7XHQvKiBEcmFpbiB0aGUgcHJlYWxsb2MgcG9vbCBiZWZvcmUgYWxsb2NhdGluZy4gQ2FsbGVkIHdpdGggbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRyZXR1cm4gcGFnZTtcbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAocGlwZS1cdTAwM2V0bXBfcGFnZVtpXSkge1xuLVx0XHRcdHBhZ2UgPSBwaXBlLVx1MDAzZXRtcF9wYWdlW2ldO1xuLVx0XHRcdHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0gPSBOVUxMO1xuLVx0XHRcdHJldHVybiBwYWdlO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHQvKiBGV0lXOiBUaGlzIGlzIGNhbGxlZCB3aXRoIHBpcGUtXHUwMDNlbXV0ZXggaGVsZCAqL1xuIFx0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gfVxuQEAgLTE4Nyw0OCAmIzQzOzIwNywxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIHN0YXRpYyB2b2lkIGFub25fcGlwZV9wdXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKSB7XG4tXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmICghcGlwZS1cdTAwM2V0bXBfcGFnZVtpXSkge1xuLVx0XHRcdFx0cGlwZS1cdTAwM2V0bXBfcGFnZVtpXSA9IHBhZ2U7XG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHRwdXRfcGFnZShwYWdlKTtcbi19XG4tXG4tLypcbi0gKiBTdGFzaCBsZWZ0b3ZlciBwcmVhbGxvYyBwYWdlcyBpbiB0bXBfcGFnZVtdIHNvIHRoZSBuZXh0IHdyaXRlIHRvIHRoaXNcbi0gKiBwaXBlIGdldHMgYSBob3QgcGFnZSB3aXRob3V0IGVudGVyaW5nIHRoZSBhbGxvY2F0b3IuXG4tICovXG4tc3RhdGljIHZvaWQgYW5vbl9waXBlX3JlZmlsbF90bXBfcGFnZXMoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbi17XG4tXHRpbnQgaSwgaWR4O1xuLVxuLVx0aWYgKCFwcmVhbGxvYy1cdTAwM2Vjb3VudClcbiYjNDM7XHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jLCBwYWdlKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwaXBlLVx1MDAzZXRtcF9wYWdlKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRpZHggPSAtLXByZWFsbG9jLVx1MDAzZWNvdW50O1xuLVx0XHRwaXBlLVx1MDAzZXRtcF9wYWdlW2ldID0gcHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XTtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XSA9IE5VTEw7XG4tXHR9XG4tfVxuLVxuLS8qIFJ1bnMgYWZ0ZXIgbXV0ZXhfdW5sb2NrKCkgdG8ga2VlcCBwdXRfcGFnZSgpIG91dCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi9cbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZnJlZV9wYWdlcyhzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbi17XG4tXHR3aGlsZSAocHJlYWxsb2MtXHUwMDNlY291bnQpIHtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbi1cdFx0cHV0X3BhZ2UocHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdKTtcbi1cdH1cbiYjNDM7XHRwdXRfcGFnZShwYWdlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYW5vbl9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG5AQCAtNDg1LDcgJiM0Mzs0NjgsOCBAQCBhbm9uX3BpcGVfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gXHR9XG4gXHRpZiAocGlwZV9pc19lbXB0eShwaXBlKSlcbiBcdFx0d2FrZV9uZXh0X3JlYWRlciA9IGZhbHNlO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdC8qIENvbnN1bWVkIGJ1ZmZlcnMgbWF5IGhhdmUgcmVmaWxsZWQgdGhlIHBvb2w7IHRyaW0gaXQgYW5kIHVubG9jay4gKi9cbiYjNDM7XHRhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2socGlwZSk7XG4gXG4gXHRpZiAod2FrZV93cml0ZXIpXG4gXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoXHUwMDI2cGlwZS1cdTAwM2V3cl93YWl0LCBFUE9MTE9VVCB8IEVQT0xMV1JOT1JNKTtcbkBAIC01MjQsNyAmIzQzOzUwOCw2IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItXHUwMDNla2lfZmlscDtcbiBcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2M7XG4gXHR1bnNpZ25lZCBpbnQgaGVhZDtcbiBcdHNzaXplX3QgcmV0ID0gMDtcbiBcdHNpemVfdCB0b3RhbF9sZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTtcbkBAIC01NDgsOSAmIzQzOzUzMSw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0YW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKFx1MDAyNnByZWFsbG9jLCB0b3RhbF9sZW4pO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhwaXBlLCB0b3RhbF9sZW4pO1xuIFxuIFx0aWYgKCFwaXBlLVx1MDAzZXJlYWRlcnMpIHtcbiBcdFx0aWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PU0lHTkFMKSA9PSAwKVxuQEAgLTYwNyw3ICYjNDM7NTg4LDcgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0XHRcdGludCBjb3BpZWQ7XG4gXG4tXHRcdFx0cGFnZSA9IGFub25fcGlwZV9nZXRfcGFnZShwaXBlLCBcdTAwMjZwcmVhbGxvYyk7XG4mIzQzO1x0XHRcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuIFx0XHRcdFx0aWYgKCFyZXQpXG4gXHRcdFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNjcxLDExICYjNDM7NjUyLDkgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHR3YWtlX25leHRfd3JpdGVyID0gdHJ1ZTtcbiBcdH1cbiBvdXQ6XG4tXHRhbm9uX3BpcGVfcmVmaWxsX3RtcF9wYWdlcyhwaXBlLCBcdTAwMjZwcmVhbGxvYyk7XG4gXHRpZiAocGlwZV9pc19mdWxsKHBpcGUpKVxuIFx0XHR3YWtlX25leHRfd3JpdGVyID0gZmFsc2U7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4tXHRhbm9uX3BpcGVfZnJlZV9wYWdlcyhcdTAwMjZwcmVhbGxvYyk7XG4mIzQzO1x0YW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHBpcGUpO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGRvIGRvIGEgd2FrZXVwIGV2ZW50LCB3ZSBkbyBhICYjMzk7c3luYyYjMzk7IHdha2V1cCwgYmVjYXVzZSB3ZVxuQEAgLTk1NiwxMCAmIzQzOzkzNSw4IEBAIHZvaWQgZnJlZV9waXBlX2luZm8oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSlcbiBcdGlmIChwaXBlLVx1MDAzZXdhdGNoX3F1ZXVlKVxuIFx0XHRwdXRfd2F0Y2hfcXVldWUocGlwZS1cdTAwM2V3YXRjaF9xdWV1ZSk7XG4gI2VuZGlmXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAocGlwZS1cdTAwM2V0bXBfcGFnZVtpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZShwaXBlLVx1MDAzZXRtcF9wYWdlW2ldKTtcbi1cdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwaXBlLVx1MDAzZXByZWFsbG9jLmNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBpcGUtXHUwMDNlcHJlYWxsb2MucGFnZXNbaV0pO1xuIFx0a2ZyZWUocGlwZS1cdTAwM2VidWZzKTtcbiBcdGtmcmVlKHBpcGUpO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxuaW5kZXggN2Y2YTkyYWM5NzA0NzguLjRlMmU0ZjQ0ZmJlNWY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxuQEAgLTE0LDYgJiM0MzsxNCw5IEBAXG4gI2RlZmluZSBQSVBFX0JVRl9GTEFHX0xPU1NcdDB4NDBcdC8qIE1lc3NhZ2UgbG9zcyBoYXBwZW5lZCBhZnRlciB0aGlzIGJ1ZmZlciAqL1xuICNlbmRpZlxuIFxuJiM0MzsjZGVmaW5lIFBJUEVfUFJFQUxMT0NfTUFYXHQ4XHQvKiBtYXggcGFnZXMgaW4gcHJlYWxsb2MgcG9vbCAqL1xuJiM0MzsjZGVmaW5lIFBJUEVfUFJFQUxMT0NfS0VFUFx0Mlx0Lyoga2VlcCBhdCBsZWFzdCB0aGlzIG1hbnkgYWZ0ZXIgdHJpbSAqL1xuJiM0MztcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfYnVmZmVyIC0gYSBsaW51eCBrZXJuZWwgcGlwZSBidWZmZXJcbiAgKlx0QHBhZ2U6IHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGRhdGEgZm9yIHRoZSBwaXBlIGJ1ZmZlclxuQEAgLTU4LDYgJiM0Mzs2MSwyMCBAQCB1bmlvbiBwaXBlX2luZGV4IHtcbiBcdH07XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIC0gcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2xcbiYjNDM7ICpcdEBwYWdlczogYXJyYXkgb2YgY2FjaGVkIHBhZ2VzIChwb29sKVxuJiM0MzsgKlx0QGNvdW50OiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IGluIHRoZSBwb29sXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggcGlwZSBrZWVwcyBhIHNtYWxsIGJvdW5kZWQgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgcGFnZXMgdG8gcmVkdWNlXG4mIzQzOyAqIGFsbG9jYXRpb24gb3ZlcmhlYWQgZHVyaW5nIHdyaXRlcy4gVGhlIHBvb2wgaXMgYm91bmRlZCBhdCBQSVBFX1BSRUFMTE9DX01BWFxuJiM0MzsgKiBhbmQgdHJpbW1lZCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCBhZnRlciBhIHdyaXRlIGNvbXBsZXRlcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2Mge1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IGNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAtIGEgbGludXgga2VybmVsIHBpcGVcbiAgKlx0QG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZ1xuQEAgLTY4LDcgJiM0Mzs4NSw3IEBAIHVuaW9uIHBpcGVfaW5kZXgge1xuICAqXHRAbWF4X3VzYWdlOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtYXkgYmUgdXNlZCBpbiB0aGUgcmluZ1xuICAqXHRAcmluZ19zaXplOiB0b3RhbCBudW1iZXIgb2YgYnVmZmVycyAoc2hvdWxkIGJlIGEgcG93ZXIgb2YgMilcbiAgKlx0QG5yX2FjY291bnRlZDogVGhlIGFtb3VudCB0aGlzIHBpcGUgYWNjb3VudHMgZm9yIGluIHVzZXItXHUwMDNlcGlwZV9idWZzXG4tICpcdEB0bXBfcGFnZTogY2FjaGVkIHJlbGVhc2VkIHBhZ2VcbiYjNDM7ICpcdEBwcmVhbGxvYzogcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2xcbiAgKlx0QHJlYWRlcnM6IG51bWJlciBvZiBjdXJyZW50IHJlYWRlcnMgb2YgdGhpcyBwaXBlXG4gICpcdEB3cml0ZXJzOiBudW1iZXIgb2YgY3VycmVudCB3cml0ZXJzIG9mIHRoaXMgcGlwZVxuICAqXHRAZmlsZXM6IG51bWJlciBvZiBzdHJ1Y3QgZmlsZSByZWZlcnJpbmcgdGhpcyBwaXBlIChwcm90ZWN0ZWQgYnkgLVx1MDAzZWlfbG9jaylcbkBAIC05OSw3ICYjNDM7MTE2LDcgQEAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7XG4gI2lmZGVmIENPTkZJR19XQVRDSF9RVUVVRVxuIFx0Ym9vbCBub3RlX2xvc3M7XG4gI2VuZGlmXG4tXHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2VbMl07XG4mIzQzO1x0c3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyBwcmVhbGxvYztcbiBcdHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcmVhZGVycztcbiBcdHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfd3JpdGVycztcbiBcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfZ2V0X3BhZ2UmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3B1dF9wYWdlJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wdXNoJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgcHJlYWxsb2NhdGlvbiBsb2dpYyBmb3IgcGlwZXMsIGludHJvZHVjaW5nIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGR1cmluZyBwaXBlIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E4MGM0OTgyMTg3NDdhZjA1NGZiMGExODlhMWFjNWQ3OTc0ZjVkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAzOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDQyOWIwNzE0ZWM1NzU1Li5iMTRkNWJiMmI0NWE0NSAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpcGUuYwpAQCAtMTExLDc1ICYjNDM7MTExLDk1IEBAIHZvaWQgcGlwZV9kb3VibGVfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlMSwKIAlwaXBlX2xvY2socGlwZTIpOwogfQogCi0jZGVmaW5lIFBJUEVfUFJFQUxMT0NfTUFYIDgKJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9wcmVhbGxvY19wb3Aoc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpCiYjNDM7ewomIzQzOwlpZiAoIXByZWFsbG9jLSZndDtjb3VudCkKJiM0MzsJCXJldHVybiBOVUxMOwogCi1zdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9QUkVBTExPQ19NQVhdOwotCXVuc2lnbmVkIGludCBjb3VudDsKLX07CiYjNDM7CXByZWFsbG9jLSZndDtjb3VudC0tOwomIzQzOwomIzQzOwlyZXR1cm4gcHJlYWxsb2MtJmd0O3BhZ2VzW3ByZWFsbG9jLSZndDtjb3VudF07CiYjNDM7fQomIzQzOwomIzQzOy8qIFB1c2ggYSBwYWdlIHRvIHRoZSBwcmVhbGxvYyBwb29sLiBSZXR1cm5zIHRydWUgaWYgYWRkZWQsIGZhbHNlIGlmIGZ1bGwuICovCiYjNDM7c3RhdGljIGJvb2wgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChwcmVhbGxvYy0mZ3Q7Y291bnQgJmd0Oz0gUElQRV9QUkVBTExPQ19NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXByZWFsbG9jLSZndDtwYWdlc1twcmVhbGxvYy0mZ3Q7Y291bnQmIzQzOyYjNDM7XSA9IHBhZ2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KIAogLyoKLSAqIFByZS1hbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIHBpcGUtJmd0O211dGV4IGZvciBtdWx0aS1wYWdlIHdyaXRlcy4KLSAqIGFsbG9jX3BhZ2UoKSB3aXRoIEdGUF9ISUdIVVNFUiBjYW4gc2xlZXAgaW4gcmVjbGFpbSBhbmQgcnVucyBtZW1jZwotICogY2hhcmdpbmc7IGRvaW5nIGl0IHVuZGVyIHRoZSBtdXRleCBzdGFsbHMgYSBjb25jdXJyZW50IHJlYWRlci4KLSAqCi0gKiBMb29wIGFsbG9jX3BhZ2UoKSBpbnN0ZWFkIG9mIGFsbG9jX3BhZ2VzX2J1bGtfKigpOiB0aGUgYnVsayBwYXRoIHJlZnVzZXMKLSAqIF9fR0ZQX0FDQ09VTlQgdW5kZXIgbWVtY2cgKHNlZSBjb21taXQgOGRjYjMwNjBkODFkICYjMzQ7bWVtY2c6IHBhZ2VfYWxsb2M6Ci0gKiBza2lwIGJ1bGsgYWxsb2NhdG9yIGZvciBfX0dGUF9BQ0NPVU5UJiMzNDspIGFuZCBzaWxlbnRseSBkZWdyYWRlcyB0byBhIHNpbmdsZQotICogcGFnZS4gQSBwZXItcGFnZSBsb29wIGtlZXBzIG1lbWNnIGFjY291bnRpbmcgYW5kIHRoZSB0YXNrIE5VTUEgbWVtcG9saWN5Ci0gKiBob25vdXJlZCBmb3IgZXZlcnkgcGFnZTsgdGhlIHBlci1jYWxsIG92ZXJoZWFkIGlzIHNtYWxsIGNvbXBhcmVkIHRvIHRoZQotICogcGlwZS0mZ3Q7bXV0ZXggaG9sZC10aW1lIGJlaW5nIHNocnVuay4gQW55IHNob3J0ZmFsbCBpcyBjb3ZlcmVkIGJ5IHRoZQotICogaW4tbG9jayBhbGxvY19wYWdlKCkgZmFsbGJhY2sgaW4gYW5vbl9waXBlX2dldF9wYWdlKCkuCiYjNDM7ICogVG9wIHVwIHRoZSBwaXBlJiMzOTtzIG93biBwb29sLCB0aGVuIHRha2UgcGlwZS0mZ3Q7bXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuCiYjNDM7ICogVGhlIHNob3J0ZmFsbCBpcyBhbGxvY2F0ZWQgb3V0c2lkZSB0aGUgbG9jazsgdGhlIHB1c2ggYW5kIHRoZSBjYWxsZXImIzM5O3Mgd3JpdGUKJiM0MzsgKiB0aGVuIHJ1biB1bmRlciBhIHNpbmdsZSBsb2NrIGFjcXVpc2l0aW9uLCBhdm9pZGluZyBhIHNlcGFyYXRlIHByZWZpbGwKJiM0MzsgKiBsb2NrL3VubG9jayBjeWNsZS4gYW5vbl9waXBlX2dldF9wYWdlKCkgZHJhaW5zIHRoZSBwb29sIGluc3RlYWQgb2YgYWxsb2NhdGluZwomIzQzOyAqIHVuZGVyIHRoZSBsb2NrLgogICovCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZ2V0X3BhZ2VfcHJlYWxsb2Moc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsCi0JCQkJCXNpemVfdCB0b3RhbF9sZW4pCiYjNDM7c3RhdGljIHZvaWQgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2soc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IHRvdGFsX2xlbikKIHsKLQl1bnNpZ25lZCBpbnQgd2FudCwgaTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXByZWFsbG9jLSZndDtjb3VudCA9IDA7Ci0JaWYgKHRvdGFsX2xlbiAmbHQ7PSBQQUdFX1NJWkUpCi0JCXJldHVybjsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfUFJFQUxMT0NfTUFYXTsKJiM0MzsJdW5zaWduZWQgaW50IHdhbnQsIGhhdmUsIG5lZWQsIG4gPSAwOwogCiAJd2FudCA9IG1pbl90KHVuc2lnbmVkIGludCwgRElWX1JPVU5EX1VQKHRvdGFsX2xlbiwgUEFHRV9TSVpFKSwKIAkJICAgICBQSVBFX1BSRUFMTE9DX01BWCk7CiYjNDM7CS8qIFVubG9ja2VkIHJlYWQ7IHRoZSBwb29sIGlzIHJlZmlsbGVkIHVuZGVyIHRoZSBsb2NrIGJlbG93LiAqLwomIzQzOwloYXZlID0gbWluX3QodW5zaWduZWQgaW50LCBSRUFEX09OQ0UocGlwZS0mZ3Q7cHJlYWxsb2MuY291bnQpLCB3YW50KTsKJiM0MzsJbmVlZCA9IHdhbnQgLSBoYXZlOwomIzQzOwomIzQzOwlpZiAoIW5lZWQpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtwaXBlLSZndDttdXRleCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKG4gJmx0OyBuZWVkKSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgd2FudDsgaSYjNDM7JiM0MzspIHsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7CiAJCWlmICghcGFnZSkKIAkJCWJyZWFrOwotCQlwcmVhbGxvYy0mZ3Q7cGFnZXNbcHJlYWxsb2MtJmd0O2NvdW50JiM0MzsmIzQzO10gPSBwYWdlOwomIzQzOwkJcGFnZXNbbiYjNDM7JiM0MztdID0gcGFnZTsKIAl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaXBlLSZndDttdXRleCk7CiYjNDM7CXdoaWxlIChuICZhbXA7JmFtcDsgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goJmFtcDtwaXBlLSZndDtwcmVhbGxvYywgcGFnZXNbbiAtIDFdKSkKJiM0MzsJCW4tLTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSnVzdCBmbHVzaCBhbnkgZXh0cmEgcGFnZSB0aGF0IGdvdCBhZmZlY3RlZCBieSB0aGUgVE9DVE9VCiYjNDM7CSAqIGVmZmVjdAomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKG4pCiYjNDM7CQlwdXRfcGFnZShwYWdlc1stLW5dKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKQomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIHdpdGggcGlwZS0mZ3Q7bXV0ZXggaGVsZC4gVHJpbSB0aGUgcG9vbCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCB1bmRlcgomIzQzOyAqIHRoZSBsb2NrLCBkcm9wIGl0LCB0aGVuIGZyZWUgdGhlIGV4Y2VzcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKQogewotCWlmICghcHJlYWxsb2MtJmd0O2NvdW50KQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJc3RydWN0IHBhZ2UgKmV4Y2Vzc1tQSVBFX1BSRUFMTE9DX01BWF07CiYjNDM7CXVuc2lnbmVkIGludCBuZXhjZXNzID0gMDsKIAotCXByZWFsbG9jLSZndDtjb3VudC0tOwomIzQzOwl3aGlsZSAocGlwZS0mZ3Q7cHJlYWxsb2MuY291bnQgJmd0OyBQSVBFX1BSRUFMTE9DX0tFRVApCiYjNDM7CQlleGNlc3NbbmV4Y2VzcyYjNDM7JiM0MztdID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcCgmYW1wO3BpcGUtJmd0O3ByZWFsbG9jKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZS0mZ3Q7bXV0ZXgpOwogCi0JcmV0dXJuIHByZWFsbG9jLSZndDtwYWdlc1twcmVhbGxvYy0mZ3Q7Y291bnRdOwomIzQzOwl3aGlsZSAobmV4Y2VzcykKJiM0MzsJCXB1dF9wYWdlKGV4Y2Vzc1stLW5leGNlc3NdKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKLQkJCQkgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCS8qIERyYWluIHByZWFsbG9jIGZpcnN0IHRvIGtlZXAgdG1wX3BhZ2VbXSBob3QgZm9yIGxhdGVyIHNtYWxsIHdyaXRlcy4gKi8KLQlwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcChwcmVhbGxvYyk7CiYjNDM7CS8qIERyYWluIHRoZSBwcmVhbGxvYyBwb29sIGJlZm9yZSBhbGxvY2F0aW5nLiBDYWxsZWQgd2l0aCBtdXRleCBoZWxkLiAqLwomIzQzOwlwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcCgmYW1wO3BpcGUtJmd0O3ByZWFsbG9jKTsKIAlpZiAocGFnZSkKIAkJcmV0dXJuIHBhZ2U7CiAKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocGlwZS0mZ3Q7dG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykgewotCQlpZiAocGlwZS0mZ3Q7dG1wX3BhZ2VbaV0pIHsKLQkJCXBhZ2UgPSBwaXBlLSZndDt0bXBfcGFnZVtpXTsKLQkJCXBpcGUtJmd0O3RtcF9wYWdlW2ldID0gTlVMTDsKLQkJCXJldHVybiBwYWdlOwotCQl9Ci0JfQotCiAJLyogRldJVzogVGhpcyBpcyBjYWxsZWQgd2l0aCBwaXBlLSZndDttdXRleCBoZWxkICovCiAJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7CiB9CkBAIC0xODcsNDggJiM0MzsyMDcsMTEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIHN0YXRpYyB2b2lkIGFub25fcGlwZV9wdXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBpcGUtJmd0O3RtcF9wYWdlKTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmICghcGlwZS0mZ3Q7dG1wX3BhZ2VbaV0pIHsKLQkJCQlwaXBlLSZndDt0bXBfcGFnZVtpXSA9IHBhZ2U7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCi0JcHV0X3BhZ2UocGFnZSk7Ci19Ci0KLS8qCi0gKiBTdGFzaCBsZWZ0b3ZlciBwcmVhbGxvYyBwYWdlcyBpbiB0bXBfcGFnZVtdIHNvIHRoZSBuZXh0IHdyaXRlIHRvIHRoaXMKLSAqIHBpcGUgZ2V0cyBhIGhvdCBwYWdlIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGFsbG9jYXRvci4KLSAqLwotc3RhdGljIHZvaWQgYW5vbl9waXBlX3JlZmlsbF90bXBfcGFnZXMoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKLQkJCQkgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpCi17Ci0JaW50IGksIGlkeDsKLQotCWlmICghcHJlYWxsb2MtJmd0O2NvdW50KQomIzQzOwlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxICZhbXA7JmFtcDsKJiM0MzsJICAgIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKCZhbXA7cGlwZS0mZ3Q7cHJlYWxsb2MsIHBhZ2UpKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwaXBlLSZndDt0bXBfcGFnZSk7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChwaXBlLSZndDt0bXBfcGFnZVtpXSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXByZWFsbG9jLSZndDtjb3VudCkKLQkJCXJldHVybjsKLQkJaWR4ID0gLS1wcmVhbGxvYy0mZ3Q7Y291bnQ7Ci0JCXBpcGUtJmd0O3RtcF9wYWdlW2ldID0gcHJlYWxsb2MtJmd0O3BhZ2VzW2lkeF07Ci0JCXByZWFsbG9jLSZndDtwYWdlc1tpZHhdID0gTlVMTDsKLQl9Ci19Ci0KLS8qIFJ1bnMgYWZ0ZXIgbXV0ZXhfdW5sb2NrKCkgdG8ga2VlcCBwdXRfcGFnZSgpIG91dCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi8KLXN0YXRpYyB2b2lkIGFub25fcGlwZV9mcmVlX3BhZ2VzKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKQotewotCXdoaWxlIChwcmVhbGxvYy0mZ3Q7Y291bnQpIHsKLQkJcHJlYWxsb2MtJmd0O2NvdW50LS07Ci0JCXB1dF9wYWdlKHByZWFsbG9jLSZndDtwYWdlc1twcmVhbGxvYy0mZ3Q7Y291bnRdKTsKLQl9CiYjNDM7CXB1dF9wYWdlKHBhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKQEAgLTQ4NSw3ICYjNDM7NDY4LDggQEAgYW5vbl9waXBlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQogCX0KIAlpZiAocGlwZV9pc19lbXB0eShwaXBlKSkKIAkJd2FrZV9uZXh0X3JlYWRlciA9IGZhbHNlOwotCW11dGV4X3VubG9jaygmYW1wO3BpcGUtJmd0O211dGV4KTsKJiM0MzsJLyogQ29uc3VtZWQgYnVmZmVycyBtYXkgaGF2ZSByZWZpbGxlZCB0aGUgcG9vbDsgdHJpbSBpdCBhbmQgdW5sb2NrLiAqLwomIzQzOwlhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2socGlwZSk7CiAKIAlpZiAod2FrZV93cml0ZXIpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoJmFtcDtwaXBlLSZndDt3cl93YWl0LCBFUE9MTE9VVCB8IEVQT0xMV1JOT1JNKTsKQEAgLTUyNCw3ICYjNDM7NTA4LDYgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogewogCXN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi0mZ3Q7a2lfZmlscDsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2M7CiAJdW5zaWduZWQgaW50IGhlYWQ7CiAJc3NpemVfdCByZXQgPSAwOwogCXNpemVfdCB0b3RhbF9sZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTsKQEAgLTU0OCw5ICYjNDM7NTMxLDcgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogCWlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpCiAJCXJldHVybiAwOwogCi0JYW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKCZhbXA7cHJlYWxsb2MsIHRvdGFsX2xlbik7Ci0KLQltdXRleF9sb2NrKCZhbXA7cGlwZS0mZ3Q7bXV0ZXgpOwomIzQzOwlhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhwaXBlLCB0b3RhbF9sZW4pOwogCiAJaWYgKCFwaXBlLSZndDtyZWFkZXJzKSB7CiAJCWlmICgoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1NJR05BTCkgPT0gMCkKQEAgLTYwNyw3ICYjNDM7NTg4LDcgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQlpbnQgY29waWVkOwogCi0JCQlwYWdlID0gYW5vbl9waXBlX2dldF9wYWdlKHBpcGUsICZhbXA7cHJlYWxsb2MpOwomIzQzOwkJCXBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7CiAJCQlpZiAodW5saWtlbHkoIXBhZ2UpKSB7CiAJCQkJaWYgKCFyZXQpCiAJCQkJCXJldCA9IC1FTk9NRU07CkBAIC02NzEsMTEgJiM0Mzs2NTIsOSBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiAJCXdha2VfbmV4dF93cml0ZXIgPSB0cnVlOwogCX0KIG91dDoKLQlhbm9uX3BpcGVfcmVmaWxsX3RtcF9wYWdlcyhwaXBlLCAmYW1wO3ByZWFsbG9jKTsKIAlpZiAocGlwZV9pc19mdWxsKHBpcGUpKQogCQl3YWtlX25leHRfd3JpdGVyID0gZmFsc2U7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZS0mZ3Q7bXV0ZXgpOwotCWFub25fcGlwZV9mcmVlX3BhZ2VzKCZhbXA7cHJlYWxsb2MpOwomIzQzOwlhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2socGlwZSk7CiAKIAkvKgogCSAqIElmIHdlIGRvIGRvIGEgd2FrZXVwIGV2ZW50LCB3ZSBkbyBhICYjMzk7c3luYyYjMzk7IHdha2V1cCwgYmVjYXVzZSB3ZQpAQCAtOTU2LDEwICYjNDM7OTM1LDggQEAgdm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKQogCWlmIChwaXBlLSZndDt3YXRjaF9xdWV1ZSkKIAkJcHV0X3dhdGNoX3F1ZXVlKHBpcGUtJmd0O3dhdGNoX3F1ZXVlKTsKICNlbmRpZgotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBpcGUtJmd0O3RtcF9wYWdlKTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBpcGUtJmd0O3RtcF9wYWdlW2ldKQotCQkJX19mcmVlX3BhZ2UocGlwZS0mZ3Q7dG1wX3BhZ2VbaV0pOwotCX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBpcGUtJmd0O3ByZWFsbG9jLmNvdW50OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9fZnJlZV9wYWdlKHBpcGUtJmd0O3ByZWFsbG9jLnBhZ2VzW2ldKTsKIAlrZnJlZShwaXBlLSZndDtidWZzKTsKIAlrZnJlZShwaXBlKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCmluZGV4IDdmNmE5MmFjOTcwNDc4Li40ZTJlNGY0NGZiZTVmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCkBAIC0xNCw2ICYjNDM7MTQsOSBAQAogI2RlZmluZSBQSVBFX0JVRl9GTEFHX0xPU1MJMHg0MAkvKiBNZXNzYWdlIGxvc3MgaGFwcGVuZWQgYWZ0ZXIgdGhpcyBidWZmZXIgKi8KICNlbmRpZgogCiYjNDM7I2RlZmluZSBQSVBFX1BSRUFMTE9DX01BWAk4CS8qIG1heCBwYWdlcyBpbiBwcmVhbGxvYyBwb29sICovCiYjNDM7I2RlZmluZSBQSVBFX1BSRUFMTE9DX0tFRVAJMgkvKiBrZWVwIGF0IGxlYXN0IHRoaXMgbWFueSBhZnRlciB0cmltICovCiYjNDM7CiAvKioKICAqCXN0cnVjdCBwaXBlX2J1ZmZlciAtIGEgbGludXgga2VybmVsIHBpcGUgYnVmZmVyCiAgKglAcGFnZTogdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgZGF0YSBmb3IgdGhlIHBpcGUgYnVmZmVyCkBAIC01OCw2ICYjNDM7NjEsMjAgQEAgdW5pb24gcGlwZV9pbmRleCB7CiAJfTsKIH07CiAKJiM0MzsvKioKJiM0MzsgKglzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIC0gcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2wKJiM0MzsgKglAcGFnZXM6IGFycmF5IG9mIGNhY2hlZCBwYWdlcyAocG9vbCkKJiM0MzsgKglAY291bnQ6IG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgaW4gdGhlIHBvb2wKJiM0MzsgKgomIzQzOyAqIEVhY2ggcGlwZSBrZWVwcyBhIHNtYWxsIGJvdW5kZWQgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgcGFnZXMgdG8gcmVkdWNlCiYjNDM7ICogYWxsb2NhdGlvbiBvdmVyaGVhZCBkdXJpbmcgd3JpdGVzLiBUaGUgcG9vbCBpcyBib3VuZGVkIGF0IFBJUEVfUFJFQUxMT0NfTUFYCiYjNDM7ICogYW5kIHRyaW1tZWQgZG93biB0byBQSVBFX1BSRUFMTE9DX0tFRVAgYWZ0ZXIgYSB3cml0ZSBjb21wbGV0ZXMuCiYjNDM7ICovCiYjNDM7c3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyB7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07CiYjNDM7CXVuc2lnbmVkIGludCBjb3VudDsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKglzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIC0gYSBsaW51eCBrZXJuZWwgcGlwZQogICoJQG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZwpAQCAtNjgsNyAmIzQzOzg1LDcgQEAgdW5pb24gcGlwZV9pbmRleCB7CiAgKglAbWF4X3VzYWdlOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtYXkgYmUgdXNlZCBpbiB0aGUgcmluZwogICoJQHJpbmdfc2l6ZTogdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgKHNob3VsZCBiZSBhIHBvd2VyIG9mIDIpCiAgKglAbnJfYWNjb3VudGVkOiBUaGUgYW1vdW50IHRoaXMgcGlwZSBhY2NvdW50cyBmb3IgaW4gdXNlci0mZ3Q7cGlwZV9idWZzCi0gKglAdG1wX3BhZ2U6IGNhY2hlZCByZWxlYXNlZCBwYWdlCiYjNDM7ICoJQHByZWFsbG9jOiBwZXItcGlwZSBwYWdlIHByZWFsbG9jYXRpb24gcG9vbAogICoJQHJlYWRlcnM6IG51bWJlciBvZiBjdXJyZW50IHJlYWRlcnMgb2YgdGhpcyBwaXBlCiAgKglAd3JpdGVyczogbnVtYmVyIG9mIGN1cnJlbnQgd3JpdGVycyBvZiB0aGlzIHBpcGUKICAqCUBmaWxlczogbnVtYmVyIG9mIHN0cnVjdCBmaWxlIHJlZmVycmluZyB0aGlzIHBpcGUgKHByb3RlY3RlZCBieSAtJmd0O2lfbG9jaykKQEAgLTk5LDcgJiM0MzsxMTYsNyBAQCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKICNpZmRlZiBDT05GSUdfV0FUQ0hfUVVFVUUKIAlib29sIG5vdGVfbG9zczsKICNlbmRpZgotCXN0cnVjdCBwYWdlICp0bXBfcGFnZVsyXTsKJiM0MzsJc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyBwcmVhbGxvYzsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3JlYWRlcnM7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzOwogCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM5NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBpcGUgUGFnZSBQcmVhbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBmcy9waXBlLmNgIGFuZCBgaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0JiMzOTtzIGFib3V0IGNoYW5naW5nIGhvdyBwaXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiB3b3Jrcy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIGhvdyBwaXBlcyBmdW5jdGlvbiBpbiB0aGUga2VybmVsLCBhbmQgdGhhdCYjMzk7cyBhIHJlZCBmbGFnIOKAkyBhIGdvb2QgcmVkIGZsYWcgZm9yIGZ1enppbmcsIHRoYXQgaXMuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHdob2xlIG5ldyBzZXQgb2YgZnVuY3Rpb25zOiBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgLCBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYCwgYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYCwgYW5kIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYCwgYW5kIGFsc28gbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBsaWtlIGBhbm9uX3BpcGVfcmVhZGAsIGBhbm9uX3BpcGVfd3JpdGVgLCBhbmQgYGZyZWVfcGlwZV9pbmZvYC4gSXQmIzM5O3MgYWxzbyBjaGFuZ2luZyB0aGUgYHN0cnVjdCBwaXBlX2lub2RlX2luZm9gIHRvIHVzZSB0aGlzIG5ldyBgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyBwcmVhbGxvY2AgaW5zdGVhZCBvZiB0aGF0IG9sZCBgc3RydWN0IHBhZ2UgKnRtcF9wYWdlWzJdYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIGdvdCBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yLCBzbyBmdXp6aW5nIGlzIGEgKm11c3QqLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWdzLiBMZXQmIzM5O3Mgc2VlLi4uIGBmcy9waXBlLmNgIGlzIGFsd2F5cyBjb21waWxlZC4gUGVyZmVjdCwgbm8gZGVwZW5kZW5jaWVzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgZm9yIGZ1enppbmcuICBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgYXMgYmVsb3c6CgotIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYAotIGBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaGAKLSBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgCi0gYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AKLSBgYW5vbl9waXBlX2dldF9wYWdlYAotIGBhbm9uX3BpcGVfcHV0X3BhZ2VgCi0gYGFub25fcGlwZV9idWZfcmVsZWFzZWAKLSBgYW5vbl9waXBlX3JlYWRgCi0gYGFub25fcGlwZV93cml0ZWAKLSBgZnJlZV9waXBlX2luZm9gCgpgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhcmUgaW4gdGhlIGhvdCBwYXRoLCBzbyB0aG9zZSBhcmUgaGlnaCBwcmlvcml0eSwgb2J2aW91c2x5LiAgYGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrYCBhbmQgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcyBhcyB3ZWxsIOKAkyBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGNvcmUgcHJlYWxsb2NhdGlvbiBsb2dpYy4gIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYCBhbmQgYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYCBhcmUgc3RhdGljLCBidXQgbWlnaHQgYmUgaW5saW5lZC4gSSBzaG91bGQga2VlcCB0aGVtIG9uIHRoZSBsaXN0IHJlZ2FyZGxlc3MuICBIb2xkIG9uLi4uIGFyZSBgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhY3R1YWxseSBzdGF0aWMgZnVuY3Rpb25zIGluIGBmcy9waXBlLmNgPyBUaGV5IG1pZ2h0IGJlIGV4cG9ydGVkIG9yIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IEkmIzM5O2xsIGNoZWNrIGBmcy9waXBlLmNgIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waXBlLmM9MTI1PXN0YXRpYyBib29sIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxuLS1cbmZzL3BpcGUuYy0xNDAtICovXG5mcy9waXBlLmM6MTQxOnN0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG5mcy9waXBlLmMtMTQyLXtcbi0tXG5mcy9waXBlLmM9NTA3PWFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9waXBlLmMtNTMzLVxuZnMvcGlwZS5jOjUzNDpcdGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHBpcGUsIHRvdGFsX2xlbik7XG5mcy9waXBlLmMtNTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaGFuZGxpbmcgdGhlIHBvb2wgdHJpbW1pbmcgYW5kIHVubG9ja2luZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYW5vbnltb3VzIHBpcGUgbWVjaGFuaXNtLiBNeSB1bmRlcnN0YW5kaW5nIGlzIGl0IGRpcmVjdGx5IGRlYWxzIHdpdGggcmVzb3VyY2UgbWFuYWdlbWVudC4gSSB3YW50IHRvIGNoZWNrIGhvdyBlZmZpY2llbnRseSBpdCBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIHVudXNlZCBzZWdtZW50cywgbWFraW5nIHN1cmUgaXQgZG9lc27igJl0IGludHJvZHVjZSB1bmR1ZSBmcmFnbWVudGF0aW9uIG9yIGJsb2NrIHByb2Nlc3NlcyB1bm5lY2Vzc2FyaWx5IGR1cmluZyB1bmxvY2tpbmcuIFRoZSBsb2NraW5nIHByb3RvY29sIGluIHRoaXMgcGFydCBpcyBwYXJ0aWN1bGFybHkgcHJvbmUgdG8gY29udGVudGlvbiwgc28gSSB3aWxsIHNjcnV0aW5pemUgdGhhdCBhcmVhIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gQW55IHJlY2VudCBjaGFuZ2VzLCBwYXRjaGVzLCBvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB0aGF0IGhhdmUgdG91Y2hlZCB0aGlzIGZ1bmN0aW9uPyBJJiMzOTtsbCByZXZpZXcgYW55IHJlbGV2YW50IHRlc3QgY2FzZXMsIGJlbmNobWFya3MsIGFuZCBwZXJoYXBzIHNvbWUgaW5zdHJ1bWVudGF0aW9uIGRhdGEsIGlmIGl0IGV4aXN0cywgdG8gaWRlbnRpZnkgaWYgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIG9yIHBvdGVudGlhbCBpc3N1ZXMuIEdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgcGlwZXMgaW4gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBvcGVyYXRpbmcgb3B0aW1hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waXBlLmM9MTQxPXN0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG4tLVxuZnMvcGlwZS5jLTE4MC0gKi9cbmZzL3BpcGUuYzoxODE6c3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG5mcy9waXBlLmMtMTgyLXtcbi0tXG5mcy9waXBlLmM9MzQ0PWFub25fcGlwZV9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9waXBlLmMtNDcxLVx0LyogQ29uc3VtZWQgYnVmZmVycyBtYXkgaGF2ZSByZWZpbGxlZCB0aGUgcG9vbDsgdHJpbSBpdCBhbmQgdW5sb2NrLiAqL1xuZnMvcGlwZS5jOjQ3MjpcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbmZzL3BpcGUuYy00NzMtXG4tLVxuZnMvcGlwZS5jPTUwNz1hbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvcGlwZS5jLTY1Ni1cdFx0d2FrZV9uZXh0X3dyaXRlciA9IGZhbHNlO1xuZnMvcGlwZS5jOjY1NzpcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbmZzL3BpcGUuYy02NTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI5NgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogUGlwZSBQYWdlIFByZWFsbG9jYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZ1enppbmcgdGhpcyBwaXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiBwYXRjaC4gSSBrbm93IHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgSS9PIGFyZSBgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCDigJMgcHJvYmFibHkgaG90IHBhdGhzLCBidXQgdGhleSYjMzk7cmUgbGlrZWx5IGdvaW5nIHRvIGdldCB0ZXN0ZWQgZXh0ZW5zaXZlbHkgYW55d2F5LiBUaGlzIHBhdGNoJiMzOTtzIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgbXkgcHJpbWFyeSB0YXJnZXRzLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlbS4KCkkmIzM5O3ZlIGdvdCB0aGUgbGlzdDoKCiogICBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgCiogICBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYAoqICAgYGFub25fcGlwZV9nZXRfcGFnZWAKKiAgIGBhbm9uX3BpcGVfcHV0X3BhZ2VgCiogICBgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hgCiogICBgYW5vbl9waXBlX3ByZWFsbG9jX3BvcGAKClRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIOKAkyBwaXBlcyBhcmUgYWx3YXlzIGVuYWJsZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnZvbHZlcyBhIG5ldyBwcmVhbGxvY2F0aW9uIHBvb2wgYW5kIG1vZGlmaWVkIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhlIHBpcGUgY29kZS4gVGhpcyBzbWVsbHMgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24g4oCTIGxlYWtzLCBVQUZzLCByYWNlcy4gR290dGEgaGFtbWVyIHRob3NlIQoKSnVzdCBkb3VibGUgY2hlY2tpbmcsIHRoZXJlIGlzIGBmcmVlX3BpcGVfaW5mb2AgYWxzbyBtb2RpZmllZCwgYnV0IGl0JiMzOTtzIHByZXR0eSBnZW5lcmljLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBkaXJlY3Rpb24uIEkmIzM5O2xsIGNhbGwgc2V0LXJlc3VsdHMgbm93IGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfZ2V0X3BhZ2UmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3B1dF9wYWdlJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wdXNoJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgcHJlYWxsb2NhdGlvbiBsb2dpYyBmb3IgcGlwZXMsIGludHJvZHVjaW5nIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGR1cmluZyBwaXBlIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2smIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX2dldF9wYWdlJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wdXRfcGFnZSYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfcHJlYWxsb2NfcHVzaCYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfcHJlYWxsb2NfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIHByZWFsbG9jYXRpb24gbG9naWMgZm9yIHBpcGVzLCBpbnRyb2R1Y2luZyBhIG5ldyBwcmVhbGxvY2F0aW9uIHBvb2wgYW5kIGNoYW5naW5nIGhvdyBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCBkdXJpbmcgcGlwZSByZWFkcyBhbmQgd3JpdGVzLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzowOS43NzgyNTMzMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDcxNDAxMDc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja1wiLFxuICAgIFwiYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrXCIsXG4gICAgXCJhbm9uX3BpcGVfZ2V0X3BhZ2VcIixcbiAgICBcImFub25fcGlwZV9wdXRfcGFnZVwiLFxuICAgIFwiYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hcIixcbiAgICBcImFub25fcGlwZV9wcmVhbGxvY19wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBwcmVhbGxvY2F0aW9uIGxvZ2ljIGZvciBwaXBlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJlYWxsb2NhdGlvbiBwb29sIGFuZCBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgZHVyaW5nIHBpcGUgcmVhZHMgYW5kIHdyaXRlcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzowOS43NzgyODY5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODYzMTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhODBjNDk4MjE4NzQ3YWYwNTRmYjBhMTg5YTFhYzVkNzk3NGY1ZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTA6MDM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jXFxuaW5kZXggNDI5YjA3MTRlYzU3NTUuLmIxNGQ1YmIyYjQ1YTQ1IDEwMDY0NFxcbi0tLSBhL2ZzL3BpcGUuY1xcbisrKyBiL2ZzL3BpcGUuY1xcbkBAIC0xMTEsNzUgKzExMSw5NSBAQCB2b2lkIHBpcGVfZG91YmxlX2xvY2soc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTEsXFxuIFxcdHBpcGVfbG9jayhwaXBlMik7XFxuIH1cXG4gXFxuLSNkZWZpbmUgUElQRV9QUkVBTExPQ19NQVggOFxcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9wcmVhbGxvY19wb3Aoc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpXFxuK3tcXG4rXFx0aWYgKCFwcmVhbGxvYy1cXHUwMDNlY291bnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyB7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tfTtcXG4rXFx0cHJlYWxsb2MtXFx1MDAzZWNvdW50LS07XFxuK1xcbitcXHRyZXR1cm4gcHJlYWxsb2MtXFx1MDAzZXBhZ2VzW3ByZWFsbG9jLVxcdTAwM2Vjb3VudF07XFxuK31cXG4rXFxuKy8qIFB1c2ggYSBwYWdlIHRvIHRoZSBwcmVhbGxvYyBwb29sLiBSZXR1cm5zIHRydWUgaWYgYWRkZWQsIGZhbHNlIGlmIGZ1bGwuICovXFxuK3N0YXRpYyBib29sIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0aWYgKHByZWFsbG9jLVxcdTAwM2Vjb3VudCBcXHUwMDNlPSBQSVBFX1BSRUFMTE9DX01BWClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRwcmVhbGxvYy1cXHUwMDNlcGFnZXNbcHJlYWxsb2MtXFx1MDAzZWNvdW50KytdID0gcGFnZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gXFxuIC8qXFxuLSAqIFByZS1hbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIHBpcGUtXFx1MDAzZW11dGV4IGZvciBtdWx0aS1wYWdlIHdyaXRlcy5cXG4tICogYWxsb2NfcGFnZSgpIHdpdGggR0ZQX0hJR0hVU0VSIGNhbiBzbGVlcCBpbiByZWNsYWltIGFuZCBydW5zIG1lbWNnXFxuLSAqIGNoYXJnaW5nOyBkb2luZyBpdCB1bmRlciB0aGUgbXV0ZXggc3RhbGxzIGEgY29uY3VycmVudCByZWFkZXIuXFxuLSAqXFxuLSAqIExvb3AgYWxsb2NfcGFnZSgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfYnVsa18qKCk6IHRoZSBidWxrIHBhdGggcmVmdXNlc1xcbi0gKiBfX0dGUF9BQ0NPVU5UIHVuZGVyIG1lbWNnIChzZWUgY29tbWl0IDhkY2IzMDYwZDgxZCBcXFwibWVtY2c6IHBhZ2VfYWxsb2M6XFxuLSAqIHNraXAgYnVsayBhbGxvY2F0b3IgZm9yIF9fR0ZQX0FDQ09VTlRcXFwiKSBhbmQgc2lsZW50bHkgZGVncmFkZXMgdG8gYSBzaW5nbGVcXG4tICogcGFnZS4gQSBwZXItcGFnZSBsb29wIGtlZXBzIG1lbWNnIGFjY291bnRpbmcgYW5kIHRoZSB0YXNrIE5VTUEgbWVtcG9saWN5XFxuLSAqIGhvbm91cmVkIGZvciBldmVyeSBwYWdlOyB0aGUgcGVyLWNhbGwgb3ZlcmhlYWQgaXMgc21hbGwgY29tcGFyZWQgdG8gdGhlXFxuLSAqIHBpcGUtXFx1MDAzZW11dGV4IGhvbGQtdGltZSBiZWluZyBzaHJ1bmsuIEFueSBzaG9ydGZhbGwgaXMgY292ZXJlZCBieSB0aGVcXG4tICogaW4tbG9jayBhbGxvY19wYWdlKCkgZmFsbGJhY2sgaW4gYW5vbl9waXBlX2dldF9wYWdlKCkuXFxuKyAqIFRvcCB1cCB0aGUgcGlwZSdzIG93biBwb29sLCB0aGVuIHRha2UgcGlwZS1cXHUwMDNlbXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuXFxuKyAqIFRoZSBzaG9ydGZhbGwgaXMgYWxsb2NhdGVkIG91dHNpZGUgdGhlIGxvY2s7IHRoZSBwdXNoIGFuZCB0aGUgY2FsbGVyJ3Mgd3JpdGVcXG4rICogdGhlbiBydW4gdW5kZXIgYSBzaW5nbGUgbG9jayBhY3F1aXNpdGlvbiwgYXZvaWRpbmcgYSBzZXBhcmF0ZSBwcmVmaWxsXFxuKyAqIGxvY2svdW5sb2NrIGN5Y2xlLiBhbm9uX3BpcGVfZ2V0X3BhZ2UoKSBkcmFpbnMgdGhlIHBvb2wgaW5zdGVhZCBvZiBhbGxvY2F0aW5nXFxuKyAqIHVuZGVyIHRoZSBsb2NrLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxcbi1cXHRcXHRcXHRcXHRcXHRzaXplX3QgdG90YWxfbGVuKVxcbitzdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgdG90YWxfbGVuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCB3YW50LCBpO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4tXFxuLVxcdHByZWFsbG9jLVxcdTAwM2Vjb3VudCA9IDA7XFxuLVxcdGlmICh0b3RhbF9sZW4gXFx1MDAzYz0gUEFHRV9TSVpFKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XFxuK1xcdHVuc2lnbmVkIGludCB3YW50LCBoYXZlLCBuZWVkLCBuID0gMDtcXG4gXFxuIFxcdHdhbnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIERJVl9ST1VORF9VUCh0b3RhbF9sZW4sIFBBR0VfU0laRSksXFxuIFxcdFxcdCAgICAgUElQRV9QUkVBTExPQ19NQVgpO1xcbitcXHQvKiBVbmxvY2tlZCByZWFkOyB0aGUgcG9vbCBpcyByZWZpbGxlZCB1bmRlciB0aGUgbG9jayBiZWxvdy4gKi9cXG4rXFx0aGF2ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUkVBRF9PTkNFKHBpcGUtXFx1MDAzZXByZWFsbG9jLmNvdW50KSwgd2FudCk7XFxuK1xcdG5lZWQgPSB3YW50IC0gaGF2ZTtcXG4rXFxuK1xcdGlmICghbmVlZCkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwaXBlLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0d2hpbGUgKG4gXFx1MDAzYyBuZWVkKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIgfCBfX0dGUF9BQ0NPVU5UKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3YW50OyBpKyspIHtcXG4tXFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XFxuIFxcdFxcdGlmICghcGFnZSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHByZWFsbG9jLVxcdTAwM2VwYWdlc1twcmVhbGxvYy1cXHUwMDNlY291bnQrK10gPSBwYWdlO1xcbitcXHRcXHRwYWdlc1tuKytdID0gcGFnZTtcXG4gXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbitcXHR3aGlsZSAobiBcXHUwMDI2XFx1MDAyNiBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChcXHUwMDI2cGlwZS1cXHUwMDNlcHJlYWxsb2MsIHBhZ2VzW24gLSAxXSkpXFxuK1xcdFxcdG4tLTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEp1c3QgZmx1c2ggYW55IGV4dHJhIHBhZ2UgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgdGhlIFRPQ1RPVVxcbitcXHQgKiBlZmZlY3RcXG4rXFx0ICovXFxuK1xcdHdoaWxlIChuKVxcbitcXHRcXHRwdXRfcGFnZShwYWdlc1stLW5dKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKVxcbisvKlxcbisgKiBDYWxsZWQgd2l0aCBwaXBlLVxcdTAwM2VtdXRleCBoZWxkLiBUcmltIHRoZSBwb29sIGRvd24gdG8gUElQRV9QUkVBTExPQ19LRUVQIHVuZGVyXFxuKyAqIHRoZSBsb2NrLCBkcm9wIGl0LCB0aGVuIGZyZWUgdGhlIGV4Y2VzcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXFxuIHtcXG4tXFx0aWYgKCFwcmVhbGxvYy1cXHUwMDNlY291bnQpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRzdHJ1Y3QgcGFnZSAqZXhjZXNzW1BJUEVfUFJFQUxMT0NfTUFYXTtcXG4rXFx0dW5zaWduZWQgaW50IG5leGNlc3MgPSAwO1xcbiBcXG4tXFx0cHJlYWxsb2MtXFx1MDAzZWNvdW50LS07XFxuK1xcdHdoaWxlIChwaXBlLVxcdTAwM2VwcmVhbGxvYy5jb3VudCBcXHUwMDNlIFBJUEVfUFJFQUxMT0NfS0VFUClcXG4rXFx0XFx0ZXhjZXNzW25leGNlc3MrK10gPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKFxcdTAwMjZwaXBlLVxcdTAwM2VwcmVhbGxvYyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbiBcXG4tXFx0cmV0dXJuIHByZWFsbG9jLVxcdTAwM2VwYWdlc1twcmVhbGxvYy1cXHUwMDNlY291bnRdO1xcbitcXHR3aGlsZSAobmV4Y2VzcylcXG4rXFx0XFx0cHV0X3BhZ2UoZXhjZXNzWy0tbmV4Y2Vzc10pO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYW5vbl9waXBlX2dldF9wYWdlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbi1cXHQvKiBEcmFpbiBwcmVhbGxvYyBmaXJzdCB0byBrZWVwIHRtcF9wYWdlW10gaG90IGZvciBsYXRlciBzbWFsbCB3cml0ZXMuICovXFxuLVxcdHBhZ2UgPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHByZWFsbG9jKTtcXG4rXFx0LyogRHJhaW4gdGhlIHByZWFsbG9jIHBvb2wgYmVmb3JlIGFsbG9jYXRpbmcuIENhbGxlZCB3aXRoIG11dGV4IGhlbGQuICovXFxuK1xcdHBhZ2UgPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKFxcdTAwMjZwaXBlLVxcdTAwM2VwcmVhbGxvYyk7XFxuIFxcdGlmIChwYWdlKVxcbiBcXHRcXHRyZXR1cm4gcGFnZTtcXG4gXFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwaXBlLVxcdTAwM2V0bXBfcGFnZSk7IGkrKykge1xcbi1cXHRcXHRpZiAocGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0pIHtcXG4tXFx0XFx0XFx0cGFnZSA9IHBpcGUtXFx1MDAzZXRtcF9wYWdlW2ldO1xcbi1cXHRcXHRcXHRwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSA9IE5VTEw7XFxuLVxcdFxcdFxcdHJldHVybiBwYWdlO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuIFxcdC8qIEZXSVc6IFRoaXMgaXMgY2FsbGVkIHdpdGggcGlwZS1cXHUwMDNlbXV0ZXggaGVsZCAqL1xcbiBcXHRyZXR1cm4gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIgfCBfX0dGUF9BQ0NPVU5UKTtcXG4gfVxcbkBAIC0xODcsNDggKzIwNywxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbiBzdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHV0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdGlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHtcXG4tXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXFx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmICghcGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0pIHtcXG4tXFx0XFx0XFx0XFx0cGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0gPSBwYWdlO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRwdXRfcGFnZShwYWdlKTtcXG4tfVxcbi1cXG4tLypcXG4tICogU3Rhc2ggbGVmdG92ZXIgcHJlYWxsb2MgcGFnZXMgaW4gdG1wX3BhZ2VbXSBzbyB0aGUgbmV4dCB3cml0ZSB0byB0aGlzXFxuLSAqIHBpcGUgZ2V0cyBhIGhvdCBwYWdlIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGFsbG9jYXRvci5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcXG4te1xcbi1cXHRpbnQgaSwgaWR4O1xcbi1cXG4tXFx0aWYgKCFwcmVhbGxvYy1cXHUwMDNlY291bnQpXFxuK1xcdGlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKFxcdTAwMjZwaXBlLVxcdTAwM2VwcmVhbGxvYywgcGFnZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXFx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmICghcHJlYWxsb2MtXFx1MDAzZWNvdW50KVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGlkeCA9IC0tcHJlYWxsb2MtXFx1MDAzZWNvdW50O1xcbi1cXHRcXHRwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSA9IHByZWFsbG9jLVxcdTAwM2VwYWdlc1tpZHhdO1xcbi1cXHRcXHRwcmVhbGxvYy1cXHUwMDNlcGFnZXNbaWR4XSA9IE5VTEw7XFxuLVxcdH1cXG4tfVxcbi1cXG4tLyogUnVucyBhZnRlciBtdXRleF91bmxvY2soKSB0byBrZWVwIHB1dF9wYWdlKCkgb3V0IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLiAqL1xcbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZnJlZV9wYWdlcyhzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcXG4te1xcbi1cXHR3aGlsZSAocHJlYWxsb2MtXFx1MDAzZWNvdW50KSB7XFxuLVxcdFxcdHByZWFsbG9jLVxcdTAwM2Vjb3VudC0tO1xcbi1cXHRcXHRwdXRfcGFnZShwcmVhbGxvYy1cXHUwMDNlcGFnZXNbcHJlYWxsb2MtXFx1MDAzZWNvdW50XSk7XFxuLVxcdH1cXG4rXFx0cHV0X3BhZ2UocGFnZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGFub25fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbkBAIC00ODUsNyArNDY4LDggQEAgYW5vbl9waXBlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbiBcXHR9XFxuIFxcdGlmIChwaXBlX2lzX2VtcHR5KHBpcGUpKVxcbiBcXHRcXHR3YWtlX25leHRfcmVhZGVyID0gZmFsc2U7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbitcXHQvKiBDb25zdW1lZCBidWZmZXJzIG1heSBoYXZlIHJlZmlsbGVkIHRoZSBwb29sOyB0cmltIGl0IGFuZCB1bmxvY2suICovXFxuK1xcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG4gXFxuIFxcdGlmICh3YWtlX3dyaXRlcilcXG4gXFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbChcXHUwMDI2cGlwZS1cXHUwMDNld3Jfd2FpdCwgRVBPTExPVVQgfCBFUE9MTFdSTk9STSk7XFxuQEAgLTUyNCw3ICs1MDgsNiBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbiBcXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbi1cXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHByZWFsbG9jO1xcbiBcXHR1bnNpZ25lZCBpbnQgaGVhZDtcXG4gXFx0c3NpemVfdCByZXQgPSAwO1xcbiBcXHRzaXplX3QgdG90YWxfbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XFxuQEAgLTU0OCw5ICs1MzEsNyBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIFxcdGlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0YW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKFxcdTAwMjZwcmVhbGxvYywgdG90YWxfbGVuKTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBpcGUtXFx1MDAzZW11dGV4KTtcXG4rXFx0YW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2socGlwZSwgdG90YWxfbGVuKTtcXG4gXFxuIFxcdGlmICghcGlwZS1cXHUwMDNlcmVhZGVycykge1xcbiBcXHRcXHRpZiAoKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1NJR05BTCkgPT0gMClcXG5AQCAtNjA3LDcgKzU4OCw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4gXFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdFxcdFxcdGludCBjb3BpZWQ7XFxuIFxcbi1cXHRcXHRcXHRwYWdlID0gYW5vbl9waXBlX2dldF9wYWdlKHBpcGUsIFxcdTAwMjZwcmVhbGxvYyk7XFxuK1xcdFxcdFxcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7XFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG4gXFx0XFx0XFx0XFx0aWYgKCFyZXQpXFxuIFxcdFxcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuQEAgLTY3MSwxMSArNjUyLDkgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRcXHR3YWtlX25leHRfd3JpdGVyID0gdHJ1ZTtcXG4gXFx0fVxcbiBvdXQ6XFxuLVxcdGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHBpcGUsIFxcdTAwMjZwcmVhbGxvYyk7XFxuIFxcdGlmIChwaXBlX2lzX2Z1bGwocGlwZSkpXFxuIFxcdFxcdHdha2VfbmV4dF93cml0ZXIgPSBmYWxzZTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaXBlLVxcdTAwM2VtdXRleCk7XFxuLVxcdGFub25fcGlwZV9mcmVlX3BhZ2VzKFxcdTAwMjZwcmVhbGxvYyk7XFxuK1xcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGRvIGRvIGEgd2FrZXVwIGV2ZW50LCB3ZSBkbyBhICdzeW5jJyB3YWtldXAsIGJlY2F1c2Ugd2VcXG5AQCAtOTU2LDEwICs5MzUsOCBAQCB2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXFxuIFxcdGlmIChwaXBlLVxcdTAwM2V3YXRjaF9xdWV1ZSlcXG4gXFx0XFx0cHV0X3dhdGNoX3F1ZXVlKHBpcGUtXFx1MDAzZXdhdGNoX3F1ZXVlKTtcXG4gI2VuZGlmXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXFx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSlcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UocGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0pO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwaXBlLVxcdTAwM2VwcmVhbGxvYy5jb3VudDsgaSsrKVxcbitcXHRcXHRfX2ZyZWVfcGFnZShwaXBlLVxcdTAwM2VwcmVhbGxvYy5wYWdlc1tpXSk7XFxuIFxcdGtmcmVlKHBpcGUtXFx1MDAzZWJ1ZnMpO1xcbiBcXHRrZnJlZShwaXBlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxcbmluZGV4IDdmNmE5MmFjOTcwNDc4Li40ZTJlNGY0NGZiZTVmNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxcbkBAIC0xNCw2ICsxNCw5IEBAXFxuICNkZWZpbmUgUElQRV9CVUZfRkxBR19MT1NTXFx0MHg0MFxcdC8qIE1lc3NhZ2UgbG9zcyBoYXBwZW5lZCBhZnRlciB0aGlzIGJ1ZmZlciAqL1xcbiAjZW5kaWZcXG4gXFxuKyNkZWZpbmUgUElQRV9QUkVBTExPQ19NQVhcXHQ4XFx0LyogbWF4IHBhZ2VzIGluIHByZWFsbG9jIHBvb2wgKi9cXG4rI2RlZmluZSBQSVBFX1BSRUFMTE9DX0tFRVBcXHQyXFx0Lyoga2VlcCBhdCBsZWFzdCB0aGlzIG1hbnkgYWZ0ZXIgdHJpbSAqL1xcbitcXG4gLyoqXFxuICAqXFx0c3RydWN0IHBpcGVfYnVmZmVyIC0gYSBsaW51eCBrZXJuZWwgcGlwZSBidWZmZXJcXG4gICpcXHRAcGFnZTogdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgZGF0YSBmb3IgdGhlIHBpcGUgYnVmZmVyXFxuQEAgLTU4LDYgKzYxLDIwIEBAIHVuaW9uIHBpcGVfaW5kZXgge1xcbiBcXHR9O1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqXFx0c3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAtIHBlci1waXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiBwb29sXFxuKyAqXFx0QHBhZ2VzOiBhcnJheSBvZiBjYWNoZWQgcGFnZXMgKHBvb2wpXFxuKyAqXFx0QGNvdW50OiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IGluIHRoZSBwb29sXFxuKyAqXFxuKyAqIEVhY2ggcGlwZSBrZWVwcyBhIHNtYWxsIGJvdW5kZWQgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgcGFnZXMgdG8gcmVkdWNlXFxuKyAqIGFsbG9jYXRpb24gb3ZlcmhlYWQgZHVyaW5nIHdyaXRlcy4gVGhlIHBvb2wgaXMgYm91bmRlZCBhdCBQSVBFX1BSRUFMTE9DX01BWFxcbisgKiBhbmQgdHJpbW1lZCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCBhZnRlciBhIHdyaXRlIGNvbXBsZXRlcy5cXG4rICovXFxuK3N0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2Mge1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9QUkVBTExPQ19NQVhdO1xcbitcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuK307XFxuK1xcbiAvKipcXG4gICpcXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIC0gYSBsaW51eCBrZXJuZWwgcGlwZVxcbiAgKlxcdEBtdXRleDogbXV0ZXggcHJvdGVjdGluZyB0aGUgd2hvbGUgdGhpbmdcXG5AQCAtNjgsNyArODUsNyBAQCB1bmlvbiBwaXBlX2luZGV4IHtcXG4gICpcXHRAbWF4X3VzYWdlOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtYXkgYmUgdXNlZCBpbiB0aGUgcmluZ1xcbiAgKlxcdEByaW5nX3NpemU6IHRvdGFsIG51bWJlciBvZiBidWZmZXJzIChzaG91bGQgYmUgYSBwb3dlciBvZiAyKVxcbiAgKlxcdEBucl9hY2NvdW50ZWQ6IFRoZSBhbW91bnQgdGhpcyBwaXBlIGFjY291bnRzIGZvciBpbiB1c2VyLVxcdTAwM2VwaXBlX2J1ZnNcXG4tICpcXHRAdG1wX3BhZ2U6IGNhY2hlZCByZWxlYXNlZCBwYWdlXFxuKyAqXFx0QHByZWFsbG9jOiBwZXItcGlwZSBwYWdlIHByZWFsbG9jYXRpb24gcG9vbFxcbiAgKlxcdEByZWFkZXJzOiBudW1iZXIgb2YgY3VycmVudCByZWFkZXJzIG9mIHRoaXMgcGlwZVxcbiAgKlxcdEB3cml0ZXJzOiBudW1iZXIgb2YgY3VycmVudCB3cml0ZXJzIG9mIHRoaXMgcGlwZVxcbiAgKlxcdEBmaWxlczogbnVtYmVyIG9mIHN0cnVjdCBmaWxlIHJlZmVycmluZyB0aGlzIHBpcGUgKHByb3RlY3RlZCBieSAtXFx1MDAzZWlfbG9jaylcXG5AQCAtOTksNyArMTE2LDcgQEAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7XFxuICNpZmRlZiBDT05GSUdfV0FUQ0hfUVVFVUVcXG4gXFx0Ym9vbCBub3RlX2xvc3M7XFxuICNlbmRpZlxcbi1cXHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2VbMl07XFxuK1xcdHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2M7XFxuIFxcdHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcmVhZGVycztcXG4gXFx0c3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzO1xcbiBcXHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjEwLjU2NzkxMTUwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjQzNDUxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tcIixcbiAgICBcImFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja1wiLFxuICAgIFwiYW5vbl9waXBlX2dldF9wYWdlXCIsXG4gICAgXCJhbm9uX3BpcGVfcHV0X3BhZ2VcIixcbiAgICBcImFub25fcGlwZV9wcmVhbGxvY19wdXNoXCIsXG4gICAgXCJhbm9uX3BpcGVfcHJlYWxsb2NfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgcHJlYWxsb2NhdGlvbiBsb2dpYyBmb3IgcGlwZXMsIGludHJvZHVjaW5nIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGR1cmluZyBwaXBlIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YTgwYzQ5ODIxODc0N2FmMDU0ZmIwYTE4OWExYWM1ZDc5NzRmNWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTA6MDM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmNcbmluZGV4IDQyOWIwNzE0ZWM1NzU1Li5iMTRkNWJiMmI0NWE0NSAxMDA2NDRcbi0tLSBhL2ZzL3BpcGUuY1xuKysrIGIvZnMvcGlwZS5jXG5AQCAtMTExLDc1ICsxMTEsOTUgQEAgdm9pZCBwaXBlX2RvdWJsZV9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUxLFxuIFx0cGlwZV9sb2NrKHBpcGUyKTtcbiB9XG4gXG4tI2RlZmluZSBQSVBFX1BSRUFMTE9DX01BWCA4XG4rc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKVxuK3tcbitcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuIFxuLXN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2Mge1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfUFJFQUxMT0NfTUFYXTtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi19O1xuK1x0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbitcbitcdHJldHVybiBwcmVhbGxvYy1cdTAwM2VwYWdlc1twcmVhbGxvYy1cdTAwM2Vjb3VudF07XG4rfVxuK1xuKy8qIFB1c2ggYSBwYWdlIHRvIHRoZSBwcmVhbGxvYyBwb29sLiBSZXR1cm5zIHRydWUgaWYgYWRkZWQsIGZhbHNlIGlmIGZ1bGwuICovXG4rc3RhdGljIGJvb2wgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsXG4rXHRcdFx0XHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKHByZWFsbG9jLVx1MDAzZWNvdW50IFx1MDAzZT0gUElQRV9QUkVBTExPQ19NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHByZWFsbG9jLVx1MDAzZXBhZ2VzW3ByZWFsbG9jLVx1MDAzZWNvdW50KytdID0gcGFnZTtcbitcdHJldHVybiB0cnVlO1xuK31cbiBcbiAvKlxuLSAqIFByZS1hbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIHBpcGUtXHUwMDNlbXV0ZXggZm9yIG11bHRpLXBhZ2Ugd3JpdGVzLlxuLSAqIGFsbG9jX3BhZ2UoKSB3aXRoIEdGUF9ISUdIVVNFUiBjYW4gc2xlZXAgaW4gcmVjbGFpbSBhbmQgcnVucyBtZW1jZ1xuLSAqIGNoYXJnaW5nOyBkb2luZyBpdCB1bmRlciB0aGUgbXV0ZXggc3RhbGxzIGEgY29uY3VycmVudCByZWFkZXIuXG4tICpcbi0gKiBMb29wIGFsbG9jX3BhZ2UoKSBpbnN0ZWFkIG9mIGFsbG9jX3BhZ2VzX2J1bGtfKigpOiB0aGUgYnVsayBwYXRoIHJlZnVzZXNcbi0gKiBfX0dGUF9BQ0NPVU5UIHVuZGVyIG1lbWNnIChzZWUgY29tbWl0IDhkY2IzMDYwZDgxZCBcIm1lbWNnOiBwYWdlX2FsbG9jOlxuLSAqIHNraXAgYnVsayBhbGxvY2F0b3IgZm9yIF9fR0ZQX0FDQ09VTlRcIikgYW5kIHNpbGVudGx5IGRlZ3JhZGVzIHRvIGEgc2luZ2xlXG4tICogcGFnZS4gQSBwZXItcGFnZSBsb29wIGtlZXBzIG1lbWNnIGFjY291bnRpbmcgYW5kIHRoZSB0YXNrIE5VTUEgbWVtcG9saWN5XG4tICogaG9ub3VyZWQgZm9yIGV2ZXJ5IHBhZ2U7IHRoZSBwZXItY2FsbCBvdmVyaGVhZCBpcyBzbWFsbCBjb21wYXJlZCB0byB0aGVcbi0gKiBwaXBlLVx1MDAzZW11dGV4IGhvbGQtdGltZSBiZWluZyBzaHJ1bmsuIEFueSBzaG9ydGZhbGwgaXMgY292ZXJlZCBieSB0aGVcbi0gKiBpbi1sb2NrIGFsbG9jX3BhZ2UoKSBmYWxsYmFjayBpbiBhbm9uX3BpcGVfZ2V0X3BhZ2UoKS5cbisgKiBUb3AgdXAgdGhlIHBpcGUncyBvd24gcG9vbCwgdGhlbiB0YWtlIHBpcGUtXHUwMDNlbXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuXG4rICogVGhlIHNob3J0ZmFsbCBpcyBhbGxvY2F0ZWQgb3V0c2lkZSB0aGUgbG9jazsgdGhlIHB1c2ggYW5kIHRoZSBjYWxsZXIncyB3cml0ZVxuKyAqIHRoZW4gcnVuIHVuZGVyIGEgc2luZ2xlIGxvY2sgYWNxdWlzaXRpb24sIGF2b2lkaW5nIGEgc2VwYXJhdGUgcHJlZmlsbFxuKyAqIGxvY2svdW5sb2NrIGN5Y2xlLiBhbm9uX3BpcGVfZ2V0X3BhZ2UoKSBkcmFpbnMgdGhlIHBvb2wgaW5zdGVhZCBvZiBhbGxvY2F0aW5nXG4rICogdW5kZXIgdGhlIGxvY2suXG4gICovXG4tc3RhdGljIHZvaWQgYW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxuLVx0XHRcdFx0XHRzaXplX3QgdG90YWxfbGVuKVxuK3N0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IHdhbnQsIGk7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdHByZWFsbG9jLVx1MDAzZWNvdW50ID0gMDtcbi1cdGlmICh0b3RhbF9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpXG4tXHRcdHJldHVybjtcbitcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4rXHR1bnNpZ25lZCBpbnQgd2FudCwgaGF2ZSwgbmVlZCwgbiA9IDA7XG4gXG4gXHR3YW50ID0gbWluX3QodW5zaWduZWQgaW50LCBESVZfUk9VTkRfVVAodG90YWxfbGVuLCBQQUdFX1NJWkUpLFxuIFx0XHQgICAgIFBJUEVfUFJFQUxMT0NfTUFYKTtcbitcdC8qIFVubG9ja2VkIHJlYWQ7IHRoZSBwb29sIGlzIHJlZmlsbGVkIHVuZGVyIHRoZSBsb2NrIGJlbG93LiAqL1xuK1x0aGF2ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUkVBRF9PTkNFKHBpcGUtXHUwMDNlcHJlYWxsb2MuY291bnQpLCB3YW50KTtcbitcdG5lZWQgPSB3YW50IC0gaGF2ZTtcbitcbitcdGlmICghbmVlZCkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR3aGlsZSAobiBcdTAwM2MgbmVlZCkge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3YW50OyBpKyspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gXHRcdGlmICghcGFnZSlcbiBcdFx0XHRicmVhaztcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnQrK10gPSBwYWdlO1xuK1x0XHRwYWdlc1tuKytdID0gcGFnZTtcbiBcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4rXHR3aGlsZSAobiBcdTAwMjZcdTAwMjYgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goXHUwMDI2cGlwZS1cdTAwM2VwcmVhbGxvYywgcGFnZXNbbiAtIDFdKSlcbitcdFx0bi0tO1xuK1xuK1x0LypcbitcdCAqIEp1c3QgZmx1c2ggYW55IGV4dHJhIHBhZ2UgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgdGhlIFRPQ1RPVVxuK1x0ICogZWZmZWN0XG4rXHQgKi9cbitcdHdoaWxlIChuKVxuK1x0XHRwdXRfcGFnZShwYWdlc1stLW5dKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKVxuKy8qXG4rICogQ2FsbGVkIHdpdGggcGlwZS1cdTAwM2VtdXRleCBoZWxkLiBUcmltIHRoZSBwb29sIGRvd24gdG8gUElQRV9QUkVBTExPQ19LRUVQIHVuZGVyXG4rICogdGhlIGxvY2ssIGRyb3AgaXQsIHRoZW4gZnJlZSB0aGUgZXhjZXNzIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG4rICovXG4rc3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG4ge1xuLVx0aWYgKCFwcmVhbGxvYy1cdTAwM2Vjb3VudClcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRzdHJ1Y3QgcGFnZSAqZXhjZXNzW1BJUEVfUFJFQUxMT0NfTUFYXTtcbitcdHVuc2lnbmVkIGludCBuZXhjZXNzID0gMDtcbiBcbi1cdHByZWFsbG9jLVx1MDAzZWNvdW50LS07XG4rXHR3aGlsZSAocGlwZS1cdTAwM2VwcmVhbGxvYy5jb3VudCBcdTAwM2UgUElQRV9QUkVBTExPQ19LRUVQKVxuK1x0XHRleGNlc3NbbmV4Y2VzcysrXSA9IGFub25fcGlwZV9wcmVhbGxvY19wb3AoXHUwMDI2cGlwZS1cdTAwM2VwcmVhbGxvYyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4gXG4tXHRyZXR1cm4gcHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdO1xuK1x0d2hpbGUgKG5leGNlc3MpXG4rXHRcdHB1dF9wYWdlKGV4Y2Vzc1stLW5leGNlc3NdKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0LyogRHJhaW4gcHJlYWxsb2MgZmlyc3QgdG8ga2VlcCB0bXBfcGFnZVtdIGhvdCBmb3IgbGF0ZXIgc21hbGwgd3JpdGVzLiAqL1xuLVx0cGFnZSA9IGFub25fcGlwZV9wcmVhbGxvY19wb3AocHJlYWxsb2MpO1xuK1x0LyogRHJhaW4gdGhlIHByZWFsbG9jIHBvb2wgYmVmb3JlIGFsbG9jYXRpbmcuIENhbGxlZCB3aXRoIG11dGV4IGhlbGQuICovXG4rXHRwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRyZXR1cm4gcGFnZTtcbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpKyspIHtcbi1cdFx0aWYgKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pIHtcbi1cdFx0XHRwYWdlID0gcGlwZS1cdTAwM2V0bXBfcGFnZVtpXTtcbi1cdFx0XHRwaXBlLVx1MDAzZXRtcF9wYWdlW2ldID0gTlVMTDtcbi1cdFx0XHRyZXR1cm4gcGFnZTtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0LyogRldJVzogVGhpcyBpcyBjYWxsZWQgd2l0aCBwaXBlLVx1MDAzZW11dGV4IGhlbGQgKi9cbiBcdHJldHVybiBhbGxvY19wYWdlKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0FDQ09VTlQpO1xuIH1cbkBAIC0xODcsNDggKzIwNywxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIHN0YXRpYyB2b2lkIGFub25fcGlwZV9wdXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKSB7XG4tXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpKyspIHtcbi1cdFx0XHRpZiAoIXBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pIHtcbi1cdFx0XHRcdHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0gPSBwYWdlO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuLVxuLVx0cHV0X3BhZ2UocGFnZSk7XG4tfVxuLVxuLS8qXG4tICogU3Rhc2ggbGVmdG92ZXIgcHJlYWxsb2MgcGFnZXMgaW4gdG1wX3BhZ2VbXSBzbyB0aGUgbmV4dCB3cml0ZSB0byB0aGlzXG4tICogcGlwZSBnZXRzIGEgaG90IHBhZ2Ugd2l0aG91dCBlbnRlcmluZyB0aGUgYWxsb2NhdG9yLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpXG4te1xuLVx0aW50IGksIGlkeDtcbi1cbi1cdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4rXHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKFx1MDAyNnBpcGUtXHUwMDNlcHJlYWxsb2MsIHBhZ2UpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpKyspIHtcbi1cdFx0aWYgKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRpZHggPSAtLXByZWFsbG9jLVx1MDAzZWNvdW50O1xuLVx0XHRwaXBlLVx1MDAzZXRtcF9wYWdlW2ldID0gcHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XTtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XSA9IE5VTEw7XG4tXHR9XG4tfVxuLVxuLS8qIFJ1bnMgYWZ0ZXIgbXV0ZXhfdW5sb2NrKCkgdG8ga2VlcCBwdXRfcGFnZSgpIG91dCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi9cbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZnJlZV9wYWdlcyhzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbi17XG4tXHR3aGlsZSAocHJlYWxsb2MtXHUwMDNlY291bnQpIHtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbi1cdFx0cHV0X3BhZ2UocHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdKTtcbi1cdH1cbitcdHB1dF9wYWdlKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbkBAIC00ODUsNyArNDY4LDggQEAgYW5vbl9waXBlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuIFx0fVxuIFx0aWYgKHBpcGVfaXNfZW1wdHkocGlwZSkpXG4gXHRcdHdha2VfbmV4dF9yZWFkZXIgPSBmYWxzZTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbitcdC8qIENvbnN1bWVkIGJ1ZmZlcnMgbWF5IGhhdmUgcmVmaWxsZWQgdGhlIHBvb2w7IHRyaW0gaXQgYW5kIHVubG9jay4gKi9cbitcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbiBcbiBcdGlmICh3YWtlX3dyaXRlcilcbiBcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbChcdTAwMjZwaXBlLVx1MDAzZXdyX3dhaXQsIEVQT0xMT1VUIHwgRVBPTExXUk5PUk0pO1xuQEAgLTUyNCw3ICs1MDgsNiBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4gXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4tXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHByZWFsbG9jO1xuIFx0dW5zaWduZWQgaW50IGhlYWQ7XG4gXHRzc2l6ZV90IHJldCA9IDA7XG4gXHRzaXplX3QgdG90YWxfbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG5AQCAtNTQ4LDkgKzUzMSw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0YW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKFx1MDAyNnByZWFsbG9jLCB0b3RhbF9sZW4pO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbitcdGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHBpcGUsIHRvdGFsX2xlbik7XG4gXG4gXHRpZiAoIXBpcGUtXHUwMDNlcmVhZGVycykge1xuIFx0XHRpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9TSUdOQUwpID09IDApXG5AQCAtNjA3LDcgKzU4OCw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdFx0XHRpbnQgY29waWVkO1xuIFxuLVx0XHRcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSwgXHUwMDI2cHJlYWxsb2MpO1xuK1x0XHRcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuIFx0XHRcdFx0aWYgKCFyZXQpXG4gXHRcdFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNjcxLDExICs2NTIsOSBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRcdHdha2VfbmV4dF93cml0ZXIgPSB0cnVlO1xuIFx0fVxuIG91dDpcbi1cdGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHBpcGUsIFx1MDAyNnByZWFsbG9jKTtcbiBcdGlmIChwaXBlX2lzX2Z1bGwocGlwZSkpXG4gXHRcdHdha2VfbmV4dF93cml0ZXIgPSBmYWxzZTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbi1cdGFub25fcGlwZV9mcmVlX3BhZ2VzKFx1MDAyNnByZWFsbG9jKTtcbitcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBkbyBkbyBhIHdha2V1cCBldmVudCwgd2UgZG8gYSAnc3luYycgd2FrZXVwLCBiZWNhdXNlIHdlXG5AQCAtOTU2LDEwICs5MzUsOCBAQCB2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG4gXHRpZiAocGlwZS1cdTAwM2V3YXRjaF9xdWV1ZSlcbiBcdFx0cHV0X3dhdGNoX3F1ZXVlKHBpcGUtXHUwMDNld2F0Y2hfcXVldWUpO1xuICNlbmRpZlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwaXBlLVx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XG4tXHRcdGlmIChwaXBlLVx1MDAzZXRtcF9wYWdlW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pO1xuLVx0fVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGlwZS1cdTAwM2VwcmVhbGxvYy5jb3VudDsgaSsrKVxuK1x0XHRfX2ZyZWVfcGFnZShwaXBlLVx1MDAzZXByZWFsbG9jLnBhZ2VzW2ldKTtcbiBcdGtmcmVlKHBpcGUtXHUwMDNlYnVmcyk7XG4gXHRrZnJlZShwaXBlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmhcbmluZGV4IDdmNmE5MmFjOTcwNDc4Li40ZTJlNGY0NGZiZTVmNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmhcbkBAIC0xNCw2ICsxNCw5IEBAXG4gI2RlZmluZSBQSVBFX0JVRl9GTEFHX0xPU1NcdDB4NDBcdC8qIE1lc3NhZ2UgbG9zcyBoYXBwZW5lZCBhZnRlciB0aGlzIGJ1ZmZlciAqL1xuICNlbmRpZlxuIFxuKyNkZWZpbmUgUElQRV9QUkVBTExPQ19NQVhcdDhcdC8qIG1heCBwYWdlcyBpbiBwcmVhbGxvYyBwb29sICovXG4rI2RlZmluZSBQSVBFX1BSRUFMTE9DX0tFRVBcdDJcdC8qIGtlZXAgYXQgbGVhc3QgdGhpcyBtYW55IGFmdGVyIHRyaW0gKi9cbitcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfYnVmZmVyIC0gYSBsaW51eCBrZXJuZWwgcGlwZSBidWZmZXJcbiAgKlx0QHBhZ2U6IHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGRhdGEgZm9yIHRoZSBwaXBlIGJ1ZmZlclxuQEAgLTU4LDYgKzYxLDIwIEBAIHVuaW9uIHBpcGVfaW5kZXgge1xuIFx0fTtcbiB9O1xuIFxuKy8qKlxuKyAqXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIC0gcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2xcbisgKlx0QHBhZ2VzOiBhcnJheSBvZiBjYWNoZWQgcGFnZXMgKHBvb2wpXG4rICpcdEBjb3VudDogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBpbiB0aGUgcG9vbFxuKyAqXG4rICogRWFjaCBwaXBlIGtlZXBzIGEgc21hbGwgYm91bmRlZCBwb29sIG9mIHByZWFsbG9jYXRlZCBwYWdlcyB0byByZWR1Y2VcbisgKiBhbGxvY2F0aW9uIG92ZXJoZWFkIGR1cmluZyB3cml0ZXMuIFRoZSBwb29sIGlzIGJvdW5kZWQgYXQgUElQRV9QUkVBTExPQ19NQVhcbisgKiBhbmQgdHJpbW1lZCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCBhZnRlciBhIHdyaXRlIGNvbXBsZXRlcy5cbisgKi9cbitzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHtcbitcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4rXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4rfTtcbitcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAtIGEgbGludXgga2VybmVsIHBpcGVcbiAgKlx0QG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZ1xuQEAgLTY4LDcgKzg1LDcgQEAgdW5pb24gcGlwZV9pbmRleCB7XG4gICpcdEBtYXhfdXNhZ2U6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cyB0aGF0IG1heSBiZSB1c2VkIGluIHRoZSByaW5nXG4gICpcdEByaW5nX3NpemU6IHRvdGFsIG51bWJlciBvZiBidWZmZXJzIChzaG91bGQgYmUgYSBwb3dlciBvZiAyKVxuICAqXHRAbnJfYWNjb3VudGVkOiBUaGUgYW1vdW50IHRoaXMgcGlwZSBhY2NvdW50cyBmb3IgaW4gdXNlci1cdTAwM2VwaXBlX2J1ZnNcbi0gKlx0QHRtcF9wYWdlOiBjYWNoZWQgcmVsZWFzZWQgcGFnZVxuKyAqXHRAcHJlYWxsb2M6IHBlci1waXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiBwb29sXG4gICpcdEByZWFkZXJzOiBudW1iZXIgb2YgY3VycmVudCByZWFkZXJzIG9mIHRoaXMgcGlwZVxuICAqXHRAd3JpdGVyczogbnVtYmVyIG9mIGN1cnJlbnQgd3JpdGVycyBvZiB0aGlzIHBpcGVcbiAgKlx0QGZpbGVzOiBudW1iZXIgb2Ygc3RydWN0IGZpbGUgcmVmZXJyaW5nIHRoaXMgcGlwZSAocHJvdGVjdGVkIGJ5IC1cdTAwM2VpX2xvY2spXG5AQCAtOTksNyArMTE2LDcgQEAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7XG4gI2lmZGVmIENPTkZJR19XQVRDSF9RVUVVRVxuIFx0Ym9vbCBub3RlX2xvc3M7XG4gI2VuZGlmXG4tXHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2VbMl07XG4rXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHByZWFsbG9jO1xuIFx0c3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19yZWFkZXJzO1xuIFx0c3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzO1xuIFx0c3RydWN0IHBpcGVfYnVmZmVyICpidWZzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MTAuNTY3OTEzODEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcwOTI0MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBpcGUgUGFnZSBQcmVhbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGBmcy9waXBlLmNgIGFuZCBgaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0J3MgYWJvdXQgY2hhbmdpbmcgaG93IHBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHdvcmtzLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBob3cgcGlwZXMgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCwgYW5kIHRoYXQncyBhIHJlZCBmbGFnIOKAkyBhIGdvb2QgcmVkIGZsYWcgZm9yIGZ1enppbmcsIHRoYXQgaXMuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgd2hvbGUgbmV3IHNldCBvZiBmdW5jdGlvbnM6IGBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja2AsIGBhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tgLCBgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hgLCBhbmQgYGFub25fcGlwZV9wcmVhbGxvY19wb3BgLCBhbmQgYWxzbyBtb2RpZmllcyBleGlzdGluZyBvbmVzIGxpa2UgYGFub25fcGlwZV9yZWFkYCwgYGFub25fcGlwZV93cml0ZWAsIGFuZCBgZnJlZV9waXBlX2luZm9gLiBJdCdzIGFsc28gY2hhbmdpbmcgdGhlIGBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvYCB0byB1c2UgdGhpcyBuZXcgYHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2NgIGluc3RlYWQgb2YgdGhhdCBvbGQgYHN0cnVjdCBwYWdlICp0bXBfcGFnZVsyXWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZ290IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IsIHNvIGZ1enppbmcgaXMgYSAqbXVzdCouXG5cbkknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWdzLiBMZXQncyBzZWUuLi4gYGZzL3BpcGUuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLiBQZXJmZWN0LCBubyBkZXBlbmRlbmNpZXMgdGhlcmUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgXCJmb2N1cyBzeW1ib2xzXCIgZm9yIGZ1enppbmcuICBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhcyBiZWxvdzpcblxuLSBgYW5vbl9waXBlX3ByZWFsbG9jX3BvcGBcbi0gYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYFxuLSBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgXG4tIGBhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tgXG4tIGBhbm9uX3BpcGVfZ2V0X3BhZ2VgXG4tIGBhbm9uX3BpcGVfcHV0X3BhZ2VgXG4tIGBhbm9uX3BpcGVfYnVmX3JlbGVhc2VgXG4tIGBhbm9uX3BpcGVfcmVhZGBcbi0gYGFub25fcGlwZV93cml0ZWBcbi0gYGZyZWVfcGlwZV9pbmZvYFxuXG5gYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhcmUgaW4gdGhlIGhvdCBwYXRoLCBzbyB0aG9zZSBhcmUgaGlnaCBwcmlvcml0eSwgb2J2aW91c2x5LiAgYGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrYCBhbmQgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcyBhcyB3ZWxsIOKAkyBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGNvcmUgcHJlYWxsb2NhdGlvbiBsb2dpYy4gIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYCBhbmQgYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYCBhcmUgc3RhdGljLCBidXQgbWlnaHQgYmUgaW5saW5lZC4gSSBzaG91bGQga2VlcCB0aGVtIG9uIHRoZSBsaXN0IHJlZ2FyZGxlc3MuICBIb2xkIG9uLi4uIGFyZSBgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhY3R1YWxseSBzdGF0aWMgZnVuY3Rpb25zIGluIGBmcy9waXBlLmNgPyBUaGV5IG1pZ2h0IGJlIGV4cG9ydGVkIG9yIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IEknbGwgY2hlY2sgYGZzL3BpcGUuY2AganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzk0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MTkuMjc3MTU3MzkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTI1NTAyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcGlwZS5jPTEyNT1zdGF0aWMgYm9vbCBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYyxcXG4tLVxcbmZzL3BpcGUuYy0xNDAtICovXFxuZnMvcGlwZS5jOjE0MTpzdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgdG90YWxfbGVuKVxcbmZzL3BpcGUuYy0xNDIte1xcbi0tXFxuZnMvcGlwZS5jPTUwNz1hbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9waXBlLmMtNTMzLVxcbmZzL3BpcGUuYzo1MzQ6XFx0YW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2socGlwZSwgdG90YWxfbGVuKTtcXG5mcy9waXBlLmMtNTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzoyNC4xMjk3MTg1MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0NjQ5MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi4gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaGFuZGxpbmcgdGhlIHBvb2wgdHJpbW1pbmcgYW5kIHVubG9ja2luZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYW5vbnltb3VzIHBpcGUgbWVjaGFuaXNtLiBNeSB1bmRlcnN0YW5kaW5nIGlzIGl0IGRpcmVjdGx5IGRlYWxzIHdpdGggcmVzb3VyY2UgbWFuYWdlbWVudC4gSSB3YW50IHRvIGNoZWNrIGhvdyBlZmZpY2llbnRseSBpdCBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIHVudXNlZCBzZWdtZW50cywgbWFraW5nIHN1cmUgaXQgZG9lc27igJl0IGludHJvZHVjZSB1bmR1ZSBmcmFnbWVudGF0aW9uIG9yIGJsb2NrIHByb2Nlc3NlcyB1bm5lY2Vzc2FyaWx5IGR1cmluZyB1bmxvY2tpbmcuIFRoZSBsb2NraW5nIHByb3RvY29sIGluIHRoaXMgcGFydCBpcyBwYXJ0aWN1bGFybHkgcHJvbmUgdG8gY29udGVudGlvbiwgc28gSSB3aWxsIHNjcnV0aW5pemUgdGhhdCBhcmVhIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gQW55IHJlY2VudCBjaGFuZ2VzLCBwYXRjaGVzLCBvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB0aGF0IGhhdmUgdG91Y2hlZCB0aGlzIGZ1bmN0aW9uPyBJJ2xsIHJldmlldyBhbnkgcmVsZXZhbnQgdGVzdCBjYXNlcywgYmVuY2htYXJrcywgYW5kIHBlcmhhcHMgc29tZSBpbnN0cnVtZW50YXRpb24gZGF0YSwgaWYgaXQgZXhpc3RzLCB0byBpZGVudGlmeSBpZiBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgcG90ZW50aWFsIGlzc3Vlcy4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiBwaXBlcyBpbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIG9wZXJhdGluZyBvcHRpbWFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzoyNy42OTQzNzAxNjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMzI1Nzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcGlwZS5jPTE0MT1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZnMvcGlwZS5jLTE4MC0gKi9cXG5mcy9waXBlLmM6MTgxOnN0YXRpYyB2b2lkIGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKVxcbmZzL3BpcGUuYy0xODIte1xcbi0tXFxuZnMvcGlwZS5jPTM0ND1hbm9uX3BpcGVfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9waXBlLmMtNDcxLVxcdC8qIENvbnN1bWVkIGJ1ZmZlcnMgbWF5IGhhdmUgcmVmaWxsZWQgdGhlIHBvb2w7IHRyaW0gaXQgYW5kIHVubG9jay4gKi9cXG5mcy9waXBlLmM6NDcyOlxcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG5mcy9waXBlLmMtNDczLVxcbi0tXFxuZnMvcGlwZS5jPTUwNz1hbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9waXBlLmMtNjU2LVxcdFxcdHdha2VfbmV4dF93cml0ZXIgPSBmYWxzZTtcXG5mcy9waXBlLmM6NjU3OlxcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG5mcy9waXBlLmMtNjU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzozMy4xMTc2NDI3OTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzc0NTM5NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IFBpcGUgUGFnZSBQcmVhbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoaXMgcGlwZSBwYWdlIHByZWFsbG9jYXRpb24gcGF0Y2guIEkga25vdyB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIEkvTyBhcmUgYGFub25fcGlwZV9yZWFkYCBhbmQgYGFub25fcGlwZV93cml0ZWAg4oCTIHByb2JhYmx5IGhvdCBwYXRocywgYnV0IHRoZXkncmUgbGlrZWx5IGdvaW5nIHRvIGdldCB0ZXN0ZWQgZXh0ZW5zaXZlbHkgYW55d2F5LiBUaGlzIHBhdGNoJ3Mgc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBteSBwcmltYXJ5IHRhcmdldHMsIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGVtLlxuXG5JJ3ZlIGdvdCB0aGUgbGlzdDpcblxuKiAgIGBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja2BcbiogICBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYFxuKiAgIGBhbm9uX3BpcGVfZ2V0X3BhZ2VgXG4qICAgYGFub25fcGlwZV9wdXRfcGFnZWBcbiogICBgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hgXG4qICAgYGFub25fcGlwZV9wcmVhbGxvY19wb3BgXG5cblRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMuIEknbSBub3Qgc2VlaW5nIGFueSBjb25maWcgZGVwZW5kZW5jaWVzIGhlcmUg4oCTIHBpcGVzIGFyZSBhbHdheXMgZW5hYmxlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGludm9sdmVzIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgbW9kaWZpZWQgcGFnZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpbiB0aGUgcGlwZSBjb2RlLiBUaGlzIHNtZWxscyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBtZW1vcnkgY29ycnVwdGlvbiDigJMgbGVha3MsIFVBRnMsIHJhY2VzLiBHb3R0YSBoYW1tZXIgdGhvc2UhXG5cbkp1c3QgZG91YmxlIGNoZWNraW5nLCB0aGVyZSBpcyBgZnJlZV9waXBlX2luZm9gIGFsc28gbW9kaWZpZWQsIGJ1dCBpdCdzIHByZXR0eSBnZW5lcmljLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgZGlyZWN0aW9uLiBJJ2xsIGNhbGwgc2V0LXJlc3VsdHMgbm93IGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTYsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjQwLjQ5MjE4NTIxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja1wiLFxuICAgIFwiYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrXCIsXG4gICAgXCJhbm9uX3BpcGVfZ2V0X3BhZ2VcIixcbiAgICBcImFub25fcGlwZV9wdXRfcGFnZVwiLFxuICAgIFwiYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hcIixcbiAgICBcImFub25fcGlwZV9wcmVhbGxvY19wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBwcmVhbGxvY2F0aW9uIGxvZ2ljIGZvciBwaXBlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJlYWxsb2NhdGlvbiBwb29sIGFuZCBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgZHVyaW5nIHBpcGUgcmVhZHMgYW5kIHdyaXRlcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrXCIsXG4gICAgXCJhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tcIixcbiAgICBcImFub25fcGlwZV9nZXRfcGFnZVwiLFxuICAgIFwiYW5vbl9waXBlX3B1dF9wYWdlXCIsXG4gICAgXCJhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaFwiLFxuICAgIFwiYW5vbl9waXBlX3ByZWFsbG9jX3BvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIHByZWFsbG9jYXRpb24gbG9naWMgZm9yIHBpcGVzLCBpbnRyb2R1Y2luZyBhIG5ldyBwcmVhbGxvY2F0aW9uIHBvb2wgYW5kIGNoYW5naW5nIGhvdyBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCBkdXJpbmcgcGlwZSByZWFkcyBhbmQgd3JpdGVzLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 09:36:38 +0000 UTC FinishedAt: 2026-07-10 10:03:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "a635d6748234582ea287c5ffeae28b9b23f91c7e", "config_name": "upstream-apparmor-kasan.config", "series_id": "3ec24a07-bd99-428a-bba1-8b19690f4209" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "anon_pipe_prefill_and_lock", "anon_pipe_trim_pool_and_unlock", "anon_pipe_get_page", "anon_pipe_put_page", "anon_pipe_prealloc_push", "anon_pipe_prealloc_pop" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2smIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9nZXRfcGFnZSYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfcHV0X3BhZ2UmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3ByZWFsbG9jX3B1c2gmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3ByZWFsbG9jX3BvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBwcmVhbGxvY2F0aW9uIGxvZ2ljIGZvciBwaXBlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJlYWxsb2NhdGlvbiBwb29sIGFuZCBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgZHVyaW5nIHBpcGUgcmVhZHMgYW5kIHdyaXRlcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2E4MGM0OTgyMTg3NDdhZjA1NGZiMGExODlhMWFjNWQ3OTc0ZjVkZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAzOjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuY1xuaW5kZXggNDI5YjA3MTRlYzU3NTUuLmIxNGQ1YmIyYjQ1YTQ1IDEwMDY0NFxuLS0tIGEvZnMvcGlwZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9waXBlLmNcbkBAIC0xMTEsNzUgJiM0MzsxMTEsOTUgQEAgdm9pZCBwaXBlX2RvdWJsZV9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUxLFxuIFx0cGlwZV9sb2NrKHBpcGUyKTtcbiB9XG4gXG4tI2RlZmluZSBQSVBFX1BSRUFMTE9DX01BWCA4XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYW5vbl9waXBlX3ByZWFsbG9jX3BvcChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbiYjNDM7e1xuJiM0MztcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiBcbi1zdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHtcbi1cdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tfTtcbiYjNDM7XHRwcmVhbGxvYy1cdTAwM2Vjb3VudC0tO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQdXNoIGEgcGFnZSB0byB0aGUgcHJlYWxsb2MgcG9vbC4gUmV0dXJucyB0cnVlIGlmIGFkZGVkLCBmYWxzZSBpZiBmdWxsLiAqL1xuJiM0MztzdGF0aWMgYm9vbCBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYyxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAocHJlYWxsb2MtXHUwMDNlY291bnQgXHUwMDNlPSBQSVBFX1BSRUFMTE9DX01BWClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRwcmVhbGxvYy1cdTAwM2VwYWdlc1twcmVhbGxvYy1cdTAwM2Vjb3VudCYjNDM7JiM0MztdID0gcGFnZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuIFxuIC8qXG4tICogUHJlLWFsbG9jYXRlIHBhZ2VzIG91dHNpZGUgcGlwZS1cdTAwM2VtdXRleCBmb3IgbXVsdGktcGFnZSB3cml0ZXMuXG4tICogYWxsb2NfcGFnZSgpIHdpdGggR0ZQX0hJR0hVU0VSIGNhbiBzbGVlcCBpbiByZWNsYWltIGFuZCBydW5zIG1lbWNnXG4tICogY2hhcmdpbmc7IGRvaW5nIGl0IHVuZGVyIHRoZSBtdXRleCBzdGFsbHMgYSBjb25jdXJyZW50IHJlYWRlci5cbi0gKlxuLSAqIExvb3AgYWxsb2NfcGFnZSgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfYnVsa18qKCk6IHRoZSBidWxrIHBhdGggcmVmdXNlc1xuLSAqIF9fR0ZQX0FDQ09VTlQgdW5kZXIgbWVtY2cgKHNlZSBjb21taXQgOGRjYjMwNjBkODFkIFwmIzM0O21lbWNnOiBwYWdlX2FsbG9jOlxuLSAqIHNraXAgYnVsayBhbGxvY2F0b3IgZm9yIF9fR0ZQX0FDQ09VTlRcJiMzNDspIGFuZCBzaWxlbnRseSBkZWdyYWRlcyB0byBhIHNpbmdsZVxuLSAqIHBhZ2UuIEEgcGVyLXBhZ2UgbG9vcCBrZWVwcyBtZW1jZyBhY2NvdW50aW5nIGFuZCB0aGUgdGFzayBOVU1BIG1lbXBvbGljeVxuLSAqIGhvbm91cmVkIGZvciBldmVyeSBwYWdlOyB0aGUgcGVyLWNhbGwgb3ZlcmhlYWQgaXMgc21hbGwgY29tcGFyZWQgdG8gdGhlXG4tICogcGlwZS1cdTAwM2VtdXRleCBob2xkLXRpbWUgYmVpbmcgc2hydW5rLiBBbnkgc2hvcnRmYWxsIGlzIGNvdmVyZWQgYnkgdGhlXG4tICogaW4tbG9jayBhbGxvY19wYWdlKCkgZmFsbGJhY2sgaW4gYW5vbl9waXBlX2dldF9wYWdlKCkuXG4mIzQzOyAqIFRvcCB1cCB0aGUgcGlwZSYjMzk7cyBvd24gcG9vbCwgdGhlbiB0YWtlIHBpcGUtXHUwMDNlbXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuXG4mIzQzOyAqIFRoZSBzaG9ydGZhbGwgaXMgYWxsb2NhdGVkIG91dHNpZGUgdGhlIGxvY2s7IHRoZSBwdXNoIGFuZCB0aGUgY2FsbGVyJiMzOTtzIHdyaXRlXG4mIzQzOyAqIHRoZW4gcnVuIHVuZGVyIGEgc2luZ2xlIGxvY2sgYWNxdWlzaXRpb24sIGF2b2lkaW5nIGEgc2VwYXJhdGUgcHJlZmlsbFxuJiM0MzsgKiBsb2NrL3VubG9jayBjeWNsZS4gYW5vbl9waXBlX2dldF9wYWdlKCkgZHJhaW5zIHRoZSBwb29sIGluc3RlYWQgb2YgYWxsb2NhdGluZ1xuJiM0MzsgKiB1bmRlciB0aGUgbG9jay5cbiAgKi9cbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZ2V0X3BhZ2VfcHJlYWxsb2Moc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsXG4tXHRcdFx0XHRcdHNpemVfdCB0b3RhbF9sZW4pXG4mIzQzO3N0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IHdhbnQsIGk7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdHByZWFsbG9jLVx1MDAzZWNvdW50ID0gMDtcbi1cdGlmICh0b3RhbF9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9QUkVBTExPQ19NQVhdO1xuJiM0MztcdHVuc2lnbmVkIGludCB3YW50LCBoYXZlLCBuZWVkLCBuID0gMDtcbiBcbiBcdHdhbnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIERJVl9ST1VORF9VUCh0b3RhbF9sZW4sIFBBR0VfU0laRSksXG4gXHRcdCAgICAgUElQRV9QUkVBTExPQ19NQVgpO1xuJiM0MztcdC8qIFVubG9ja2VkIHJlYWQ7IHRoZSBwb29sIGlzIHJlZmlsbGVkIHVuZGVyIHRoZSBsb2NrIGJlbG93LiAqL1xuJiM0MztcdGhhdmUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIFJFQURfT05DRShwaXBlLVx1MDAzZXByZWFsbG9jLmNvdW50KSwgd2FudCk7XG4mIzQzO1x0bmVlZCA9IHdhbnQgLSBoYXZlO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5lZWQpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3aGlsZSAobiBcdTAwM2MgbmVlZCkge1xuJiM0MztcdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0FDQ09VTlQpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgd2FudDsgaSYjNDM7JiM0MzspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gXHRcdGlmICghcGFnZSlcbiBcdFx0XHRicmVhaztcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IHBhZ2U7XG4mIzQzO1x0XHRwYWdlc1tuJiM0MzsmIzQzO10gPSBwYWdlO1xuIFx0fVxuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdHdoaWxlIChuIFx1MDAyNlx1MDAyNiBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jLCBwYWdlc1tuIC0gMV0pKVxuJiM0MztcdFx0bi0tO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEp1c3QgZmx1c2ggYW55IGV4dHJhIHBhZ2UgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgdGhlIFRPQ1RPVVxuJiM0MztcdCAqIGVmZmVjdFxuJiM0MztcdCAqL1xuJiM0MztcdHdoaWxlIChuKVxuJiM0MztcdFx0cHV0X3BhZ2UocGFnZXNbLS1uXSk7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqYW5vbl9waXBlX3ByZWFsbG9jX3BvcChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbiYjNDM7LypcbiYjNDM7ICogQ2FsbGVkIHdpdGggcGlwZS1cdTAwM2VtdXRleCBoZWxkLiBUcmltIHRoZSBwb29sIGRvd24gdG8gUElQRV9QUkVBTExPQ19LRUVQIHVuZGVyXG4mIzQzOyAqIHRoZSBsb2NrLCBkcm9wIGl0LCB0aGVuIGZyZWUgdGhlIGV4Y2VzcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG4ge1xuLVx0aWYgKCFwcmVhbGxvYy1cdTAwM2Vjb3VudClcbi1cdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0c3RydWN0IHBhZ2UgKmV4Y2Vzc1tQSVBFX1BSRUFMTE9DX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IG5leGNlc3MgPSAwO1xuIFxuLVx0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbiYjNDM7XHR3aGlsZSAocGlwZS1cdTAwM2VwcmVhbGxvYy5jb3VudCBcdTAwM2UgUElQRV9QUkVBTExPQ19LRUVQKVxuJiM0MztcdFx0ZXhjZXNzW25leGNlc3MmIzQzOyYjNDM7XSA9IGFub25fcGlwZV9wcmVhbGxvY19wb3AoXHUwMDI2cGlwZS1cdTAwM2VwcmVhbGxvYyk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuIFxuLVx0cmV0dXJuIHByZWFsbG9jLVx1MDAzZXBhZ2VzW3ByZWFsbG9jLVx1MDAzZWNvdW50XTtcbiYjNDM7XHR3aGlsZSAobmV4Y2VzcylcbiYjNDM7XHRcdHB1dF9wYWdlKGV4Y2Vzc1stLW5leGNlc3NdKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSlcbiB7XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcbi1cdC8qIERyYWluIHByZWFsbG9jIGZpcnN0IHRvIGtlZXAgdG1wX3BhZ2VbXSBob3QgZm9yIGxhdGVyIHNtYWxsIHdyaXRlcy4gKi9cbi1cdHBhZ2UgPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHByZWFsbG9jKTtcbiYjNDM7XHQvKiBEcmFpbiB0aGUgcHJlYWxsb2MgcG9vbCBiZWZvcmUgYWxsb2NhdGluZy4gQ2FsbGVkIHdpdGggbXV0ZXggaGVsZC4gKi9cbiYjNDM7XHRwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRyZXR1cm4gcGFnZTtcbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAocGlwZS1cdTAwM2V0bXBfcGFnZVtpXSkge1xuLVx0XHRcdHBhZ2UgPSBwaXBlLVx1MDAzZXRtcF9wYWdlW2ldO1xuLVx0XHRcdHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0gPSBOVUxMO1xuLVx0XHRcdHJldHVybiBwYWdlO1xuLVx0XHR9XG4tXHR9XG4tXG4gXHQvKiBGV0lXOiBUaGlzIGlzIGNhbGxlZCB3aXRoIHBpcGUtXHUwMDNlbXV0ZXggaGVsZCAqL1xuIFx0cmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gfVxuQEAgLTE4Nyw0OCAmIzQzOzIwNywxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIHN0YXRpYyB2b2lkIGFub25fcGlwZV9wdXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKSB7XG4tXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRcdGlmICghcGlwZS1cdTAwM2V0bXBfcGFnZVtpXSkge1xuLVx0XHRcdFx0cGlwZS1cdTAwM2V0bXBfcGFnZVtpXSA9IHBhZ2U7XG4tXHRcdFx0XHRyZXR1cm47XG4tXHRcdFx0fVxuLVx0XHR9XG4tXHR9XG4tXG4tXHRwdXRfcGFnZShwYWdlKTtcbi19XG4tXG4tLypcbi0gKiBTdGFzaCBsZWZ0b3ZlciBwcmVhbGxvYyBwYWdlcyBpbiB0bXBfcGFnZVtdIHNvIHRoZSBuZXh0IHdyaXRlIHRvIHRoaXNcbi0gKiBwaXBlIGdldHMgYSBob3QgcGFnZSB3aXRob3V0IGVudGVyaW5nIHRoZSBhbGxvY2F0b3IuXG4tICovXG4tc3RhdGljIHZvaWQgYW5vbl9waXBlX3JlZmlsbF90bXBfcGFnZXMoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbi17XG4tXHRpbnQgaSwgaWR4O1xuLVxuLVx0aWYgKCFwcmVhbGxvYy1cdTAwM2Vjb3VudClcbiYjNDM7XHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jLCBwYWdlKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwaXBlLVx1MDAzZXRtcF9wYWdlKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0aWYgKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRpZHggPSAtLXByZWFsbG9jLVx1MDAzZWNvdW50O1xuLVx0XHRwaXBlLVx1MDAzZXRtcF9wYWdlW2ldID0gcHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XTtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XSA9IE5VTEw7XG4tXHR9XG4tfVxuLVxuLS8qIFJ1bnMgYWZ0ZXIgbXV0ZXhfdW5sb2NrKCkgdG8ga2VlcCBwdXRfcGFnZSgpIG91dCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi9cbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZnJlZV9wYWdlcyhzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbi17XG4tXHR3aGlsZSAocHJlYWxsb2MtXHUwMDNlY291bnQpIHtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbi1cdFx0cHV0X3BhZ2UocHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdKTtcbi1cdH1cbiYjNDM7XHRwdXRfcGFnZShwYWdlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYW5vbl9waXBlX2J1Zl9yZWxlYXNlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG5AQCAtNDg1LDcgJiM0Mzs0NjgsOCBAQCBhbm9uX3BpcGVfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG4gXHR9XG4gXHRpZiAocGlwZV9pc19lbXB0eShwaXBlKSlcbiBcdFx0d2FrZV9uZXh0X3JlYWRlciA9IGZhbHNlO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuJiM0MztcdC8qIENvbnN1bWVkIGJ1ZmZlcnMgbWF5IGhhdmUgcmVmaWxsZWQgdGhlIHBvb2w7IHRyaW0gaXQgYW5kIHVubG9jay4gKi9cbiYjNDM7XHRhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2socGlwZSk7XG4gXG4gXHRpZiAod2FrZV93cml0ZXIpXG4gXHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoXHUwMDI2cGlwZS1cdTAwM2V3cl93YWl0LCBFUE9MTE9VVCB8IEVQT0xMV1JOT1JNKTtcbkBAIC01MjQsNyAmIzQzOzUwOCw2IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItXHUwMDNla2lfZmlscDtcbiBcdHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2M7XG4gXHR1bnNpZ25lZCBpbnQgaGVhZDtcbiBcdHNzaXplX3QgcmV0ID0gMDtcbiBcdHNpemVfdCB0b3RhbF9sZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTtcbkBAIC01NDgsOSAmIzQzOzUzMSw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0YW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKFx1MDAyNnByZWFsbG9jLCB0b3RhbF9sZW4pO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbiYjNDM7XHRhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhwaXBlLCB0b3RhbF9sZW4pO1xuIFxuIFx0aWYgKCFwaXBlLVx1MDAzZXJlYWRlcnMpIHtcbiBcdFx0aWYgKChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PU0lHTkFMKSA9PSAwKVxuQEAgLTYwNyw3ICYjNDM7NTg4LDcgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHRcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0XHRcdGludCBjb3BpZWQ7XG4gXG4tXHRcdFx0cGFnZSA9IGFub25fcGlwZV9nZXRfcGFnZShwaXBlLCBcdTAwMjZwcmVhbGxvYyk7XG4mIzQzO1x0XHRcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuIFx0XHRcdFx0aWYgKCFyZXQpXG4gXHRcdFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNjcxLDExICYjNDM7NjUyLDkgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuIFx0XHR3YWtlX25leHRfd3JpdGVyID0gdHJ1ZTtcbiBcdH1cbiBvdXQ6XG4tXHRhbm9uX3BpcGVfcmVmaWxsX3RtcF9wYWdlcyhwaXBlLCBcdTAwMjZwcmVhbGxvYyk7XG4gXHRpZiAocGlwZV9pc19mdWxsKHBpcGUpKVxuIFx0XHR3YWtlX25leHRfd3JpdGVyID0gZmFsc2U7XG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4tXHRhbm9uX3BpcGVfZnJlZV9wYWdlcyhcdTAwMjZwcmVhbGxvYyk7XG4mIzQzO1x0YW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHBpcGUpO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGRvIGRvIGEgd2FrZXVwIGV2ZW50LCB3ZSBkbyBhICYjMzk7c3luYyYjMzk7IHdha2V1cCwgYmVjYXVzZSB3ZVxuQEAgLTk1NiwxMCAmIzQzOzkzNSw4IEBAIHZvaWQgZnJlZV9waXBlX2luZm8oc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSlcbiBcdGlmIChwaXBlLVx1MDAzZXdhdGNoX3F1ZXVlKVxuIFx0XHRwdXRfd2F0Y2hfcXVldWUocGlwZS1cdTAwM2V3YXRjaF9xdWV1ZSk7XG4gI2VuZGlmXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAocGlwZS1cdTAwM2V0bXBfcGFnZVtpXSlcbi1cdFx0XHRfX2ZyZWVfcGFnZShwaXBlLVx1MDAzZXRtcF9wYWdlW2ldKTtcbi1cdH1cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwaXBlLVx1MDAzZXByZWFsbG9jLmNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9fZnJlZV9wYWdlKHBpcGUtXHUwMDNlcHJlYWxsb2MucGFnZXNbaV0pO1xuIFx0a2ZyZWUocGlwZS1cdTAwM2VidWZzKTtcbiBcdGtmcmVlKHBpcGUpO1xuIH1cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxuaW5kZXggN2Y2YTkyYWM5NzA0NzguLjRlMmU0ZjQ0ZmJlNWY1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxuQEAgLTE0LDYgJiM0MzsxNCw5IEBAXG4gI2RlZmluZSBQSVBFX0JVRl9GTEFHX0xPU1NcdDB4NDBcdC8qIE1lc3NhZ2UgbG9zcyBoYXBwZW5lZCBhZnRlciB0aGlzIGJ1ZmZlciAqL1xuICNlbmRpZlxuIFxuJiM0MzsjZGVmaW5lIFBJUEVfUFJFQUxMT0NfTUFYXHQ4XHQvKiBtYXggcGFnZXMgaW4gcHJlYWxsb2MgcG9vbCAqL1xuJiM0MzsjZGVmaW5lIFBJUEVfUFJFQUxMT0NfS0VFUFx0Mlx0Lyoga2VlcCBhdCBsZWFzdCB0aGlzIG1hbnkgYWZ0ZXIgdHJpbSAqL1xuJiM0MztcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfYnVmZmVyIC0gYSBsaW51eCBrZXJuZWwgcGlwZSBidWZmZXJcbiAgKlx0QHBhZ2U6IHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGRhdGEgZm9yIHRoZSBwaXBlIGJ1ZmZlclxuQEAgLTU4LDYgJiM0Mzs2MSwyMCBAQCB1bmlvbiBwaXBlX2luZGV4IHtcbiBcdH07XG4gfTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIC0gcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2xcbiYjNDM7ICpcdEBwYWdlczogYXJyYXkgb2YgY2FjaGVkIHBhZ2VzIChwb29sKVxuJiM0MzsgKlx0QGNvdW50OiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IGluIHRoZSBwb29sXG4mIzQzOyAqXG4mIzQzOyAqIEVhY2ggcGlwZSBrZWVwcyBhIHNtYWxsIGJvdW5kZWQgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgcGFnZXMgdG8gcmVkdWNlXG4mIzQzOyAqIGFsbG9jYXRpb24gb3ZlcmhlYWQgZHVyaW5nIHdyaXRlcy4gVGhlIHBvb2wgaXMgYm91bmRlZCBhdCBQSVBFX1BSRUFMTE9DX01BWFxuJiM0MzsgKiBhbmQgdHJpbW1lZCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCBhZnRlciBhIHdyaXRlIGNvbXBsZXRlcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2Mge1xuJiM0MztcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4mIzQzO1x0dW5zaWduZWQgaW50IGNvdW50O1xuJiM0Mzt9O1xuJiM0MztcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAtIGEgbGludXgga2VybmVsIHBpcGVcbiAgKlx0QG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZ1xuQEAgLTY4LDcgJiM0Mzs4NSw3IEBAIHVuaW9uIHBpcGVfaW5kZXgge1xuICAqXHRAbWF4X3VzYWdlOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtYXkgYmUgdXNlZCBpbiB0aGUgcmluZ1xuICAqXHRAcmluZ19zaXplOiB0b3RhbCBudW1iZXIgb2YgYnVmZmVycyAoc2hvdWxkIGJlIGEgcG93ZXIgb2YgMilcbiAgKlx0QG5yX2FjY291bnRlZDogVGhlIGFtb3VudCB0aGlzIHBpcGUgYWNjb3VudHMgZm9yIGluIHVzZXItXHUwMDNlcGlwZV9idWZzXG4tICpcdEB0bXBfcGFnZTogY2FjaGVkIHJlbGVhc2VkIHBhZ2VcbiYjNDM7ICpcdEBwcmVhbGxvYzogcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2xcbiAgKlx0QHJlYWRlcnM6IG51bWJlciBvZiBjdXJyZW50IHJlYWRlcnMgb2YgdGhpcyBwaXBlXG4gICpcdEB3cml0ZXJzOiBudW1iZXIgb2YgY3VycmVudCB3cml0ZXJzIG9mIHRoaXMgcGlwZVxuICAqXHRAZmlsZXM6IG51bWJlciBvZiBzdHJ1Y3QgZmlsZSByZWZlcnJpbmcgdGhpcyBwaXBlIChwcm90ZWN0ZWQgYnkgLVx1MDAzZWlfbG9jaylcbkBAIC05OSw3ICYjNDM7MTE2LDcgQEAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7XG4gI2lmZGVmIENPTkZJR19XQVRDSF9RVUVVRVxuIFx0Ym9vbCBub3RlX2xvc3M7XG4gI2VuZGlmXG4tXHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2VbMl07XG4mIzQzO1x0c3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyBwcmVhbGxvYztcbiBcdHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcmVhZGVycztcbiBcdHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfd3JpdGVycztcbiBcdHN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfZ2V0X3BhZ2UmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3B1dF9wYWdlJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wdXNoJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgcHJlYWxsb2NhdGlvbiBsb2dpYyBmb3IgcGlwZXMsIGludHJvZHVjaW5nIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGR1cmluZyBwaXBlIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2E4MGM0OTgyMTg3NDdhZjA1NGZiMGExODlhMWFjNWQ3OTc0ZjVkZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDEwOjAzOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jCmluZGV4IDQyOWIwNzE0ZWM1NzU1Li5iMTRkNWJiMmI0NWE0NSAxMDA2NDQKLS0tIGEvZnMvcGlwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3BpcGUuYwpAQCAtMTExLDc1ICYjNDM7MTExLDk1IEBAIHZvaWQgcGlwZV9kb3VibGVfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlMSwKIAlwaXBlX2xvY2socGlwZTIpOwogfQogCi0jZGVmaW5lIFBJUEVfUFJFQUxMT0NfTUFYIDgKJiM0MztzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9wcmVhbGxvY19wb3Aoc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpCiYjNDM7ewomIzQzOwlpZiAoIXByZWFsbG9jLSZndDtjb3VudCkKJiM0MzsJCXJldHVybiBOVUxMOwogCi1zdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHsKLQlzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9QUkVBTExPQ19NQVhdOwotCXVuc2lnbmVkIGludCBjb3VudDsKLX07CiYjNDM7CXByZWFsbG9jLSZndDtjb3VudC0tOwomIzQzOwomIzQzOwlyZXR1cm4gcHJlYWxsb2MtJmd0O3BhZ2VzW3ByZWFsbG9jLSZndDtjb3VudF07CiYjNDM7fQomIzQzOwomIzQzOy8qIFB1c2ggYSBwYWdlIHRvIHRoZSBwcmVhbGxvYyBwb29sLiBSZXR1cm5zIHRydWUgaWYgYWRkZWQsIGZhbHNlIGlmIGZ1bGwuICovCiYjNDM7c3RhdGljIGJvb2wgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSkKJiM0Mzt7CiYjNDM7CWlmIChwcmVhbGxvYy0mZ3Q7Y291bnQgJmd0Oz0gUElQRV9QUkVBTExPQ19NQVgpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXByZWFsbG9jLSZndDtwYWdlc1twcmVhbGxvYy0mZ3Q7Y291bnQmIzQzOyYjNDM7XSA9IHBhZ2U7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KIAogLyoKLSAqIFByZS1hbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIHBpcGUtJmd0O211dGV4IGZvciBtdWx0aS1wYWdlIHdyaXRlcy4KLSAqIGFsbG9jX3BhZ2UoKSB3aXRoIEdGUF9ISUdIVVNFUiBjYW4gc2xlZXAgaW4gcmVjbGFpbSBhbmQgcnVucyBtZW1jZwotICogY2hhcmdpbmc7IGRvaW5nIGl0IHVuZGVyIHRoZSBtdXRleCBzdGFsbHMgYSBjb25jdXJyZW50IHJlYWRlci4KLSAqCi0gKiBMb29wIGFsbG9jX3BhZ2UoKSBpbnN0ZWFkIG9mIGFsbG9jX3BhZ2VzX2J1bGtfKigpOiB0aGUgYnVsayBwYXRoIHJlZnVzZXMKLSAqIF9fR0ZQX0FDQ09VTlQgdW5kZXIgbWVtY2cgKHNlZSBjb21taXQgOGRjYjMwNjBkODFkICYjMzQ7bWVtY2c6IHBhZ2VfYWxsb2M6Ci0gKiBza2lwIGJ1bGsgYWxsb2NhdG9yIGZvciBfX0dGUF9BQ0NPVU5UJiMzNDspIGFuZCBzaWxlbnRseSBkZWdyYWRlcyB0byBhIHNpbmdsZQotICogcGFnZS4gQSBwZXItcGFnZSBsb29wIGtlZXBzIG1lbWNnIGFjY291bnRpbmcgYW5kIHRoZSB0YXNrIE5VTUEgbWVtcG9saWN5Ci0gKiBob25vdXJlZCBmb3IgZXZlcnkgcGFnZTsgdGhlIHBlci1jYWxsIG92ZXJoZWFkIGlzIHNtYWxsIGNvbXBhcmVkIHRvIHRoZQotICogcGlwZS0mZ3Q7bXV0ZXggaG9sZC10aW1lIGJlaW5nIHNocnVuay4gQW55IHNob3J0ZmFsbCBpcyBjb3ZlcmVkIGJ5IHRoZQotICogaW4tbG9jayBhbGxvY19wYWdlKCkgZmFsbGJhY2sgaW4gYW5vbl9waXBlX2dldF9wYWdlKCkuCiYjNDM7ICogVG9wIHVwIHRoZSBwaXBlJiMzOTtzIG93biBwb29sLCB0aGVuIHRha2UgcGlwZS0mZ3Q7bXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuCiYjNDM7ICogVGhlIHNob3J0ZmFsbCBpcyBhbGxvY2F0ZWQgb3V0c2lkZSB0aGUgbG9jazsgdGhlIHB1c2ggYW5kIHRoZSBjYWxsZXImIzM5O3Mgd3JpdGUKJiM0MzsgKiB0aGVuIHJ1biB1bmRlciBhIHNpbmdsZSBsb2NrIGFjcXVpc2l0aW9uLCBhdm9pZGluZyBhIHNlcGFyYXRlIHByZWZpbGwKJiM0MzsgKiBsb2NrL3VubG9jayBjeWNsZS4gYW5vbl9waXBlX2dldF9wYWdlKCkgZHJhaW5zIHRoZSBwb29sIGluc3RlYWQgb2YgYWxsb2NhdGluZwomIzQzOyAqIHVuZGVyIHRoZSBsb2NrLgogICovCi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZ2V0X3BhZ2VfcHJlYWxsb2Moc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsCi0JCQkJCXNpemVfdCB0b3RhbF9sZW4pCiYjNDM7c3RhdGljIHZvaWQgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2soc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwgc2l6ZV90IHRvdGFsX2xlbikKIHsKLQl1bnNpZ25lZCBpbnQgd2FudCwgaTsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXByZWFsbG9jLSZndDtjb3VudCA9IDA7Ci0JaWYgKHRvdGFsX2xlbiAmbHQ7PSBQQUdFX1NJWkUpCi0JCXJldHVybjsKJiM0MzsJc3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfUFJFQUxMT0NfTUFYXTsKJiM0MzsJdW5zaWduZWQgaW50IHdhbnQsIGhhdmUsIG5lZWQsIG4gPSAwOwogCiAJd2FudCA9IG1pbl90KHVuc2lnbmVkIGludCwgRElWX1JPVU5EX1VQKHRvdGFsX2xlbiwgUEFHRV9TSVpFKSwKIAkJICAgICBQSVBFX1BSRUFMTE9DX01BWCk7CiYjNDM7CS8qIFVubG9ja2VkIHJlYWQ7IHRoZSBwb29sIGlzIHJlZmlsbGVkIHVuZGVyIHRoZSBsb2NrIGJlbG93LiAqLwomIzQzOwloYXZlID0gbWluX3QodW5zaWduZWQgaW50LCBSRUFEX09OQ0UocGlwZS0mZ3Q7cHJlYWxsb2MuY291bnQpLCB3YW50KTsKJiM0MzsJbmVlZCA9IHdhbnQgLSBoYXZlOwomIzQzOwomIzQzOwlpZiAoIW5lZWQpIHsKJiM0MzsJCW11dGV4X2xvY2soJmFtcDtwaXBlLSZndDttdXRleCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJd2hpbGUgKG4gJmx0OyBuZWVkKSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgd2FudDsgaSYjNDM7JiM0MzspIHsKLQkJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7CiAJCWlmICghcGFnZSkKIAkJCWJyZWFrOwotCQlwcmVhbGxvYy0mZ3Q7cGFnZXNbcHJlYWxsb2MtJmd0O2NvdW50JiM0MzsmIzQzO10gPSBwYWdlOwomIzQzOwkJcGFnZXNbbiYjNDM7JiM0MztdID0gcGFnZTsKIAl9CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwaXBlLSZndDttdXRleCk7CiYjNDM7CXdoaWxlIChuICZhbXA7JmFtcDsgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goJmFtcDtwaXBlLSZndDtwcmVhbGxvYywgcGFnZXNbbiAtIDFdKSkKJiM0MzsJCW4tLTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogSnVzdCBmbHVzaCBhbnkgZXh0cmEgcGFnZSB0aGF0IGdvdCBhZmZlY3RlZCBieSB0aGUgVE9DVE9VCiYjNDM7CSAqIGVmZmVjdAomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKG4pCiYjNDM7CQlwdXRfcGFnZShwYWdlc1stLW5dKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKQomIzQzOy8qCiYjNDM7ICogQ2FsbGVkIHdpdGggcGlwZS0mZ3Q7bXV0ZXggaGVsZC4gVHJpbSB0aGUgcG9vbCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCB1bmRlcgomIzQzOyAqIHRoZSBsb2NrLCBkcm9wIGl0LCB0aGVuIGZyZWUgdGhlIGV4Y2VzcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKQogewotCWlmICghcHJlYWxsb2MtJmd0O2NvdW50KQotCQlyZXR1cm4gTlVMTDsKJiM0MzsJc3RydWN0IHBhZ2UgKmV4Y2Vzc1tQSVBFX1BSRUFMTE9DX01BWF07CiYjNDM7CXVuc2lnbmVkIGludCBuZXhjZXNzID0gMDsKIAotCXByZWFsbG9jLSZndDtjb3VudC0tOwomIzQzOwl3aGlsZSAocGlwZS0mZ3Q7cHJlYWxsb2MuY291bnQgJmd0OyBQSVBFX1BSRUFMTE9DX0tFRVApCiYjNDM7CQlleGNlc3NbbmV4Y2VzcyYjNDM7JiM0MztdID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcCgmYW1wO3BpcGUtJmd0O3ByZWFsbG9jKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZS0mZ3Q7bXV0ZXgpOwogCi0JcmV0dXJuIHByZWFsbG9jLSZndDtwYWdlc1twcmVhbGxvYy0mZ3Q7Y291bnRdOwomIzQzOwl3aGlsZSAobmV4Y2VzcykKJiM0MzsJCXB1dF9wYWdlKGV4Y2Vzc1stLW5leGNlc3NdKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKLQkJCQkgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpCiYjNDM7c3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCS8qIERyYWluIHByZWFsbG9jIGZpcnN0IHRvIGtlZXAgdG1wX3BhZ2VbXSBob3QgZm9yIGxhdGVyIHNtYWxsIHdyaXRlcy4gKi8KLQlwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcChwcmVhbGxvYyk7CiYjNDM7CS8qIERyYWluIHRoZSBwcmVhbGxvYyBwb29sIGJlZm9yZSBhbGxvY2F0aW5nLiBDYWxsZWQgd2l0aCBtdXRleCBoZWxkLiAqLwomIzQzOwlwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcCgmYW1wO3BpcGUtJmd0O3ByZWFsbG9jKTsKIAlpZiAocGFnZSkKIAkJcmV0dXJuIHBhZ2U7CiAKLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocGlwZS0mZ3Q7dG1wX3BhZ2UpOyBpJiM0MzsmIzQzOykgewotCQlpZiAocGlwZS0mZ3Q7dG1wX3BhZ2VbaV0pIHsKLQkJCXBhZ2UgPSBwaXBlLSZndDt0bXBfcGFnZVtpXTsKLQkJCXBpcGUtJmd0O3RtcF9wYWdlW2ldID0gTlVMTDsKLQkJCXJldHVybiBwYWdlOwotCQl9Ci0JfQotCiAJLyogRldJVzogVGhpcyBpcyBjYWxsZWQgd2l0aCBwaXBlLSZndDttdXRleCBoZWxkICovCiAJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7CiB9CkBAIC0xODcsNDggJiM0MzsyMDcsMTEgQEAgc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIHN0YXRpYyB2b2lkIGFub25fcGlwZV9wdXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLAogCQkJICAgICAgIHN0cnVjdCBwYWdlICpwYWdlKQogewotCWlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBpcGUtJmd0O3RtcF9wYWdlKTsgaSYjNDM7JiM0MzspIHsKLQkJCWlmICghcGlwZS0mZ3Q7dG1wX3BhZ2VbaV0pIHsKLQkJCQlwaXBlLSZndDt0bXBfcGFnZVtpXSA9IHBhZ2U7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JfQotCi0JcHV0X3BhZ2UocGFnZSk7Ci19Ci0KLS8qCi0gKiBTdGFzaCBsZWZ0b3ZlciBwcmVhbGxvYyBwYWdlcyBpbiB0bXBfcGFnZVtdIHNvIHRoZSBuZXh0IHdyaXRlIHRvIHRoaXMKLSAqIHBpcGUgZ2V0cyBhIGhvdCBwYWdlIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGFsbG9jYXRvci4KLSAqLwotc3RhdGljIHZvaWQgYW5vbl9waXBlX3JlZmlsbF90bXBfcGFnZXMoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKLQkJCQkgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpCi17Ci0JaW50IGksIGlkeDsKLQotCWlmICghcHJlYWxsb2MtJmd0O2NvdW50KQomIzQzOwlpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxICZhbXA7JmFtcDsKJiM0MzsJICAgIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKCZhbXA7cGlwZS0mZ3Q7cHJlYWxsb2MsIHBhZ2UpKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwaXBlLSZndDt0bXBfcGFnZSk7IGkmIzQzOyYjNDM7KSB7Ci0JCWlmIChwaXBlLSZndDt0bXBfcGFnZVtpXSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXByZWFsbG9jLSZndDtjb3VudCkKLQkJCXJldHVybjsKLQkJaWR4ID0gLS1wcmVhbGxvYy0mZ3Q7Y291bnQ7Ci0JCXBpcGUtJmd0O3RtcF9wYWdlW2ldID0gcHJlYWxsb2MtJmd0O3BhZ2VzW2lkeF07Ci0JCXByZWFsbG9jLSZndDtwYWdlc1tpZHhdID0gTlVMTDsKLQl9Ci19Ci0KLS8qIFJ1bnMgYWZ0ZXIgbXV0ZXhfdW5sb2NrKCkgdG8ga2VlcCBwdXRfcGFnZSgpIG91dCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi8KLXN0YXRpYyB2b2lkIGFub25fcGlwZV9mcmVlX3BhZ2VzKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKQotewotCXdoaWxlIChwcmVhbGxvYy0mZ3Q7Y291bnQpIHsKLQkJcHJlYWxsb2MtJmd0O2NvdW50LS07Ci0JCXB1dF9wYWdlKHByZWFsbG9jLSZndDtwYWdlc1twcmVhbGxvYy0mZ3Q7Y291bnRdKTsKLQl9CiYjNDM7CXB1dF9wYWdlKHBhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKQEAgLTQ4NSw3ICYjNDM7NDY4LDggQEAgYW5vbl9waXBlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKQogCX0KIAlpZiAocGlwZV9pc19lbXB0eShwaXBlKSkKIAkJd2FrZV9uZXh0X3JlYWRlciA9IGZhbHNlOwotCW11dGV4X3VubG9jaygmYW1wO3BpcGUtJmd0O211dGV4KTsKJiM0MzsJLyogQ29uc3VtZWQgYnVmZmVycyBtYXkgaGF2ZSByZWZpbGxlZCB0aGUgcG9vbDsgdHJpbSBpdCBhbmQgdW5sb2NrLiAqLwomIzQzOwlhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2socGlwZSk7CiAKIAlpZiAod2FrZV93cml0ZXIpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9zeW5jX3BvbGwoJmFtcDtwaXBlLSZndDt3cl93YWl0LCBFUE9MTE9VVCB8IEVQT0xMV1JOT1JNKTsKQEAgLTUyNCw3ICYjNDM7NTA4LDYgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogewogCXN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi0mZ3Q7a2lfZmlscDsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlscC0mZ3Q7cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2M7CiAJdW5zaWduZWQgaW50IGhlYWQ7CiAJc3NpemVfdCByZXQgPSAwOwogCXNpemVfdCB0b3RhbF9sZW4gPSBpb3ZfaXRlcl9jb3VudChmcm9tKTsKQEAgLTU0OCw5ICYjNDM7NTMxLDcgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogCWlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpCiAJCXJldHVybiAwOwogCi0JYW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKCZhbXA7cHJlYWxsb2MsIHRvdGFsX2xlbik7Ci0KLQltdXRleF9sb2NrKCZhbXA7cGlwZS0mZ3Q7bXV0ZXgpOwomIzQzOwlhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhwaXBlLCB0b3RhbF9sZW4pOwogCiAJaWYgKCFwaXBlLSZndDtyZWFkZXJzKSB7CiAJCWlmICgoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1NJR05BTCkgPT0gMCkKQEAgLTYwNyw3ICYjNDM7NTg4LDcgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQlpbnQgY29waWVkOwogCi0JCQlwYWdlID0gYW5vbl9waXBlX2dldF9wYWdlKHBpcGUsICZhbXA7cHJlYWxsb2MpOwomIzQzOwkJCXBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7CiAJCQlpZiAodW5saWtlbHkoIXBhZ2UpKSB7CiAJCQkJaWYgKCFyZXQpCiAJCQkJCXJldCA9IC1FTk9NRU07CkBAIC02NzEsMTEgJiM0Mzs2NTIsOSBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pCiAJCXdha2VfbmV4dF93cml0ZXIgPSB0cnVlOwogCX0KIG91dDoKLQlhbm9uX3BpcGVfcmVmaWxsX3RtcF9wYWdlcyhwaXBlLCAmYW1wO3ByZWFsbG9jKTsKIAlpZiAocGlwZV9pc19mdWxsKHBpcGUpKQogCQl3YWtlX25leHRfd3JpdGVyID0gZmFsc2U7Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZS0mZ3Q7bXV0ZXgpOwotCWFub25fcGlwZV9mcmVlX3BhZ2VzKCZhbXA7cHJlYWxsb2MpOwomIzQzOwlhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2socGlwZSk7CiAKIAkvKgogCSAqIElmIHdlIGRvIGRvIGEgd2FrZXVwIGV2ZW50LCB3ZSBkbyBhICYjMzk7c3luYyYjMzk7IHdha2V1cCwgYmVjYXVzZSB3ZQpAQCAtOTU2LDEwICYjNDM7OTM1LDggQEAgdm9pZCBmcmVlX3BpcGVfaW5mbyhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKQogCWlmIChwaXBlLSZndDt3YXRjaF9xdWV1ZSkKIAkJcHV0X3dhdGNoX3F1ZXVlKHBpcGUtJmd0O3dhdGNoX3F1ZXVlKTsKICNlbmRpZgotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBpcGUtJmd0O3RtcF9wYWdlKTsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKHBpcGUtJmd0O3RtcF9wYWdlW2ldKQotCQkJX19mcmVlX3BhZ2UocGlwZS0mZ3Q7dG1wX3BhZ2VbaV0pOwotCX0KJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHBpcGUtJmd0O3ByZWFsbG9jLmNvdW50OyBpJiM0MzsmIzQzOykKJiM0MzsJCV9fZnJlZV9wYWdlKHBpcGUtJmd0O3ByZWFsbG9jLnBhZ2VzW2ldKTsKIAlrZnJlZShwaXBlLSZndDtidWZzKTsKIAlrZnJlZShwaXBlKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmggYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCmluZGV4IDdmNmE5MmFjOTcwNDc4Li40ZTJlNGY0NGZiZTVmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oCkBAIC0xNCw2ICYjNDM7MTQsOSBAQAogI2RlZmluZSBQSVBFX0JVRl9GTEFHX0xPU1MJMHg0MAkvKiBNZXNzYWdlIGxvc3MgaGFwcGVuZWQgYWZ0ZXIgdGhpcyBidWZmZXIgKi8KICNlbmRpZgogCiYjNDM7I2RlZmluZSBQSVBFX1BSRUFMTE9DX01BWAk4CS8qIG1heCBwYWdlcyBpbiBwcmVhbGxvYyBwb29sICovCiYjNDM7I2RlZmluZSBQSVBFX1BSRUFMTE9DX0tFRVAJMgkvKiBrZWVwIGF0IGxlYXN0IHRoaXMgbWFueSBhZnRlciB0cmltICovCiYjNDM7CiAvKioKICAqCXN0cnVjdCBwaXBlX2J1ZmZlciAtIGEgbGludXgga2VybmVsIHBpcGUgYnVmZmVyCiAgKglAcGFnZTogdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgZGF0YSBmb3IgdGhlIHBpcGUgYnVmZmVyCkBAIC01OCw2ICYjNDM7NjEsMjAgQEAgdW5pb24gcGlwZV9pbmRleCB7CiAJfTsKIH07CiAKJiM0MzsvKioKJiM0MzsgKglzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIC0gcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2wKJiM0MzsgKglAcGFnZXM6IGFycmF5IG9mIGNhY2hlZCBwYWdlcyAocG9vbCkKJiM0MzsgKglAY291bnQ6IG51bWJlciBvZiBwYWdlcyBjdXJyZW50bHkgaW4gdGhlIHBvb2wKJiM0MzsgKgomIzQzOyAqIEVhY2ggcGlwZSBrZWVwcyBhIHNtYWxsIGJvdW5kZWQgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgcGFnZXMgdG8gcmVkdWNlCiYjNDM7ICogYWxsb2NhdGlvbiBvdmVyaGVhZCBkdXJpbmcgd3JpdGVzLiBUaGUgcG9vbCBpcyBib3VuZGVkIGF0IFBJUEVfUFJFQUxMT0NfTUFYCiYjNDM7ICogYW5kIHRyaW1tZWQgZG93biB0byBQSVBFX1BSRUFMTE9DX0tFRVAgYWZ0ZXIgYSB3cml0ZSBjb21wbGV0ZXMuCiYjNDM7ICovCiYjNDM7c3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyB7CiYjNDM7CXN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07CiYjNDM7CXVuc2lnbmVkIGludCBjb3VudDsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKglzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIC0gYSBsaW51eCBrZXJuZWwgcGlwZQogICoJQG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZwpAQCAtNjgsNyAmIzQzOzg1LDcgQEAgdW5pb24gcGlwZV9pbmRleCB7CiAgKglAbWF4X3VzYWdlOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtYXkgYmUgdXNlZCBpbiB0aGUgcmluZwogICoJQHJpbmdfc2l6ZTogdG90YWwgbnVtYmVyIG9mIGJ1ZmZlcnMgKHNob3VsZCBiZSBhIHBvd2VyIG9mIDIpCiAgKglAbnJfYWNjb3VudGVkOiBUaGUgYW1vdW50IHRoaXMgcGlwZSBhY2NvdW50cyBmb3IgaW4gdXNlci0mZ3Q7cGlwZV9idWZzCi0gKglAdG1wX3BhZ2U6IGNhY2hlZCByZWxlYXNlZCBwYWdlCiYjNDM7ICoJQHByZWFsbG9jOiBwZXItcGlwZSBwYWdlIHByZWFsbG9jYXRpb24gcG9vbAogICoJQHJlYWRlcnM6IG51bWJlciBvZiBjdXJyZW50IHJlYWRlcnMgb2YgdGhpcyBwaXBlCiAgKglAd3JpdGVyczogbnVtYmVyIG9mIGN1cnJlbnQgd3JpdGVycyBvZiB0aGlzIHBpcGUKICAqCUBmaWxlczogbnVtYmVyIG9mIHN0cnVjdCBmaWxlIHJlZmVycmluZyB0aGlzIHBpcGUgKHByb3RlY3RlZCBieSAtJmd0O2lfbG9jaykKQEAgLTk5LDcgJiM0MzsxMTYsNyBAQCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKICNpZmRlZiBDT05GSUdfV0FUQ0hfUVVFVUUKIAlib29sIG5vdGVfbG9zczsKICNlbmRpZgotCXN0cnVjdCBwYWdlICp0bXBfcGFnZVsyXTsKJiM0MzsJc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyBwcmVhbGxvYzsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdCAqZmFzeW5jX3JlYWRlcnM7CiAJc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzOwogCXN0cnVjdCBwaXBlX2J1ZmZlciAqYnVmczsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM5NAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDQ3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBpcGUgUGFnZSBQcmVhbGxvY2F0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBmcy9waXBlLmNgIGFuZCBgaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0JiMzOTtzIGFib3V0IGNoYW5naW5nIGhvdyBwaXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiB3b3Jrcy4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIGhvdyBwaXBlcyBmdW5jdGlvbiBpbiB0aGUga2VybmVsLCBhbmQgdGhhdCYjMzk7cyBhIHJlZCBmbGFnIOKAkyBhIGdvb2QgcmVkIGZsYWcgZm9yIGZ1enppbmcsIHRoYXQgaXMuCgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIHdob2xlIG5ldyBzZXQgb2YgZnVuY3Rpb25zOiBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgLCBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYCwgYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYCwgYW5kIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYCwgYW5kIGFsc28gbW9kaWZpZXMgZXhpc3Rpbmcgb25lcyBsaWtlIGBhbm9uX3BpcGVfcmVhZGAsIGBhbm9uX3BpcGVfd3JpdGVgLCBhbmQgYGZyZWVfcGlwZV9pbmZvYC4gSXQmIzM5O3MgYWxzbyBjaGFuZ2luZyB0aGUgYHN0cnVjdCBwaXBlX2lub2RlX2luZm9gIHRvIHVzZSB0aGlzIG5ldyBgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyBwcmVhbGxvY2AgaW5zdGVhZCBvZiB0aGF0IG9sZCBgc3RydWN0IHBhZ2UgKnRtcF9wYWdlWzJdYC4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0JiMzOTtzIGdvdCBwb3RlbnRpYWwgZm9yIGludGVyZXN0aW5nIGJlaGF2aW9yLCBzbyBmdXp6aW5nIGlzIGEgKm11c3QqLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWdzLiBMZXQmIzM5O3Mgc2VlLi4uIGBmcy9waXBlLmNgIGlzIGFsd2F5cyBjb21waWxlZC4gUGVyZmVjdCwgbm8gZGVwZW5kZW5jaWVzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgZm9yIGZ1enppbmcuICBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIG1vZGlmaWVkIGZ1bmN0aW9ucywgYXMgYmVsb3c6CgotIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYAotIGBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaGAKLSBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgCi0gYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AKLSBgYW5vbl9waXBlX2dldF9wYWdlYAotIGBhbm9uX3BpcGVfcHV0X3BhZ2VgCi0gYGFub25fcGlwZV9idWZfcmVsZWFzZWAKLSBgYW5vbl9waXBlX3JlYWRgCi0gYGFub25fcGlwZV93cml0ZWAKLSBgZnJlZV9waXBlX2luZm9gCgpgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhcmUgaW4gdGhlIGhvdCBwYXRoLCBzbyB0aG9zZSBhcmUgaGlnaCBwcmlvcml0eSwgb2J2aW91c2x5LiAgYGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrYCBhbmQgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcyBhcyB3ZWxsIOKAkyBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGNvcmUgcHJlYWxsb2NhdGlvbiBsb2dpYy4gIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYCBhbmQgYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYCBhcmUgc3RhdGljLCBidXQgbWlnaHQgYmUgaW5saW5lZC4gSSBzaG91bGQga2VlcCB0aGVtIG9uIHRoZSBsaXN0IHJlZ2FyZGxlc3MuICBIb2xkIG9uLi4uIGFyZSBgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhY3R1YWxseSBzdGF0aWMgZnVuY3Rpb25zIGluIGBmcy9waXBlLmNgPyBUaGV5IG1pZ2h0IGJlIGV4cG9ydGVkIG9yIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IEkmIzM5O2xsIGNoZWNrIGBmcy9waXBlLmNgIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAxMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waXBlLmM9MTI1PXN0YXRpYyBib29sIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxuLS1cbmZzL3BpcGUuYy0xNDAtICovXG5mcy9waXBlLmM6MTQxOnN0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG5mcy9waXBlLmMtMTQyLXtcbi0tXG5mcy9waXBlLmM9NTA3PWFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbi0tXG5mcy9waXBlLmMtNTMzLVxuZnMvcGlwZS5jOjUzNDpcdGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHBpcGUsIHRvdGFsX2xlbik7XG5mcy9waXBlLmMtNTM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3MTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipBbmFseXppbmcgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgdGhpcyBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaGFuZGxpbmcgdGhlIHBvb2wgdHJpbW1pbmcgYW5kIHVubG9ja2luZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYW5vbnltb3VzIHBpcGUgbWVjaGFuaXNtLiBNeSB1bmRlcnN0YW5kaW5nIGlzIGl0IGRpcmVjdGx5IGRlYWxzIHdpdGggcmVzb3VyY2UgbWFuYWdlbWVudC4gSSB3YW50IHRvIGNoZWNrIGhvdyBlZmZpY2llbnRseSBpdCBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIHVudXNlZCBzZWdtZW50cywgbWFraW5nIHN1cmUgaXQgZG9lc27igJl0IGludHJvZHVjZSB1bmR1ZSBmcmFnbWVudGF0aW9uIG9yIGJsb2NrIHByb2Nlc3NlcyB1bm5lY2Vzc2FyaWx5IGR1cmluZyB1bmxvY2tpbmcuIFRoZSBsb2NraW5nIHByb3RvY29sIGluIHRoaXMgcGFydCBpcyBwYXJ0aWN1bGFybHkgcHJvbmUgdG8gY29udGVudGlvbiwgc28gSSB3aWxsIHNjcnV0aW5pemUgdGhhdCBhcmVhIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gQW55IHJlY2VudCBjaGFuZ2VzLCBwYXRjaGVzLCBvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB0aGF0IGhhdmUgdG91Y2hlZCB0aGlzIGZ1bmN0aW9uPyBJJiMzOTtsbCByZXZpZXcgYW55IHJlbGV2YW50IHRlc3QgY2FzZXMsIGJlbmNobWFya3MsIGFuZCBwZXJoYXBzIHNvbWUgaW5zdHJ1bWVudGF0aW9uIGRhdGEsIGlmIGl0IGV4aXN0cywgdG8gaWRlbnRpZnkgaWYgYW55IG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIG9yIHBvdGVudGlhbCBpc3N1ZXMuIEdpdmVuIHRoZSBjcml0aWNhbCBuYXR1cmUgb2YgcGlwZXMgaW4gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UsIEkgd2FudCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBvcGVyYXRpbmcgb3B0aW1hbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDEwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9waXBlLmM9MTQxPXN0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG4tLVxuZnMvcGlwZS5jLTE4MC0gKi9cbmZzL3BpcGUuYzoxODE6c3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG5mcy9waXBlLmMtMTgyLXtcbi0tXG5mcy9waXBlLmM9MzQ0PWFub25fcGlwZV9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcbi0tXG5mcy9waXBlLmMtNDcxLVx0LyogQ29uc3VtZWQgYnVmZmVycyBtYXkgaGF2ZSByZWZpbGxlZCB0aGUgcG9vbDsgdHJpbSBpdCBhbmQgdW5sb2NrLiAqL1xuZnMvcGlwZS5jOjQ3MjpcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbmZzL3BpcGUuYy00NzMtXG4tLVxuZnMvcGlwZS5jPTUwNz1hbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4tLVxuZnMvcGlwZS5jLTY1Ni1cdFx0d2FrZV9uZXh0X3dyaXRlciA9IGZhbHNlO1xuZnMvcGlwZS5jOjY1NzpcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbmZzL3BpcGUuYy02NTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI5NgoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAzNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgRnV6emluZyBTdHJhdGVneTogUGlwZSBQYWdlIFByZWFsbG9jYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZ1enppbmcgdGhpcyBwaXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiBwYXRjaC4gSSBrbm93IHRoZSBtYWluIGVudHJ5IHBvaW50cyBmb3IgSS9PIGFyZSBgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCDigJMgcHJvYmFibHkgaG90IHBhdGhzLCBidXQgdGhleSYjMzk7cmUgbGlrZWx5IGdvaW5nIHRvIGdldCB0ZXN0ZWQgZXh0ZW5zaXZlbHkgYW55d2F5LiBUaGlzIHBhdGNoJiMzOTtzIHNwZWNpZmljIGZ1bmN0aW9ucyBhcmUgbXkgcHJpbWFyeSB0YXJnZXRzLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gdGhlbS4KCkkmIzM5O3ZlIGdvdCB0aGUgbGlzdDoKCiogICBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgCiogICBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYAoqICAgYGFub25fcGlwZV9nZXRfcGFnZWAKKiAgIGBhbm9uX3BpcGVfcHV0X3BhZ2VgCiogICBgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hgCiogICBgYW5vbl9waXBlX3ByZWFsbG9jX3BvcGAKClRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIOKAkyBwaXBlcyBhcmUgYWx3YXlzIGVuYWJsZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBpbnZvbHZlcyBhIG5ldyBwcmVhbGxvY2F0aW9uIHBvb2wgYW5kIG1vZGlmaWVkIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gaW4gdGhlIHBpcGUgY29kZS4gVGhpcyBzbWVsbHMgbGlrZSBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgbWVtb3J5IGNvcnJ1cHRpb24g4oCTIGxlYWtzLCBVQUZzLCByYWNlcy4gR290dGEgaGFtbWVyIHRob3NlIQoKSnVzdCBkb3VibGUgY2hlY2tpbmcsIHRoZXJlIGlzIGBmcmVlX3BpcGVfaW5mb2AgYWxzbyBtb2RpZmllZCwgYnV0IGl0JiMzOTtzIHByZXR0eSBnZW5lcmljLgoKQWxyaWdodCwgSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBkaXJlY3Rpb24uIEkmIzM5O2xsIGNhbGwgc2V0LXJlc3VsdHMgbm93IGFuZCBtb3ZlIGZvcndhcmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMTA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfZ2V0X3BhZ2UmIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX3B1dF9wYWdlJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wdXNoJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wcmVhbGxvY19wb3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgcHJlYWxsb2NhdGlvbiBsb2dpYyBmb3IgcGlwZXMsIGludHJvZHVjaW5nIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGR1cmluZyBwaXBlIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2smIzM0OywKICAgICYjMzQ7YW5vbl9waXBlX2dldF9wYWdlJiMzNDssCiAgICAmIzM0O2Fub25fcGlwZV9wdXRfcGFnZSYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfcHJlYWxsb2NfcHVzaCYjMzQ7LAogICAgJiMzNDthbm9uX3BpcGVfcHJlYWxsb2NfcG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIHByZWFsbG9jYXRpb24gbG9naWMgZm9yIHBpcGVzLCBpbnRyb2R1Y2luZyBhIG5ldyBwcmVhbGxvY2F0aW9uIHBvb2wgYW5kIGNoYW5naW5nIGhvdyBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCBkdXJpbmcgcGlwZSByZWFkcyBhbmQgd3JpdGVzLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzowOS43NzgyNTMzMDFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDcxNDAxMDc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja1wiLFxuICAgIFwiYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrXCIsXG4gICAgXCJhbm9uX3BpcGVfZ2V0X3BhZ2VcIixcbiAgICBcImFub25fcGlwZV9wdXRfcGFnZVwiLFxuICAgIFwiYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hcIixcbiAgICBcImFub25fcGlwZV9wcmVhbGxvY19wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBwcmVhbGxvY2F0aW9uIGxvZ2ljIGZvciBwaXBlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJlYWxsb2NhdGlvbiBwb29sIGFuZCBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgZHVyaW5nIHBpcGUgcmVhZHMgYW5kIHdyaXRlcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzowOS43NzgyODY5OTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4ODYzMTEyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdhODBjNDk4MjE4NzQ3YWYwNTRmYjBhMTg5YTFhYzVkNzk3NGY1ZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTA6MDM6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvcGlwZS5jIGIvZnMvcGlwZS5jXFxuaW5kZXggNDI5YjA3MTRlYzU3NTUuLmIxNGQ1YmIyYjQ1YTQ1IDEwMDY0NFxcbi0tLSBhL2ZzL3BpcGUuY1xcbisrKyBiL2ZzL3BpcGUuY1xcbkBAIC0xMTEsNzUgKzExMSw5NSBAQCB2b2lkIHBpcGVfZG91YmxlX2xvY2soc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZTEsXFxuIFxcdHBpcGVfbG9jayhwaXBlMik7XFxuIH1cXG4gXFxuLSNkZWZpbmUgUElQRV9QUkVBTExPQ19NQVggOFxcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9wcmVhbGxvY19wb3Aoc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpXFxuK3tcXG4rXFx0aWYgKCFwcmVhbGxvYy1cXHUwMDNlY291bnQpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4tc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyB7XFxuLVxcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tfTtcXG4rXFx0cHJlYWxsb2MtXFx1MDAzZWNvdW50LS07XFxuK1xcbitcXHRyZXR1cm4gcHJlYWxsb2MtXFx1MDAzZXBhZ2VzW3ByZWFsbG9jLVxcdTAwM2Vjb3VudF07XFxuK31cXG4rXFxuKy8qIFB1c2ggYSBwYWdlIHRvIHRoZSBwcmVhbGxvYyBwb29sLiBSZXR1cm5zIHRydWUgaWYgYWRkZWQsIGZhbHNlIGlmIGZ1bGwuICovXFxuK3N0YXRpYyBib29sIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuK3tcXG4rXFx0aWYgKHByZWFsbG9jLVxcdTAwM2Vjb3VudCBcXHUwMDNlPSBQSVBFX1BSRUFMTE9DX01BWClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRwcmVhbGxvYy1cXHUwMDNlcGFnZXNbcHJlYWxsb2MtXFx1MDAzZWNvdW50KytdID0gcGFnZTtcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4gXFxuIC8qXFxuLSAqIFByZS1hbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIHBpcGUtXFx1MDAzZW11dGV4IGZvciBtdWx0aS1wYWdlIHdyaXRlcy5cXG4tICogYWxsb2NfcGFnZSgpIHdpdGggR0ZQX0hJR0hVU0VSIGNhbiBzbGVlcCBpbiByZWNsYWltIGFuZCBydW5zIG1lbWNnXFxuLSAqIGNoYXJnaW5nOyBkb2luZyBpdCB1bmRlciB0aGUgbXV0ZXggc3RhbGxzIGEgY29uY3VycmVudCByZWFkZXIuXFxuLSAqXFxuLSAqIExvb3AgYWxsb2NfcGFnZSgpIGluc3RlYWQgb2YgYWxsb2NfcGFnZXNfYnVsa18qKCk6IHRoZSBidWxrIHBhdGggcmVmdXNlc1xcbi0gKiBfX0dGUF9BQ0NPVU5UIHVuZGVyIG1lbWNnIChzZWUgY29tbWl0IDhkY2IzMDYwZDgxZCBcXFwibWVtY2c6IHBhZ2VfYWxsb2M6XFxuLSAqIHNraXAgYnVsayBhbGxvY2F0b3IgZm9yIF9fR0ZQX0FDQ09VTlRcXFwiKSBhbmQgc2lsZW50bHkgZGVncmFkZXMgdG8gYSBzaW5nbGVcXG4tICogcGFnZS4gQSBwZXItcGFnZSBsb29wIGtlZXBzIG1lbWNnIGFjY291bnRpbmcgYW5kIHRoZSB0YXNrIE5VTUEgbWVtcG9saWN5XFxuLSAqIGhvbm91cmVkIGZvciBldmVyeSBwYWdlOyB0aGUgcGVyLWNhbGwgb3ZlcmhlYWQgaXMgc21hbGwgY29tcGFyZWQgdG8gdGhlXFxuLSAqIHBpcGUtXFx1MDAzZW11dGV4IGhvbGQtdGltZSBiZWluZyBzaHJ1bmsuIEFueSBzaG9ydGZhbGwgaXMgY292ZXJlZCBieSB0aGVcXG4tICogaW4tbG9jayBhbGxvY19wYWdlKCkgZmFsbGJhY2sgaW4gYW5vbl9waXBlX2dldF9wYWdlKCkuXFxuKyAqIFRvcCB1cCB0aGUgcGlwZSdzIG93biBwb29sLCB0aGVuIHRha2UgcGlwZS1cXHUwMDNlbXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuXFxuKyAqIFRoZSBzaG9ydGZhbGwgaXMgYWxsb2NhdGVkIG91dHNpZGUgdGhlIGxvY2s7IHRoZSBwdXNoIGFuZCB0aGUgY2FsbGVyJ3Mgd3JpdGVcXG4rICogdGhlbiBydW4gdW5kZXIgYSBzaW5nbGUgbG9jayBhY3F1aXNpdGlvbiwgYXZvaWRpbmcgYSBzZXBhcmF0ZSBwcmVmaWxsXFxuKyAqIGxvY2svdW5sb2NrIGN5Y2xlLiBhbm9uX3BpcGVfZ2V0X3BhZ2UoKSBkcmFpbnMgdGhlIHBvb2wgaW5zdGVhZCBvZiBhbGxvY2F0aW5nXFxuKyAqIHVuZGVyIHRoZSBsb2NrLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgYW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxcbi1cXHRcXHRcXHRcXHRcXHRzaXplX3QgdG90YWxfbGVuKVxcbitzdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgdG90YWxfbGVuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCB3YW50LCBpO1xcbi1cXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcXG4tXFxuLVxcdHByZWFsbG9jLVxcdTAwM2Vjb3VudCA9IDA7XFxuLVxcdGlmICh0b3RhbF9sZW4gXFx1MDAzYz0gUEFHRV9TSVpFKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XFxuK1xcdHVuc2lnbmVkIGludCB3YW50LCBoYXZlLCBuZWVkLCBuID0gMDtcXG4gXFxuIFxcdHdhbnQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIERJVl9ST1VORF9VUCh0b3RhbF9sZW4sIFBBR0VfU0laRSksXFxuIFxcdFxcdCAgICAgUElQRV9QUkVBTExPQ19NQVgpO1xcbitcXHQvKiBVbmxvY2tlZCByZWFkOyB0aGUgcG9vbCBpcyByZWZpbGxlZCB1bmRlciB0aGUgbG9jayBiZWxvdy4gKi9cXG4rXFx0aGF2ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUkVBRF9PTkNFKHBpcGUtXFx1MDAzZXByZWFsbG9jLmNvdW50KSwgd2FudCk7XFxuK1xcdG5lZWQgPSB3YW50IC0gaGF2ZTtcXG4rXFxuK1xcdGlmICghbmVlZCkge1xcbitcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZwaXBlLVxcdTAwM2VtdXRleCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0d2hpbGUgKG4gXFx1MDAzYyBuZWVkKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIgfCBfX0dGUF9BQ0NPVU5UKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3YW50OyBpKyspIHtcXG4tXFx0XFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XFxuIFxcdFxcdGlmICghcGFnZSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdHByZWFsbG9jLVxcdTAwM2VwYWdlc1twcmVhbGxvYy1cXHUwMDNlY291bnQrK10gPSBwYWdlO1xcbitcXHRcXHRwYWdlc1tuKytdID0gcGFnZTtcXG4gXFx0fVxcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbitcXHR3aGlsZSAobiBcXHUwMDI2XFx1MDAyNiBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChcXHUwMDI2cGlwZS1cXHUwMDNlcHJlYWxsb2MsIHBhZ2VzW24gLSAxXSkpXFxuK1xcdFxcdG4tLTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEp1c3QgZmx1c2ggYW55IGV4dHJhIHBhZ2UgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgdGhlIFRPQ1RPVVxcbitcXHQgKiBlZmZlY3RcXG4rXFx0ICovXFxuK1xcdHdoaWxlIChuKVxcbitcXHRcXHRwdXRfcGFnZShwYWdlc1stLW5dKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKVxcbisvKlxcbisgKiBDYWxsZWQgd2l0aCBwaXBlLVxcdTAwM2VtdXRleCBoZWxkLiBUcmltIHRoZSBwb29sIGRvd24gdG8gUElQRV9QUkVBTExPQ19LRUVQIHVuZGVyXFxuKyAqIHRoZSBsb2NrLCBkcm9wIGl0LCB0aGVuIGZyZWUgdGhlIGV4Y2VzcyBvdXRzaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXFxuIHtcXG4tXFx0aWYgKCFwcmVhbGxvYy1cXHUwMDNlY291bnQpXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRzdHJ1Y3QgcGFnZSAqZXhjZXNzW1BJUEVfUFJFQUxMT0NfTUFYXTtcXG4rXFx0dW5zaWduZWQgaW50IG5leGNlc3MgPSAwO1xcbiBcXG4tXFx0cHJlYWxsb2MtXFx1MDAzZWNvdW50LS07XFxuK1xcdHdoaWxlIChwaXBlLVxcdTAwM2VwcmVhbGxvYy5jb3VudCBcXHUwMDNlIFBJUEVfUFJFQUxMT0NfS0VFUClcXG4rXFx0XFx0ZXhjZXNzW25leGNlc3MrK10gPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKFxcdTAwMjZwaXBlLVxcdTAwM2VwcmVhbGxvYyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbiBcXG4tXFx0cmV0dXJuIHByZWFsbG9jLVxcdTAwM2VwYWdlc1twcmVhbGxvYy1cXHUwMDNlY291bnRdO1xcbitcXHR3aGlsZSAobmV4Y2VzcylcXG4rXFx0XFx0cHV0X3BhZ2UoZXhjZXNzWy0tbmV4Y2Vzc10pO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpXFxuK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYW5vbl9waXBlX2dldF9wYWdlKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXFxuIHtcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbi1cXHQvKiBEcmFpbiBwcmVhbGxvYyBmaXJzdCB0byBrZWVwIHRtcF9wYWdlW10gaG90IGZvciBsYXRlciBzbWFsbCB3cml0ZXMuICovXFxuLVxcdHBhZ2UgPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHByZWFsbG9jKTtcXG4rXFx0LyogRHJhaW4gdGhlIHByZWFsbG9jIHBvb2wgYmVmb3JlIGFsbG9jYXRpbmcuIENhbGxlZCB3aXRoIG11dGV4IGhlbGQuICovXFxuK1xcdHBhZ2UgPSBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wKFxcdTAwMjZwaXBlLVxcdTAwM2VwcmVhbGxvYyk7XFxuIFxcdGlmIChwYWdlKVxcbiBcXHRcXHRyZXR1cm4gcGFnZTtcXG4gXFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwaXBlLVxcdTAwM2V0bXBfcGFnZSk7IGkrKykge1xcbi1cXHRcXHRpZiAocGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0pIHtcXG4tXFx0XFx0XFx0cGFnZSA9IHBpcGUtXFx1MDAzZXRtcF9wYWdlW2ldO1xcbi1cXHRcXHRcXHRwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSA9IE5VTEw7XFxuLVxcdFxcdFxcdHJldHVybiBwYWdlO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4tXFxuIFxcdC8qIEZXSVc6IFRoaXMgaXMgY2FsbGVkIHdpdGggcGlwZS1cXHUwMDNlbXV0ZXggaGVsZCAqL1xcbiBcXHRyZXR1cm4gYWxsb2NfcGFnZShHRlBfSElHSFVTRVIgfCBfX0dGUF9BQ0NPVU5UKTtcXG4gfVxcbkBAIC0xODcsNDggKzIwNywxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbiBzdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHV0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBwYWdlICpwYWdlKVxcbiB7XFxuLVxcdGlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEpIHtcXG4tXFx0XFx0Zm9yIChpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXFx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XFxuLVxcdFxcdFxcdGlmICghcGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0pIHtcXG4tXFx0XFx0XFx0XFx0cGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0gPSBwYWdlO1xcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdFxcdH1cXG4tXFx0XFx0fVxcbi1cXHR9XFxuLVxcbi1cXHRwdXRfcGFnZShwYWdlKTtcXG4tfVxcbi1cXG4tLypcXG4tICogU3Rhc2ggbGVmdG92ZXIgcHJlYWxsb2MgcGFnZXMgaW4gdG1wX3BhZ2VbXSBzbyB0aGUgbmV4dCB3cml0ZSB0byB0aGlzXFxuLSAqIHBpcGUgZ2V0cyBhIGhvdCBwYWdlIHdpdGhvdXQgZW50ZXJpbmcgdGhlIGFsbG9jYXRvci5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcXG4te1xcbi1cXHRpbnQgaSwgaWR4O1xcbi1cXG4tXFx0aWYgKCFwcmVhbGxvYy1cXHUwMDNlY291bnQpXFxuK1xcdGlmIChwYWdlX2NvdW50KHBhZ2UpID09IDEgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKFxcdTAwMjZwaXBlLVxcdTAwM2VwcmVhbGxvYywgcGFnZSkpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXFx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdGlmICghcHJlYWxsb2MtXFx1MDAzZWNvdW50KVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGlkeCA9IC0tcHJlYWxsb2MtXFx1MDAzZWNvdW50O1xcbi1cXHRcXHRwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSA9IHByZWFsbG9jLVxcdTAwM2VwYWdlc1tpZHhdO1xcbi1cXHRcXHRwcmVhbGxvYy1cXHUwMDNlcGFnZXNbaWR4XSA9IE5VTEw7XFxuLVxcdH1cXG4tfVxcbi1cXG4tLyogUnVucyBhZnRlciBtdXRleF91bmxvY2soKSB0byBrZWVwIHB1dF9wYWdlKCkgb3V0IG9mIHRoZSBjcml0aWNhbCBzZWN0aW9uLiAqL1xcbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZnJlZV9wYWdlcyhzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcXG4te1xcbi1cXHR3aGlsZSAocHJlYWxsb2MtXFx1MDAzZWNvdW50KSB7XFxuLVxcdFxcdHByZWFsbG9jLVxcdTAwM2Vjb3VudC0tO1xcbi1cXHRcXHRwdXRfcGFnZShwcmVhbGxvYy1cXHUwMDNlcGFnZXNbcHJlYWxsb2MtXFx1MDAzZWNvdW50XSk7XFxuLVxcdH1cXG4rXFx0cHV0X3BhZ2UocGFnZSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGFub25fcGlwZV9idWZfcmVsZWFzZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxcbkBAIC00ODUsNyArNDY4LDggQEAgYW5vbl9waXBlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxcbiBcXHR9XFxuIFxcdGlmIChwaXBlX2lzX2VtcHR5KHBpcGUpKVxcbiBcXHRcXHR3YWtlX25leHRfcmVhZGVyID0gZmFsc2U7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbitcXHQvKiBDb25zdW1lZCBidWZmZXJzIG1heSBoYXZlIHJlZmlsbGVkIHRoZSBwb29sOyB0cmltIGl0IGFuZCB1bmxvY2suICovXFxuK1xcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG4gXFxuIFxcdGlmICh3YWtlX3dyaXRlcilcXG4gXFx0XFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbChcXHUwMDI2cGlwZS1cXHUwMDNld3Jfd2FpdCwgRVBPTExPVVQgfCBFUE9MTFdSTk9STSk7XFxuQEAgLTUyNCw3ICs1MDgsNiBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIHtcXG4gXFx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVxcdTAwM2VraV9maWxwO1xcbiBcXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbi1cXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHByZWFsbG9jO1xcbiBcXHR1bnNpZ25lZCBpbnQgaGVhZDtcXG4gXFx0c3NpemVfdCByZXQgPSAwO1xcbiBcXHRzaXplX3QgdG90YWxfbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XFxuQEAgLTU0OCw5ICs1MzEsNyBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuIFxcdGlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0YW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKFxcdTAwMjZwcmVhbGxvYywgdG90YWxfbGVuKTtcXG4tXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBpcGUtXFx1MDAzZW11dGV4KTtcXG4rXFx0YW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2socGlwZSwgdG90YWxfbGVuKTtcXG4gXFxuIFxcdGlmICghcGlwZS1cXHUwMDNlcmVhZGVycykge1xcbiBcXHRcXHRpZiAoKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1NJR05BTCkgPT0gMClcXG5AQCAtNjA3LDcgKzU4OCw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcXG4gXFx0XFx0XFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcdFxcdFxcdGludCBjb3BpZWQ7XFxuIFxcbi1cXHRcXHRcXHRwYWdlID0gYW5vbl9waXBlX2dldF9wYWdlKHBpcGUsIFxcdTAwMjZwcmVhbGxvYyk7XFxuK1xcdFxcdFxcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7XFxuIFxcdFxcdFxcdGlmICh1bmxpa2VseSghcGFnZSkpIHtcXG4gXFx0XFx0XFx0XFx0aWYgKCFyZXQpXFxuIFxcdFxcdFxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuQEAgLTY3MSwxMSArNjUyLDkgQEAgYW5vbl9waXBlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxcbiBcXHRcXHR3YWtlX25leHRfd3JpdGVyID0gdHJ1ZTtcXG4gXFx0fVxcbiBvdXQ6XFxuLVxcdGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHBpcGUsIFxcdTAwMjZwcmVhbGxvYyk7XFxuIFxcdGlmIChwaXBlX2lzX2Z1bGwocGlwZSkpXFxuIFxcdFxcdHdha2VfbmV4dF93cml0ZXIgPSBmYWxzZTtcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaXBlLVxcdTAwM2VtdXRleCk7XFxuLVxcdGFub25fcGlwZV9mcmVlX3BhZ2VzKFxcdTAwMjZwcmVhbGxvYyk7XFxuK1xcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIElmIHdlIGRvIGRvIGEgd2FrZXVwIGV2ZW50LCB3ZSBkbyBhICdzeW5jJyB3YWtldXAsIGJlY2F1c2Ugd2VcXG5AQCAtOTU2LDEwICs5MzUsOCBAQCB2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXFxuIFxcdGlmIChwaXBlLVxcdTAwM2V3YXRjaF9xdWV1ZSlcXG4gXFx0XFx0cHV0X3dhdGNoX3F1ZXVlKHBpcGUtXFx1MDAzZXdhdGNoX3F1ZXVlKTtcXG4gI2VuZGlmXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXFx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XFxuLVxcdFxcdGlmIChwaXBlLVxcdTAwM2V0bXBfcGFnZVtpXSlcXG4tXFx0XFx0XFx0X19mcmVlX3BhZ2UocGlwZS1cXHUwMDNldG1wX3BhZ2VbaV0pO1xcbi1cXHR9XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwaXBlLVxcdTAwM2VwcmVhbGxvYy5jb3VudDsgaSsrKVxcbitcXHRcXHRfX2ZyZWVfcGFnZShwaXBlLVxcdTAwM2VwcmVhbGxvYy5wYWdlc1tpXSk7XFxuIFxcdGtmcmVlKHBpcGUtXFx1MDAzZWJ1ZnMpO1xcbiBcXHRrZnJlZShwaXBlKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxcbmluZGV4IDdmNmE5MmFjOTcwNDc4Li40ZTJlNGY0NGZiZTVmNSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNfaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaFxcbkBAIC0xNCw2ICsxNCw5IEBAXFxuICNkZWZpbmUgUElQRV9CVUZfRkxBR19MT1NTXFx0MHg0MFxcdC8qIE1lc3NhZ2UgbG9zcyBoYXBwZW5lZCBhZnRlciB0aGlzIGJ1ZmZlciAqL1xcbiAjZW5kaWZcXG4gXFxuKyNkZWZpbmUgUElQRV9QUkVBTExPQ19NQVhcXHQ4XFx0LyogbWF4IHBhZ2VzIGluIHByZWFsbG9jIHBvb2wgKi9cXG4rI2RlZmluZSBQSVBFX1BSRUFMTE9DX0tFRVBcXHQyXFx0Lyoga2VlcCBhdCBsZWFzdCB0aGlzIG1hbnkgYWZ0ZXIgdHJpbSAqL1xcbitcXG4gLyoqXFxuICAqXFx0c3RydWN0IHBpcGVfYnVmZmVyIC0gYSBsaW51eCBrZXJuZWwgcGlwZSBidWZmZXJcXG4gICpcXHRAcGFnZTogdGhlIHBhZ2UgY29udGFpbmluZyB0aGUgZGF0YSBmb3IgdGhlIHBpcGUgYnVmZmVyXFxuQEAgLTU4LDYgKzYxLDIwIEBAIHVuaW9uIHBpcGVfaW5kZXgge1xcbiBcXHR9O1xcbiB9O1xcbiBcXG4rLyoqXFxuKyAqXFx0c3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAtIHBlci1waXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiBwb29sXFxuKyAqXFx0QHBhZ2VzOiBhcnJheSBvZiBjYWNoZWQgcGFnZXMgKHBvb2wpXFxuKyAqXFx0QGNvdW50OiBudW1iZXIgb2YgcGFnZXMgY3VycmVudGx5IGluIHRoZSBwb29sXFxuKyAqXFxuKyAqIEVhY2ggcGlwZSBrZWVwcyBhIHNtYWxsIGJvdW5kZWQgcG9vbCBvZiBwcmVhbGxvY2F0ZWQgcGFnZXMgdG8gcmVkdWNlXFxuKyAqIGFsbG9jYXRpb24gb3ZlcmhlYWQgZHVyaW5nIHdyaXRlcy4gVGhlIHBvb2wgaXMgYm91bmRlZCBhdCBQSVBFX1BSRUFMTE9DX01BWFxcbisgKiBhbmQgdHJpbW1lZCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCBhZnRlciBhIHdyaXRlIGNvbXBsZXRlcy5cXG4rICovXFxuK3N0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2Mge1xcbitcXHRzdHJ1Y3QgcGFnZSAqcGFnZXNbUElQRV9QUkVBTExPQ19NQVhdO1xcbitcXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuK307XFxuK1xcbiAvKipcXG4gICpcXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIC0gYSBsaW51eCBrZXJuZWwgcGlwZVxcbiAgKlxcdEBtdXRleDogbXV0ZXggcHJvdGVjdGluZyB0aGUgd2hvbGUgdGhpbmdcXG5AQCAtNjgsNyArODUsNyBAQCB1bmlvbiBwaXBlX2luZGV4IHtcXG4gICpcXHRAbWF4X3VzYWdlOiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgdGhhdCBtYXkgYmUgdXNlZCBpbiB0aGUgcmluZ1xcbiAgKlxcdEByaW5nX3NpemU6IHRvdGFsIG51bWJlciBvZiBidWZmZXJzIChzaG91bGQgYmUgYSBwb3dlciBvZiAyKVxcbiAgKlxcdEBucl9hY2NvdW50ZWQ6IFRoZSBhbW91bnQgdGhpcyBwaXBlIGFjY291bnRzIGZvciBpbiB1c2VyLVxcdTAwM2VwaXBlX2J1ZnNcXG4tICpcXHRAdG1wX3BhZ2U6IGNhY2hlZCByZWxlYXNlZCBwYWdlXFxuKyAqXFx0QHByZWFsbG9jOiBwZXItcGlwZSBwYWdlIHByZWFsbG9jYXRpb24gcG9vbFxcbiAgKlxcdEByZWFkZXJzOiBudW1iZXIgb2YgY3VycmVudCByZWFkZXJzIG9mIHRoaXMgcGlwZVxcbiAgKlxcdEB3cml0ZXJzOiBudW1iZXIgb2YgY3VycmVudCB3cml0ZXJzIG9mIHRoaXMgcGlwZVxcbiAgKlxcdEBmaWxlczogbnVtYmVyIG9mIHN0cnVjdCBmaWxlIHJlZmVycmluZyB0aGlzIHBpcGUgKHByb3RlY3RlZCBieSAtXFx1MDAzZWlfbG9jaylcXG5AQCAtOTksNyArMTE2LDcgQEAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7XFxuICNpZmRlZiBDT05GSUdfV0FUQ0hfUVVFVUVcXG4gXFx0Ym9vbCBub3RlX2xvc3M7XFxuICNlbmRpZlxcbi1cXHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2VbMl07XFxuK1xcdHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2M7XFxuIFxcdHN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmNfcmVhZGVycztcXG4gXFx0c3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzO1xcbiBcXHRzdHJ1Y3QgcGlwZV9idWZmZXIgKmJ1ZnM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjEwLjU2NzkxMTUwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjQzNDUxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tcIixcbiAgICBcImFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja1wiLFxuICAgIFwiYW5vbl9waXBlX2dldF9wYWdlXCIsXG4gICAgXCJhbm9uX3BpcGVfcHV0X3BhZ2VcIixcbiAgICBcImFub25fcGlwZV9wcmVhbGxvY19wdXNoXCIsXG4gICAgXCJhbm9uX3BpcGVfcHJlYWxsb2NfcG9wXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHBhZ2UgcHJlYWxsb2NhdGlvbiBsb2dpYyBmb3IgcGlwZXMsIGludHJvZHVjaW5nIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgY2hhbmdpbmcgaG93IHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkIGR1cmluZyBwaXBlIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIHJhY2UgY29uZGl0aW9ucyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YTgwYzQ5ODIxODc0N2FmMDU0ZmIwYTE4OWExYWM1ZDc5NzRmNWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMTA6MDM6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9waXBlLmMgYi9mcy9waXBlLmNcbmluZGV4IDQyOWIwNzE0ZWM1NzU1Li5iMTRkNWJiMmI0NWE0NSAxMDA2NDRcbi0tLSBhL2ZzL3BpcGUuY1xuKysrIGIvZnMvcGlwZS5jXG5AQCAtMTExLDc1ICsxMTEsOTUgQEAgdm9pZCBwaXBlX2RvdWJsZV9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUxLFxuIFx0cGlwZV9sb2NrKHBpcGUyKTtcbiB9XG4gXG4tI2RlZmluZSBQSVBFX1BSRUFMTE9DX01BWCA4XG4rc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKVxuK3tcbitcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4rXHRcdHJldHVybiBOVUxMO1xuIFxuLXN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2Mge1xuLVx0c3RydWN0IHBhZ2UgKnBhZ2VzW1BJUEVfUFJFQUxMT0NfTUFYXTtcbi1cdHVuc2lnbmVkIGludCBjb3VudDtcbi19O1xuK1x0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbitcbitcdHJldHVybiBwcmVhbGxvYy1cdTAwM2VwYWdlc1twcmVhbGxvYy1cdTAwM2Vjb3VudF07XG4rfVxuK1xuKy8qIFB1c2ggYSBwYWdlIHRvIHRoZSBwcmVhbGxvYyBwb29sLiBSZXR1cm5zIHRydWUgaWYgYWRkZWQsIGZhbHNlIGlmIGZ1bGwuICovXG4rc3RhdGljIGJvb2wgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MsXG4rXHRcdFx0XHQgICAgc3RydWN0IHBhZ2UgKnBhZ2UpXG4re1xuK1x0aWYgKHByZWFsbG9jLVx1MDAzZWNvdW50IFx1MDAzZT0gUElQRV9QUkVBTExPQ19NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdHByZWFsbG9jLVx1MDAzZXBhZ2VzW3ByZWFsbG9jLVx1MDAzZWNvdW50KytdID0gcGFnZTtcbitcdHJldHVybiB0cnVlO1xuK31cbiBcbiAvKlxuLSAqIFByZS1hbGxvY2F0ZSBwYWdlcyBvdXRzaWRlIHBpcGUtXHUwMDNlbXV0ZXggZm9yIG11bHRpLXBhZ2Ugd3JpdGVzLlxuLSAqIGFsbG9jX3BhZ2UoKSB3aXRoIEdGUF9ISUdIVVNFUiBjYW4gc2xlZXAgaW4gcmVjbGFpbSBhbmQgcnVucyBtZW1jZ1xuLSAqIGNoYXJnaW5nOyBkb2luZyBpdCB1bmRlciB0aGUgbXV0ZXggc3RhbGxzIGEgY29uY3VycmVudCByZWFkZXIuXG4tICpcbi0gKiBMb29wIGFsbG9jX3BhZ2UoKSBpbnN0ZWFkIG9mIGFsbG9jX3BhZ2VzX2J1bGtfKigpOiB0aGUgYnVsayBwYXRoIHJlZnVzZXNcbi0gKiBfX0dGUF9BQ0NPVU5UIHVuZGVyIG1lbWNnIChzZWUgY29tbWl0IDhkY2IzMDYwZDgxZCBcIm1lbWNnOiBwYWdlX2FsbG9jOlxuLSAqIHNraXAgYnVsayBhbGxvY2F0b3IgZm9yIF9fR0ZQX0FDQ09VTlRcIikgYW5kIHNpbGVudGx5IGRlZ3JhZGVzIHRvIGEgc2luZ2xlXG4tICogcGFnZS4gQSBwZXItcGFnZSBsb29wIGtlZXBzIG1lbWNnIGFjY291bnRpbmcgYW5kIHRoZSB0YXNrIE5VTUEgbWVtcG9saWN5XG4tICogaG9ub3VyZWQgZm9yIGV2ZXJ5IHBhZ2U7IHRoZSBwZXItY2FsbCBvdmVyaGVhZCBpcyBzbWFsbCBjb21wYXJlZCB0byB0aGVcbi0gKiBwaXBlLVx1MDAzZW11dGV4IGhvbGQtdGltZSBiZWluZyBzaHJ1bmsuIEFueSBzaG9ydGZhbGwgaXMgY292ZXJlZCBieSB0aGVcbi0gKiBpbi1sb2NrIGFsbG9jX3BhZ2UoKSBmYWxsYmFjayBpbiBhbm9uX3BpcGVfZ2V0X3BhZ2UoKS5cbisgKiBUb3AgdXAgdGhlIHBpcGUncyBvd24gcG9vbCwgdGhlbiB0YWtlIHBpcGUtXHUwMDNlbXV0ZXggYW5kIHJldHVybiB3aXRoIGl0IGhlbGQuXG4rICogVGhlIHNob3J0ZmFsbCBpcyBhbGxvY2F0ZWQgb3V0c2lkZSB0aGUgbG9jazsgdGhlIHB1c2ggYW5kIHRoZSBjYWxsZXIncyB3cml0ZVxuKyAqIHRoZW4gcnVuIHVuZGVyIGEgc2luZ2xlIGxvY2sgYWNxdWlzaXRpb24sIGF2b2lkaW5nIGEgc2VwYXJhdGUgcHJlZmlsbFxuKyAqIGxvY2svdW5sb2NrIGN5Y2xlLiBhbm9uX3BpcGVfZ2V0X3BhZ2UoKSBkcmFpbnMgdGhlIHBvb2wgaW5zdGVhZCBvZiBhbGxvY2F0aW5nXG4rICogdW5kZXIgdGhlIGxvY2suXG4gICovXG4tc3RhdGljIHZvaWQgYW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jLFxuLVx0XHRcdFx0XHRzaXplX3QgdG90YWxfbGVuKVxuK3N0YXRpYyB2b2lkIGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHNpemVfdCB0b3RhbF9sZW4pXG4ge1xuLVx0dW5zaWduZWQgaW50IHdhbnQsIGk7XG4tXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi1cbi1cdHByZWFsbG9jLVx1MDAzZWNvdW50ID0gMDtcbi1cdGlmICh0b3RhbF9sZW4gXHUwMDNjPSBQQUdFX1NJWkUpXG4tXHRcdHJldHVybjtcbitcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4rXHR1bnNpZ25lZCBpbnQgd2FudCwgaGF2ZSwgbmVlZCwgbiA9IDA7XG4gXG4gXHR3YW50ID0gbWluX3QodW5zaWduZWQgaW50LCBESVZfUk9VTkRfVVAodG90YWxfbGVuLCBQQUdFX1NJWkUpLFxuIFx0XHQgICAgIFBJUEVfUFJFQUxMT0NfTUFYKTtcbitcdC8qIFVubG9ja2VkIHJlYWQ7IHRoZSBwb29sIGlzIHJlZmlsbGVkIHVuZGVyIHRoZSBsb2NrIGJlbG93LiAqL1xuK1x0aGF2ZSA9IG1pbl90KHVuc2lnbmVkIGludCwgUkVBRF9PTkNFKHBpcGUtXHUwMDNlcHJlYWxsb2MuY291bnQpLCB3YW50KTtcbitcdG5lZWQgPSB3YW50IC0gaGF2ZTtcbitcbitcdGlmICghbmVlZCkge1xuK1x0XHRtdXRleF9sb2NrKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHR3aGlsZSAobiBcdTAwM2MgbmVlZCkge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3YW50OyBpKyspIHtcbi1cdFx0cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0hJR0hVU0VSIHwgX19HRlBfQUNDT1VOVCk7XG4gXHRcdGlmICghcGFnZSlcbiBcdFx0XHRicmVhaztcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnQrK10gPSBwYWdlO1xuK1x0XHRwYWdlc1tuKytdID0gcGFnZTtcbiBcdH1cbitcbitcdG11dGV4X2xvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4rXHR3aGlsZSAobiBcdTAwMjZcdTAwMjYgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2goXHUwMDI2cGlwZS1cdTAwM2VwcmVhbGxvYywgcGFnZXNbbiAtIDFdKSlcbitcdFx0bi0tO1xuK1xuK1x0LypcbitcdCAqIEp1c3QgZmx1c2ggYW55IGV4dHJhIHBhZ2UgdGhhdCBnb3QgYWZmZWN0ZWQgYnkgdGhlIFRPQ1RPVVxuK1x0ICogZWZmZWN0XG4rXHQgKi9cbitcdHdoaWxlIChuKVxuK1x0XHRwdXRfcGFnZShwYWdlc1stLW5dKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfcHJlYWxsb2NfcG9wKHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgKnByZWFsbG9jKVxuKy8qXG4rICogQ2FsbGVkIHdpdGggcGlwZS1cdTAwM2VtdXRleCBoZWxkLiBUcmltIHRoZSBwb29sIGRvd24gdG8gUElQRV9QUkVBTExPQ19LRUVQIHVuZGVyXG4rICogdGhlIGxvY2ssIGRyb3AgaXQsIHRoZW4gZnJlZSB0aGUgZXhjZXNzIG91dHNpZGUgdGhlIGNyaXRpY2FsIHNlY3Rpb24uXG4rICovXG4rc3RhdGljIHZvaWQgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG4ge1xuLVx0aWYgKCFwcmVhbGxvYy1cdTAwM2Vjb3VudClcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRzdHJ1Y3QgcGFnZSAqZXhjZXNzW1BJUEVfUFJFQUxMT0NfTUFYXTtcbitcdHVuc2lnbmVkIGludCBuZXhjZXNzID0gMDtcbiBcbi1cdHByZWFsbG9jLVx1MDAzZWNvdW50LS07XG4rXHR3aGlsZSAocGlwZS1cdTAwM2VwcmVhbGxvYy5jb3VudCBcdTAwM2UgUElQRV9QUkVBTExPQ19LRUVQKVxuK1x0XHRleGNlc3NbbmV4Y2VzcysrXSA9IGFub25fcGlwZV9wcmVhbGxvY19wb3AoXHUwMDI2cGlwZS1cdTAwM2VwcmVhbGxvYyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cGlwZS1cdTAwM2VtdXRleCk7XG4gXG4tXHRyZXR1cm4gcHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdO1xuK1x0d2hpbGUgKG5leGNlc3MpXG4rXHRcdHB1dF9wYWdlKGV4Y2Vzc1stLW5leGNlc3NdKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCBwYWdlICphbm9uX3BpcGVfZ2V0X3BhZ2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbitzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKVxuIHtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuLVx0LyogRHJhaW4gcHJlYWxsb2MgZmlyc3QgdG8ga2VlcCB0bXBfcGFnZVtdIGhvdCBmb3IgbGF0ZXIgc21hbGwgd3JpdGVzLiAqL1xuLVx0cGFnZSA9IGFub25fcGlwZV9wcmVhbGxvY19wb3AocHJlYWxsb2MpO1xuK1x0LyogRHJhaW4gdGhlIHByZWFsbG9jIHBvb2wgYmVmb3JlIGFsbG9jYXRpbmcuIENhbGxlZCB3aXRoIG11dGV4IGhlbGQuICovXG4rXHRwYWdlID0gYW5vbl9waXBlX3ByZWFsbG9jX3BvcChcdTAwMjZwaXBlLVx1MDAzZXByZWFsbG9jKTtcbiBcdGlmIChwYWdlKVxuIFx0XHRyZXR1cm4gcGFnZTtcbiBcbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpKyspIHtcbi1cdFx0aWYgKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pIHtcbi1cdFx0XHRwYWdlID0gcGlwZS1cdTAwM2V0bXBfcGFnZVtpXTtcbi1cdFx0XHRwaXBlLVx1MDAzZXRtcF9wYWdlW2ldID0gTlVMTDtcbi1cdFx0XHRyZXR1cm4gcGFnZTtcbi1cdFx0fVxuLVx0fVxuLVxuIFx0LyogRldJVzogVGhpcyBpcyBjYWxsZWQgd2l0aCBwaXBlLVx1MDAzZW11dGV4IGhlbGQgKi9cbiBcdHJldHVybiBhbGxvY19wYWdlKEdGUF9ISUdIVVNFUiB8IF9fR0ZQX0FDQ09VTlQpO1xuIH1cbkBAIC0xODcsNDggKzIwNywxMSBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmFub25fcGlwZV9nZXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIHN0YXRpYyB2b2lkIGFub25fcGlwZV9wdXRfcGFnZShzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSlcbiB7XG4tXHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxKSB7XG4tXHRcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpKyspIHtcbi1cdFx0XHRpZiAoIXBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pIHtcbi1cdFx0XHRcdHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0gPSBwYWdlO1xuLVx0XHRcdFx0cmV0dXJuO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVx0fVxuLVxuLVx0cHV0X3BhZ2UocGFnZSk7XG4tfVxuLVxuLS8qXG4tICogU3Rhc2ggbGVmdG92ZXIgcHJlYWxsb2MgcGFnZXMgaW4gdG1wX3BhZ2VbXSBzbyB0aGUgbmV4dCB3cml0ZSB0byB0aGlzXG4tICogcGlwZSBnZXRzIGEgaG90IHBhZ2Ugd2l0aG91dCBlbnRlcmluZyB0aGUgYWxsb2NhdG9yLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGFub25fcGlwZV9wcmVhbGxvYyAqcHJlYWxsb2MpXG4te1xuLVx0aW50IGksIGlkeDtcbi1cbi1cdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4rXHRpZiAocGFnZV9jb3VudChwYWdlKSA9PSAxIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGFub25fcGlwZV9wcmVhbGxvY19wdXNoKFx1MDAyNnBpcGUtXHUwMDNlcHJlYWxsb2MsIHBhZ2UpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHBpcGUtXHUwMDNldG1wX3BhZ2UpOyBpKyspIHtcbi1cdFx0aWYgKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGlmICghcHJlYWxsb2MtXHUwMDNlY291bnQpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRpZHggPSAtLXByZWFsbG9jLVx1MDAzZWNvdW50O1xuLVx0XHRwaXBlLVx1MDAzZXRtcF9wYWdlW2ldID0gcHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XTtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlcGFnZXNbaWR4XSA9IE5VTEw7XG4tXHR9XG4tfVxuLVxuLS8qIFJ1bnMgYWZ0ZXIgbXV0ZXhfdW5sb2NrKCkgdG8ga2VlcCBwdXRfcGFnZSgpIG91dCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbi4gKi9cbi1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfZnJlZV9wYWdlcyhzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYylcbi17XG4tXHR3aGlsZSAocHJlYWxsb2MtXHUwMDNlY291bnQpIHtcbi1cdFx0cHJlYWxsb2MtXHUwMDNlY291bnQtLTtcbi1cdFx0cHV0X3BhZ2UocHJlYWxsb2MtXHUwMDNlcGFnZXNbcHJlYWxsb2MtXHUwMDNlY291bnRdKTtcbi1cdH1cbitcdHB1dF9wYWdlKHBhZ2UpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhbm9uX3BpcGVfYnVmX3JlbGVhc2Uoc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSxcbkBAIC00ODUsNyArNDY4LDggQEAgYW5vbl9waXBlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKVxuIFx0fVxuIFx0aWYgKHBpcGVfaXNfZW1wdHkocGlwZSkpXG4gXHRcdHdha2VfbmV4dF9yZWFkZXIgPSBmYWxzZTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbitcdC8qIENvbnN1bWVkIGJ1ZmZlcnMgbWF5IGhhdmUgcmVmaWxsZWQgdGhlIHBvb2w7IHRyaW0gaXQgYW5kIHVubG9jay4gKi9cbitcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbiBcbiBcdGlmICh3YWtlX3dyaXRlcilcbiBcdFx0d2FrZV91cF9pbnRlcnJ1cHRpYmxlX3N5bmNfcG9sbChcdTAwMjZwaXBlLVx1MDAzZXdyX3dhaXQsIEVQT0xMT1VUIHwgRVBPTExXUk5PUk0pO1xuQEAgLTUyNCw3ICs1MDgsNiBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4ge1xuIFx0c3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLVx1MDAzZWtpX2ZpbHA7XG4gXHRzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4tXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHByZWFsbG9jO1xuIFx0dW5zaWduZWQgaW50IGhlYWQ7XG4gXHRzc2l6ZV90IHJldCA9IDA7XG4gXHRzaXplX3QgdG90YWxfbGVuID0gaW92X2l0ZXJfY291bnQoZnJvbSk7XG5AQCAtNTQ4LDkgKzUzMSw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdGlmICh1bmxpa2VseSh0b3RhbF9sZW4gPT0gMCkpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0YW5vbl9waXBlX2dldF9wYWdlX3ByZWFsbG9jKFx1MDAyNnByZWFsbG9jLCB0b3RhbF9sZW4pO1xuLVxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbitcdGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrKHBpcGUsIHRvdGFsX2xlbik7XG4gXG4gXHRpZiAoIXBpcGUtXHUwMDNlcmVhZGVycykge1xuIFx0XHRpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9TSUdOQUwpID09IDApXG5AQCAtNjA3LDcgKzU4OCw3IEBAIGFub25fcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSlcbiBcdFx0XHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdFx0XHRpbnQgY29waWVkO1xuIFxuLVx0XHRcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSwgXHUwMDI2cHJlYWxsb2MpO1xuK1x0XHRcdHBhZ2UgPSBhbm9uX3BpcGVfZ2V0X3BhZ2UocGlwZSk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KCFwYWdlKSkge1xuIFx0XHRcdFx0aWYgKCFyZXQpXG4gXHRcdFx0XHRcdHJldCA9IC1FTk9NRU07XG5AQCAtNjcxLDExICs2NTIsOSBAQCBhbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXG4gXHRcdHdha2VfbmV4dF93cml0ZXIgPSB0cnVlO1xuIFx0fVxuIG91dDpcbi1cdGFub25fcGlwZV9yZWZpbGxfdG1wX3BhZ2VzKHBpcGUsIFx1MDAyNnByZWFsbG9jKTtcbiBcdGlmIChwaXBlX2lzX2Z1bGwocGlwZSkpXG4gXHRcdHdha2VfbmV4dF93cml0ZXIgPSBmYWxzZTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaXBlLVx1MDAzZW11dGV4KTtcbi1cdGFub25fcGlwZV9mcmVlX3BhZ2VzKFx1MDAyNnByZWFsbG9jKTtcbitcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcbiBcbiBcdC8qXG4gXHQgKiBJZiB3ZSBkbyBkbyBhIHdha2V1cCBldmVudCwgd2UgZG8gYSAnc3luYycgd2FrZXVwLCBiZWNhdXNlIHdlXG5AQCAtOTU2LDEwICs5MzUsOCBAQCB2b2lkIGZyZWVfcGlwZV9pbmZvKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUpXG4gXHRpZiAocGlwZS1cdTAwM2V3YXRjaF9xdWV1ZSlcbiBcdFx0cHV0X3dhdGNoX3F1ZXVlKHBpcGUtXHUwMDNld2F0Y2hfcXVldWUpO1xuICNlbmRpZlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwaXBlLVx1MDAzZXRtcF9wYWdlKTsgaSsrKSB7XG4tXHRcdGlmIChwaXBlLVx1MDAzZXRtcF9wYWdlW2ldKVxuLVx0XHRcdF9fZnJlZV9wYWdlKHBpcGUtXHUwMDNldG1wX3BhZ2VbaV0pO1xuLVx0fVxuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcGlwZS1cdTAwM2VwcmVhbGxvYy5jb3VudDsgaSsrKVxuK1x0XHRfX2ZyZWVfcGFnZShwaXBlLVx1MDAzZXByZWFsbG9jLnBhZ2VzW2ldKTtcbiBcdGtmcmVlKHBpcGUtXHUwMDNlYnVmcyk7XG4gXHRrZnJlZShwaXBlKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmhcbmluZGV4IDdmNmE5MmFjOTcwNDc4Li40ZTJlNGY0NGZiZTVmNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmhcbkBAIC0xNCw2ICsxNCw5IEBAXG4gI2RlZmluZSBQSVBFX0JVRl9GTEFHX0xPU1NcdDB4NDBcdC8qIE1lc3NhZ2UgbG9zcyBoYXBwZW5lZCBhZnRlciB0aGlzIGJ1ZmZlciAqL1xuICNlbmRpZlxuIFxuKyNkZWZpbmUgUElQRV9QUkVBTExPQ19NQVhcdDhcdC8qIG1heCBwYWdlcyBpbiBwcmVhbGxvYyBwb29sICovXG4rI2RlZmluZSBQSVBFX1BSRUFMTE9DX0tFRVBcdDJcdC8qIGtlZXAgYXQgbGVhc3QgdGhpcyBtYW55IGFmdGVyIHRyaW0gKi9cbitcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfYnVmZmVyIC0gYSBsaW51eCBrZXJuZWwgcGlwZSBidWZmZXJcbiAgKlx0QHBhZ2U6IHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlIGRhdGEgZm9yIHRoZSBwaXBlIGJ1ZmZlclxuQEAgLTU4LDYgKzYxLDIwIEBAIHVuaW9uIHBpcGVfaW5kZXgge1xuIFx0fTtcbiB9O1xuIFxuKy8qKlxuKyAqXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIC0gcGVyLXBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHBvb2xcbisgKlx0QHBhZ2VzOiBhcnJheSBvZiBjYWNoZWQgcGFnZXMgKHBvb2wpXG4rICpcdEBjb3VudDogbnVtYmVyIG9mIHBhZ2VzIGN1cnJlbnRseSBpbiB0aGUgcG9vbFxuKyAqXG4rICogRWFjaCBwaXBlIGtlZXBzIGEgc21hbGwgYm91bmRlZCBwb29sIG9mIHByZWFsbG9jYXRlZCBwYWdlcyB0byByZWR1Y2VcbisgKiBhbGxvY2F0aW9uIG92ZXJoZWFkIGR1cmluZyB3cml0ZXMuIFRoZSBwb29sIGlzIGJvdW5kZWQgYXQgUElQRV9QUkVBTExPQ19NQVhcbisgKiBhbmQgdHJpbW1lZCBkb3duIHRvIFBJUEVfUFJFQUxMT0NfS0VFUCBhZnRlciBhIHdyaXRlIGNvbXBsZXRlcy5cbisgKi9cbitzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHtcbitcdHN0cnVjdCBwYWdlICpwYWdlc1tQSVBFX1BSRUFMTE9DX01BWF07XG4rXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4rfTtcbitcbiAvKipcbiAgKlx0c3RydWN0IHBpcGVfaW5vZGVfaW5mbyAtIGEgbGludXgga2VybmVsIHBpcGVcbiAgKlx0QG11dGV4OiBtdXRleCBwcm90ZWN0aW5nIHRoZSB3aG9sZSB0aGluZ1xuQEAgLTY4LDcgKzg1LDcgQEAgdW5pb24gcGlwZV9pbmRleCB7XG4gICpcdEBtYXhfdXNhZ2U6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cyB0aGF0IG1heSBiZSB1c2VkIGluIHRoZSByaW5nXG4gICpcdEByaW5nX3NpemU6IHRvdGFsIG51bWJlciBvZiBidWZmZXJzIChzaG91bGQgYmUgYSBwb3dlciBvZiAyKVxuICAqXHRAbnJfYWNjb3VudGVkOiBUaGUgYW1vdW50IHRoaXMgcGlwZSBhY2NvdW50cyBmb3IgaW4gdXNlci1cdTAwM2VwaXBlX2J1ZnNcbi0gKlx0QHRtcF9wYWdlOiBjYWNoZWQgcmVsZWFzZWQgcGFnZVxuKyAqXHRAcHJlYWxsb2M6IHBlci1waXBlIHBhZ2UgcHJlYWxsb2NhdGlvbiBwb29sXG4gICpcdEByZWFkZXJzOiBudW1iZXIgb2YgY3VycmVudCByZWFkZXJzIG9mIHRoaXMgcGlwZVxuICAqXHRAd3JpdGVyczogbnVtYmVyIG9mIGN1cnJlbnQgd3JpdGVycyBvZiB0aGlzIHBpcGVcbiAgKlx0QGZpbGVzOiBudW1iZXIgb2Ygc3RydWN0IGZpbGUgcmVmZXJyaW5nIHRoaXMgcGlwZSAocHJvdGVjdGVkIGJ5IC1cdTAwM2VpX2xvY2spXG5AQCAtOTksNyArMTE2LDcgQEAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyB7XG4gI2lmZGVmIENPTkZJR19XQVRDSF9RVUVVRVxuIFx0Ym9vbCBub3RlX2xvc3M7XG4gI2VuZGlmXG4tXHRzdHJ1Y3QgcGFnZSAqdG1wX3BhZ2VbMl07XG4rXHRzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jIHByZWFsbG9jO1xuIFx0c3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY19yZWFkZXJzO1xuIFx0c3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luY193cml0ZXJzO1xuIFx0c3RydWN0IHBpcGVfYnVmZmVyICpidWZzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MTAuNTY3OTEzODEyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODcwOTI0MDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBpcGUgUGFnZSBQcmVhbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgbG9va3MgbGlrZSBpdCdzIHRvdWNoaW5nIGBmcy9waXBlLmNgIGFuZCBgaW5jbHVkZS9saW51eC9waXBlX2ZzX2kuaGAuIFJpZ2h0IGF3YXksIEkgc2VlIGl0J3MgYWJvdXQgY2hhbmdpbmcgaG93IHBpcGUgcGFnZSBwcmVhbGxvY2F0aW9uIHdvcmtzLiBUaGlzIG1lYW5zIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBob3cgcGlwZXMgZnVuY3Rpb24gaW4gdGhlIGtlcm5lbCwgYW5kIHRoYXQncyBhIHJlZCBmbGFnIOKAkyBhIGdvb2QgcmVkIGZsYWcgZm9yIGZ1enppbmcsIHRoYXQgaXMuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgd2hvbGUgbmV3IHNldCBvZiBmdW5jdGlvbnM6IGBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja2AsIGBhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tgLCBgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hgLCBhbmQgYGFub25fcGlwZV9wcmVhbGxvY19wb3BgLCBhbmQgYWxzbyBtb2RpZmllcyBleGlzdGluZyBvbmVzIGxpa2UgYGFub25fcGlwZV9yZWFkYCwgYGFub25fcGlwZV93cml0ZWAsIGFuZCBgZnJlZV9waXBlX2luZm9gLiBJdCdzIGFsc28gY2hhbmdpbmcgdGhlIGBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvYCB0byB1c2UgdGhpcyBuZXcgYHN0cnVjdCBhbm9uX3BpcGVfcHJlYWxsb2MgcHJlYWxsb2NgIGluc3RlYWQgb2YgdGhhdCBvbGQgYHN0cnVjdCBwYWdlICp0bXBfcGFnZVsyXWAuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgZ290IHBvdGVudGlhbCBmb3IgaW50ZXJlc3RpbmcgYmVoYXZpb3IsIHNvIGZ1enppbmcgaXMgYSAqbXVzdCouXG5cbkknbGwgcXVpY2tseSBjaGVjayBmb3IgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWdzLiBMZXQncyBzZWUuLi4gYGZzL3BpcGUuY2AgaXMgYWx3YXlzIGNvbXBpbGVkLiBQZXJmZWN0LCBubyBkZXBlbmRlbmNpZXMgdGhlcmUuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgb3IgXCJmb2N1cyBzeW1ib2xzXCIgZm9yIGZ1enppbmcuICBJJ3ZlIGdvdCBhIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBhcyBiZWxvdzpcblxuLSBgYW5vbl9waXBlX3ByZWFsbG9jX3BvcGBcbi0gYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYFxuLSBgYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tgXG4tIGBhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tgXG4tIGBhbm9uX3BpcGVfZ2V0X3BhZ2VgXG4tIGBhbm9uX3BpcGVfcHV0X3BhZ2VgXG4tIGBhbm9uX3BpcGVfYnVmX3JlbGVhc2VgXG4tIGBhbm9uX3BpcGVfcmVhZGBcbi0gYGFub25fcGlwZV93cml0ZWBcbi0gYGZyZWVfcGlwZV9pbmZvYFxuXG5gYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhcmUgaW4gdGhlIGhvdCBwYXRoLCBzbyB0aG9zZSBhcmUgaGlnaCBwcmlvcml0eSwgb2J2aW91c2x5LiAgYGFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrYCBhbmQgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcyBhcyB3ZWxsIOKAkyBsaWtlbHkgdG8gYmUgaW52b2x2ZWQgaW4gdGhlIGNvcmUgcHJlYWxsb2NhdGlvbiBsb2dpYy4gIGBhbm9uX3BpcGVfcHJlYWxsb2NfcG9wYCBhbmQgYGFub25fcGlwZV9wcmVhbGxvY19wdXNoYCBhcmUgc3RhdGljLCBidXQgbWlnaHQgYmUgaW5saW5lZC4gSSBzaG91bGQga2VlcCB0aGVtIG9uIHRoZSBsaXN0IHJlZ2FyZGxlc3MuICBIb2xkIG9uLi4uIGFyZSBgYW5vbl9waXBlX3JlYWRgIGFuZCBgYW5vbl9waXBlX3dyaXRlYCBhY3R1YWxseSBzdGF0aWMgZnVuY3Rpb25zIGluIGBmcy9waXBlLmNgPyBUaGV5IG1pZ2h0IGJlIGV4cG9ydGVkIG9yIGFzc2lnbmVkIHRvIGBmaWxlX29wZXJhdGlvbnNgLiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQ7IEknbGwgY2hlY2sgYGZzL3BpcGUuY2AganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Mzk0LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMTA6MDM6MTkuMjc3MTU3MzkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTI1NTAyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcGlwZS5jPTEyNT1zdGF0aWMgYm9vbCBhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaChzdHJ1Y3QgYW5vbl9waXBlX3ByZWFsbG9jICpwcmVhbGxvYyxcXG4tLVxcbmZzL3BpcGUuYy0xNDAtICovXFxuZnMvcGlwZS5jOjE0MTpzdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgdG90YWxfbGVuKVxcbmZzL3BpcGUuYy0xNDIte1xcbi0tXFxuZnMvcGlwZS5jPTUwNz1hbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9waXBlLmMtNTMzLVxcbmZzL3BpcGUuYzo1MzQ6XFx0YW5vbl9waXBlX3ByZWZpbGxfYW5kX2xvY2socGlwZSwgdG90YWxfbGVuKTtcXG5mcy9waXBlLmMtNTM1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzoyNC4xMjk3MTg1MzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY0NjQ5MTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipBbmFseXppbmcgYGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9ja2AqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnRyaWNhY2llcyBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQncyBzZWUuLi4gaXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgaGFuZGxpbmcgdGhlIHBvb2wgdHJpbW1pbmcgYW5kIHVubG9ja2luZyBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYW5vbnltb3VzIHBpcGUgbWVjaGFuaXNtLiBNeSB1bmRlcnN0YW5kaW5nIGlzIGl0IGRpcmVjdGx5IGRlYWxzIHdpdGggcmVzb3VyY2UgbWFuYWdlbWVudC4gSSB3YW50IHRvIGNoZWNrIGhvdyBlZmZpY2llbnRseSBpdCBoYW5kbGVzIHRoZSByZW1vdmFsIG9mIHVudXNlZCBzZWdtZW50cywgbWFraW5nIHN1cmUgaXQgZG9lc27igJl0IGludHJvZHVjZSB1bmR1ZSBmcmFnbWVudGF0aW9uIG9yIGJsb2NrIHByb2Nlc3NlcyB1bm5lY2Vzc2FyaWx5IGR1cmluZyB1bmxvY2tpbmcuIFRoZSBsb2NraW5nIHByb3RvY29sIGluIHRoaXMgcGFydCBpcyBwYXJ0aWN1bGFybHkgcHJvbmUgdG8gY29udGVudGlvbiwgc28gSSB3aWxsIHNjcnV0aW5pemUgdGhhdCBhcmVhIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gQW55IHJlY2VudCBjaGFuZ2VzLCBwYXRjaGVzLCBvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyB0aGF0IGhhdmUgdG91Y2hlZCB0aGlzIGZ1bmN0aW9uPyBJJ2xsIHJldmlldyBhbnkgcmVsZXZhbnQgdGVzdCBjYXNlcywgYmVuY2htYXJrcywgYW5kIHBlcmhhcHMgc29tZSBpbnN0cnVtZW50YXRpb24gZGF0YSwgaWYgaXQgZXhpc3RzLCB0byBpZGVudGlmeSBpZiBhbnkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgb3IgcG90ZW50aWFsIGlzc3Vlcy4gR2l2ZW4gdGhlIGNyaXRpY2FsIG5hdHVyZSBvZiBwaXBlcyBpbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSwgSSB3YW50IHRvIGNvbmZpcm0gdGhhdCB0aGlzIGlzIG9wZXJhdGluZyBvcHRpbWFsbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3MTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzoyNy42OTQzNzAxNjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMzI1Nzk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcGlwZS5jPTE0MT1zdGF0aWMgdm9pZCBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgdG90YWxfbGVuKVxcbi0tXFxuZnMvcGlwZS5jLTE4MC0gKi9cXG5mcy9waXBlLmM6MTgxOnN0YXRpYyB2b2lkIGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlKVxcbmZzL3BpcGUuYy0xODIte1xcbi0tXFxuZnMvcGlwZS5jPTM0ND1hbm9uX3BpcGVfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXFxuLS1cXG5mcy9waXBlLmMtNDcxLVxcdC8qIENvbnN1bWVkIGJ1ZmZlcnMgbWF5IGhhdmUgcmVmaWxsZWQgdGhlIHBvb2w7IHRyaW0gaXQgYW5kIHVubG9jay4gKi9cXG5mcy9waXBlLmM6NDcyOlxcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG5mcy9waXBlLmMtNDczLVxcbi0tXFxuZnMvcGlwZS5jPTUwNz1hbm9uX3BpcGVfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9waXBlLmMtNjU2LVxcdFxcdHdha2VfbmV4dF93cml0ZXIgPSBmYWxzZTtcXG5mcy9waXBlLmM6NjU3OlxcdGFub25fcGlwZV90cmltX3Bvb2xfYW5kX3VubG9jayhwaXBlKTtcXG5mcy9waXBlLmMtNjU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQxMDowMzozMy4xMTc2NDI3OTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Mzc0NTM5NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEZ1enppbmcgU3RyYXRlZ3k6IFBpcGUgUGFnZSBQcmVhbGxvY2F0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBmdXp6aW5nIHRoaXMgcGlwZSBwYWdlIHByZWFsbG9jYXRpb24gcGF0Y2guIEkga25vdyB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIEkvTyBhcmUgYGFub25fcGlwZV9yZWFkYCBhbmQgYGFub25fcGlwZV93cml0ZWAg4oCTIHByb2JhYmx5IGhvdCBwYXRocywgYnV0IHRoZXkncmUgbGlrZWx5IGdvaW5nIHRvIGdldCB0ZXN0ZWQgZXh0ZW5zaXZlbHkgYW55d2F5LiBUaGlzIHBhdGNoJ3Mgc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBteSBwcmltYXJ5IHRhcmdldHMsIGFuZCBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGVtLlxuXG5JJ3ZlIGdvdCB0aGUgbGlzdDpcblxuKiAgIGBhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja2BcbiogICBgYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrYFxuKiAgIGBhbm9uX3BpcGVfZ2V0X3BhZ2VgXG4qICAgYGFub25fcGlwZV9wdXRfcGFnZWBcbiogICBgYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hgXG4qICAgYGFub25fcGlwZV9wcmVhbGxvY19wb3BgXG5cblRob3NlIGFyZSB0aGUga2V5IHN5bWJvbHMuIEknbSBub3Qgc2VlaW5nIGFueSBjb25maWcgZGVwZW5kZW5jaWVzIGhlcmUg4oCTIHBpcGVzIGFyZSBhbHdheXMgZW5hYmxlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGludm9sdmVzIGEgbmV3IHByZWFsbG9jYXRpb24gcG9vbCBhbmQgbW9kaWZpZWQgcGFnZSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBpbiB0aGUgcGlwZSBjb2RlLiBUaGlzIHNtZWxscyBsaWtlIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBtZW1vcnkgY29ycnVwdGlvbiDigJMgbGVha3MsIFVBRnMsIHJhY2VzLiBHb3R0YSBoYW1tZXIgdGhvc2UhXG5cbkp1c3QgZG91YmxlIGNoZWNraW5nLCB0aGVyZSBpcyBgZnJlZV9waXBlX2luZm9gIGFsc28gbW9kaWZpZWQsIGJ1dCBpdCdzIHByZXR0eSBnZW5lcmljLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoaXMgZGlyZWN0aW9uLiBJJ2xsIGNhbGwgc2V0LXJlc3VsdHMgbm93IGFuZCBtb3ZlIGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTYsIk91dHB1dFRva2VucyI6MTU5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDEwOjAzOjQwLjQ5MjE4NTIxOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbm9uX3BpcGVfcHJlZmlsbF9hbmRfbG9ja1wiLFxuICAgIFwiYW5vbl9waXBlX3RyaW1fcG9vbF9hbmRfdW5sb2NrXCIsXG4gICAgXCJhbm9uX3BpcGVfZ2V0X3BhZ2VcIixcbiAgICBcImFub25fcGlwZV9wdXRfcGFnZVwiLFxuICAgIFwiYW5vbl9waXBlX3ByZWFsbG9jX3B1c2hcIixcbiAgICBcImFub25fcGlwZV9wcmVhbGxvY19wb3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgcGFnZSBwcmVhbGxvY2F0aW9uIGxvZ2ljIGZvciBwaXBlcywgaW50cm9kdWNpbmcgYSBuZXcgcHJlYWxsb2NhdGlvbiBwb29sIGFuZCBjaGFuZ2luZyBob3cgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQgZHVyaW5nIHBpcGUgcmVhZHMgYW5kIHdyaXRlcy4gVGhpcyBpcyBhIGNvcmUgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlcywgb3IgcmFjZSBjb25kaXRpb25zIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFub25fcGlwZV9wcmVmaWxsX2FuZF9sb2NrXCIsXG4gICAgXCJhbm9uX3BpcGVfdHJpbV9wb29sX2FuZF91bmxvY2tcIixcbiAgICBcImFub25fcGlwZV9nZXRfcGFnZVwiLFxuICAgIFwiYW5vbl9waXBlX3B1dF9wYWdlXCIsXG4gICAgXCJhbm9uX3BpcGVfcHJlYWxsb2NfcHVzaFwiLFxuICAgIFwiYW5vbl9waXBlX3ByZWFsbG9jX3BvcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBwYWdlIHByZWFsbG9jYXRpb24gbG9naWMgZm9yIHBpcGVzLCBpbnRyb2R1Y2luZyBhIG5ldyBwcmVhbGxvY2F0aW9uIHBvb2wgYW5kIGNoYW5naW5nIGhvdyBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCBkdXJpbmcgcGlwZSByZWFkcyBhbmQgd3JpdGVzLiBUaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWVzLCBvciByYWNlIGNvbmRpdGlvbnMgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[1] Phase: Succeeded StartedAt: 2026-07-10 10:03:52 +0000 UTC FinishedAt: 2026-07-10 10:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 10:03:52 +0000 UTC FinishedAt: 2026-07-10 10:03:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2] Phase: Succeeded StartedAt: 2026-07-10 10:03:52 +0000 UTC FinishedAt: 2026-07-10 14:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 10:03:53 +0000 UTC FinishedAt: 2026-07-10 14:16:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 10:03:53 +0000 UTC FinishedAt: 2026-07-10 10:04:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 10:03:53 +0000 UTC FinishedAt: 2026-07-10 10:03:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-3732474271/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 10:04:05 +0000 UTC FinishedAt: 2026-07-10 10:37:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 10:04:05 +0000 UTC FinishedAt: 2026-07-10 10:37:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c08b2fb7-1a2d-427d-9a1b-8e30f603ad3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-3732474271/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "caeea319-5c7a-40a1-9960-79a7c2d61ee9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-2680257445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 10:04:05 +0000 UTC FinishedAt: 2026-07-10 10:36:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c08b2fb7-1a2d-427d-9a1b-8e30f603ad3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-3732474271/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "caeea319-5c7a-40a1-9960-79a7c2d61ee9", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-2680257445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-10 10:37:23 +0000 UTC FinishedAt: 2026-07-10 10:37:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-10 10:37:23 +0000 UTC FinishedAt: 2026-07-10 10:37:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-10 10:37:23 +0000 UTC FinishedAt: 2026-07-10 10:37:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-10 10:37:23 +0000 UTC FinishedAt: 2026-07-10 10:37:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-3949638958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-10 10:37:33 +0000 UTC FinishedAt: 2026-07-10 10:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-10 10:37:33 +0000 UTC FinishedAt: 2026-07-10 10:39:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*caeea319-5c7a-40a1-9960-79a7c2d61ee9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-2680257445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-10 10:39:46 +0000 UTC FinishedAt: 2026-07-10 10:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-10 10:39:46 +0000 UTC FinishedAt: 2026-07-10 10:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-10 10:39:46 +0000 UTC FinishedAt: 2026-07-10 11:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-10 10:39:46 +0000 UTC FinishedAt: 2026-07-10 11:12:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c08b2fb7-1a2d-427d-9a1b-8e30f603ad3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-3949638958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "13083053-a848-4e78-baeb-15042166fb1f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-195259458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-10 10:39:46 +0000 UTC FinishedAt: 2026-07-10 11:12:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c08b2fb7-1a2d-427d-9a1b-8e30f603ad3b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-3949638958/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "13083053-a848-4e78-baeb-15042166fb1f", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-195259458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-10 11:12:13 +0000 UTC FinishedAt: 2026-07-10 11:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-10 11:12:13 +0000 UTC FinishedAt: 2026-07-10 11:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-10 11:12:13 +0000 UTC FinishedAt: 2026-07-10 11:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-10 11:12:13 +0000 UTC FinishedAt: 2026-07-10 11:14:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13083053-a848-4e78-baeb-15042166fb1f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-195259458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 14:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 14:16:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*caeea319-5c7a-40a1-9960-79a7c2d61ee9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13083053-a848-4e78-baeb-15042166fb1f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-2680257445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-195259458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 11:14:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 11:14:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-1227458771/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 11:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 11:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-10 11:14:47 +0000 UTC FinishedAt: 2026-07-10 11:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-10 11:14:57 +0000 UTC FinishedAt: 2026-07-10 14:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbchxp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["anon_pipe_prefill_and_lock","anon_pipe_trim_pool_and_unlock","anon_pipe_get_page","anon_pipe_put_page","anon_pipe_prealloc_push","anon_pipe_prealloc_pop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a635d6748234582ea287c5ffeae28b9b23f91c7e","config_name":"upstream-apparmor-kasan.config","series_id":"3ec24a07-bd99-428a-bba1-8b19690f4209","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-10 11:14:57 +0000 UTC FinishedAt: 2026-07-10 14:16:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*caeea319-5c7a-40a1-9960-79a7c2d61ee9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*13083053-a848-4e78-baeb-15042166fb1f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-2680257445/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-build-action-195259458/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbchxp/series-workflowbchxp-convert-artifact-1227458771/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}