Name: series-workflowcp2xv Phase: Succeeded StartedAt: 2026-07-30 20:20:41 +0000 UTC FinishedAt: 2026-07-30 22:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[0] Phase: Succeeded StartedAt: 2026-07-30 20:20:41 +0000 UTC FinishedAt: 2026-07-30 20:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 20:20:41 +0000 UTC FinishedAt: 2026-07-30 20:38:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "05c09c9c8a79d5539fef30d42e732eba90a15dcf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "05c09c9c8a79d5539fef30d42e732eba90a15dcf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "4ce9225d-e3fd-440a-98c3-54c5accf0e88" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_edit_dir_remove", "afs_dir_find_block", "afs_dir_search_bucket" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9maW5kX2Jsb2NrJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfc2VhcmNoX2J1Y2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS11bm1hcCBidWcgaW4gQUZTIGRpcmVjdG9yeSBlZGl0aW5nIChhZnNfZWRpdF9kaXJfcmVtb3ZlKSBieSBpbnRyb2R1Y2luZyBhIGhlbHBlciBhZnNfZGlyX2VuZF9pdGVyIHRoYXQgc2FmZWx5IHVubWFwcyB0aGUgYmxvY2sgYW5kIGNsZWFycyB0aGUgcG9pbnRlciwgcmVwbGFjaW5nIG1hbnVhbCBrdW5tYXBfbG9jYWwgY2FsbHMgdGhhdCBjb3VsZCBsZWFkIHRvIGRvdWJsZS11bm1hcHBpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0M2ZmM2Q3NDNjNTExYjViYWMyNDIxYWEyMDRlNjkwZjdjMTY1NTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6Mzg6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfZWRpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX2VkaXQuY1xuQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiBcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiBcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4tXHRcdGdvdG8gZXJyb3JfdW5tYXA7XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcbiBcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCYjMzk7cyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG5AQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCYjMzQ7JWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcJiMzNDssXG4gXHRcdFx0XHR2bm9kZS1cdTAwM2VmaWQudmlkLCB2bm9kZS1cdTAwM2VmaWQudm5vZGUsIHZub2RlLVx1MDAzZWZpZC51bmlxdWUsXG4gXHRcdFx0XHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxuQEAgLTQ5Myw3ICYjNDM7NDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICYjNDM7NTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdF9kZWJ1ZyhcJiMzNDtSZW1vdmUgJXMgZnJvbSAldVsldV1cJiMzNDssIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcik7XG4gXHRrdW5tYXBfbG9jYWwobWV0YSk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Li4xMWViZGZmZmNiMWQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuQEAgLTc1LDEwICYjNDM7NzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxuIFxuIFx0X2VudGVyKFwmIzM0OyV6eCwlZFwmIzM0OywgYmxvY2ssIHNsb3QpO1xuIFxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbiYjNDM7XHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFxuIFx0aWYgKGR2bm9kZS1cdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcdTAwM2MgYmxlbmQpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC0xNzMsMTIgJiM0MzsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFxuIFx0cmV0ID0gLUVOT0VOVDtcbiBmb3VuZDpcbi1cdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4tXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbi1cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4tXHR9XG4tXG4gYmFkOlxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXHRpZiAocmV0ID09IC1FU1RBTEUpXG4gXHRcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7LAogICAgJiMzNDthZnNfZGlyX3NlYXJjaF9idWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZyAoYWZzX2VkaXRfZGlyX3JlbW92ZSkgYnkgaW50cm9kdWNpbmcgYSBoZWxwZXIgYWZzX2Rpcl9lbmRfaXRlciB0aGF0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIHJlcGxhY2luZyBtYW51YWwga3VubWFwX2xvY2FsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byBkb3VibGUtdW5tYXBwaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDNmZjNkNzQzYzUxMWI1YmFjMjQyMWFhMjA0ZTY5MGY3YzE2NTUxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDIwOjM4OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuYwppbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyX2VkaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX2VkaXQuYwpAQCAtNDQyLDcgJiM0Mzs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi8KIAlkZSA9ICZhbXA7YmxvY2stJmd0O2RpcmVudHNbc2xvdF07CiAJaWYgKGRlLSZndDt1LnZhbGlkICE9IDEpCi0JCWdvdG8gZXJyb3JfdW5tYXA7CiYjNDM7CQlnb3RvIGVycm9yOwogCiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsCiAJCQkgICBudG9obChkZS0mZ3Q7dS52bm9kZSksIG50b2hsKGRlLSZndDt1LnVuaXF1ZSksCkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi8KIAluZXh0ID0gZGUtJmd0O3UuaGFzaF9uZXh0OwogCW1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTsKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCiAJLyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLSZndDtwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZAogCSAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQmIzM5O3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LgpAQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCXBkZSA9ICZhbXA7cGJsb2NrLSZndDtkaXJlbnRzW3BzXTsKIAkJcHJldl9uZXh0ID0gcGRlLSZndDt1Lmhhc2hfbmV4dDsKIAkJaWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHsKLQkJCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCQkJcHJfd2FybigmIzM0OyVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzJiMzNDssCiAJCQkJdm5vZGUtJmd0O2ZpZC52aWQsIHZub2RlLSZndDtmaWQudm5vZGUsIHZub2RlLSZndDtmaWQudW5pcXVlLAogCQkJCWl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksCkBAIC00OTMsNyAmIzQzOzQ5MSw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJcGRlLSZndDt1Lmhhc2hfbmV4dCA9IG5leHQ7Ci0JCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCX0KIAogCW5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlKTsKQEAgLTUwMywxOCAmIzQzOzUwMCwxNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJX2RlYnVnKCYjMzQ7UmVtb3ZlICVzIGZyb20gJXVbJXVdJiMzNDssIG5hbWUtJmd0O25hbWUsIGIsIHNsb3QpOwogCiBvdXRfdW5tYXA6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoJmFtcDtpdGVyKTsKIAlrdW5tYXBfbG9jYWwobWV0YSk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogCXJldHVybjsKIAogYWxyZWFkeV9pbnZhbGlkYXRlZDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLAogCQkJICAgMCwgMCwgMCwgMCwgbmFtZS0mZ3Q7bmFtZSk7CiAJZ290byBvdXRfdW5tYXA7CiAKLWVycm9yX3VubWFwOgotCWt1bm1hcF9sb2NhbChibG9jayk7CiBlcnJvcjoKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvciwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKaW5kZXggMTA0NDExYzA2OTJmNS4uMTFlYmRmZmZjYjFkMyAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX3NlYXJjaC5jCkBAIC03NSwxMCAmIzQzOzc1LDcgQEAgdW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmwKIAogCV9lbnRlcigmIzM0OyV6eCwlZCYjMzQ7LCBibG9jaywgc2xvdCk7CiAKLQlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKLQkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKLQkJaXRlci0mZ3Q7YmxvY2sgPSBOVUxMOwotCX0KJiM0MzsJYWZzX2Rpcl9lbmRfaXRlcihpdGVyKTsKIAogCWlmIChkdm5vZGUtJmd0O2RpcmVjdG9yeV9zaXplICZsdDsgYmxlbmQpCiAJCWdvdG8gZmFpbDsKQEAgLTE3MywxMiAmIzQzOzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAKIAlyZXQgPSAtRU5PRU5UOwogZm91bmQ6Ci0JaWYgKGl0ZXItJmd0O2Jsb2NrKSB7Ci0JCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7Ci0JCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKLQl9Ci0KIGJhZDoKJiM0MzsJYWZzX2Rpcl9lbmRfaXRlcihpdGVyKTsKIAlpZiAocmV0ID09IC1FU1RBTEUpCiAJCWFmc19pbnZhbGlkYXRlX2RpcihpdGVyLSZndDtkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTEzMyw2ICYjNDM7MTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCSAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpCiYjNDM7ewomIzQzOwlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKJiM0MzsJCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7CiYjNDM7CQlpdGVyLSZndDtibG9jayA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogZGlyX3NpbGx5LmMKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIEFGUyBEaXJlY3RvcnkgSXRlcmF0aW9uIENsZWFudXAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYSBjbGVhbi11cCBvZiBzb21lIEFGUyBkaXJlY3RvcnkgaXRlcmF0aW9uIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEl0IGFwcGVhcnMgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBhZnNfZGlyX2VuZF9pdGVyYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gbmVhdGx5IHVubWFwIHRoZSBgaXRlci0mZ3Q7YmxvY2tgIGFuZCB0aGVuIG51bGxpZnkgdGhlIHBvaW50ZXIuIFRoZSBiZW5lZml0PyBJdCBzZWVtcyB3ZSYjMzk7cmUgY2VudHJhbGl6aW5nIHRoaXMga2luZCBvZiB1bm1hcHBpbmcgb3BlcmF0aW9uLgoKR29vZCwgZ29vZC4gVGhleSBhcmUgYmFzaWNhbGx5IHJlcGxhY2luZyB0aG9zZSBtYW51YWwgYGt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jaylgIGNhbGxzIHdpdGggdGhlIG5ldyBoZWxwZXIuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIG1haW50YWluYWJpbGl0eSBzdGFuZHBvaW50LiBGZXdlciBwbGFjZXMgdG8gZ2V0IGl0IHdyb25nLiBOb3csIGluIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCwgSSBzZWUgdGhleSYjMzk7dmUgcmVtb3ZlZCBhIGJ1bmNoIG9mIHRoZSBga3VubWFwX2xvY2FsKGJsb2NrKWAgYW5kIGBrdW5tYXBfbG9jYWwocGJsb2NrKWAgY2FsbHMsIGFuZCB0aGV5JiMzOTtyZSByZWx5aW5nIG9uIGBhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcilgIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBpcyBsYWJlbGVkIGFzIGBvdXRfdW5tYXBgLgoKV2FpdCBhIG1pbnV0ZSwgYGJsb2NrYCBhbmQgYHBibG9ja2AuLi4gd2VyZW4mIzM5O3QgdGhvc2UgbWFwcGVkIGJ5IGBhZnNfZGlyX2ZpbmRfYmxvY2tgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBkcmlsbCBkb3duIGludG8gYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGFuZCBzZWUgaG93IHRob3NlIGJsb2NrcyBhcmUgaGFuZGxlZC4gVGltZSB0byBicmluZyB1cCBteSB0cnVzdGVkIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgIHRvb2wgYW5kIGNoZWNrIGBmcy9hZnMvZGlyX2VkaXQuY2AgYXJvdW5kIHRoZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgZnVuY3Rpb24gdG8gY2xhcmlmeSB0aGUgbWFwcGluZyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9kaXJfZWRpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0XHRcdHJldHVybjtcbiA0MjE6XHRcbiA0MjI6XHRcdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xuIDQyMzpcdFx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgXHUwMDI2ZmlkKTtcbiA0MjQ6XHRcdGlmIChmb3VuZCBcdTAwM2MgMCkge1xuIDQyNTpcdFx0XHQvKiBEaWRuJiMzOTt0IGZpbmQgdGhlIGRpcmVudCB0byBjbG9iYmVyLiAgUmUtZG93bmxvYWQuICovXG4gNDI2Olx0XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX25vZW50LFxuIDQyNzpcdFx0XHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbiA0Mjg6XHRcdFx0YWZzX2ludmFsaWRhdGVfZGlyKHZub2RlLCBhZnNfZGlyX2ludmFsaWRfZWRpdF9yZW1fd3JvbmdfbmFtZSk7XG4gNDI5Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xuIDQzMDpcdFx0fVxuIDQzMTpcdFxuIDQzMjpcdFx0ZW50cnkgPSBmb3VuZDtcbiA0MzM6XHRcdGIgICAgPSBlbnRyeSAvIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xuIDQzNDpcdFx0c2xvdCA9IGVudHJ5ICUgQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XG4gNDM1Olx0XG4gNDM2Olx0XHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBiKTtcbiA0Mzc6XHRcdGlmICghYmxvY2spXG4gNDM4Olx0XHRcdGdvdG8gZXJyb3I7XG4gNDM5Olx0XHRpZiAoIXRlc3RfYml0KEFGU19WTk9ERV9ESVJfVkFMSUQsIFx1MDAyNnZub2RlLVx1MDAzZWZsYWdzKSlcbiA0NDA6XHRcdFx0Z290byBhbHJlYWR5X2ludmFsaWRhdGVkO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiA0NDM6XHRcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiA0NDQ6XHRcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4gNDQ1Olx0XHRcdGdvdG8gZXJyb3I7XG4gNDQ2Olx0XG4gNDQ3Olx0XHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcbiA0NDg6XHRcdFx0XHQgICBudG9obChkZS1cdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXHUwMDNldS51bmlxdWUpLFxuIDQ0OTpcdFx0XHRcdCAgIG5hbWUtXHUwMDNlbmFtZSk7XG4gNDUwOlx0XG4gNDUxOlx0XHQvKiBBZGp1c3QgdGhlIGJpdG1hcC4gKi9cbiA0NTI6XHRcdGFmc19jbGVhcl9jb250aWdfYml0cyhibG9jaywgc2xvdCwgaXRlci5ucl9zbG90cyk7XG4gNDUzOlx0XG4gNDU0Olx0XHQvKiBBZGp1c3QgdGhlIGFsbG9jYXRpb24gY291bnRlci4gKi9cbiA0NTU6XHRcdGlmIChiIFx1MDAzYyBBRlNfRElSX0JMT0NLU19XSVRIX0NUUilcbiA0NTY6XHRcdFx0bWV0YS1cdTAwM2VtZXRhLmFsbG9jX2N0cnNbYl0gJiM0Mzs9IGl0ZXIubnJfc2xvdHM7XG4gNDU3Olx0XG4gNDU4Olx0XHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cbiA0NTk6XHRcdG5leHQgPSBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiA0NjA6XHRcdG1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTtcbiA0NjE6XHRcbiA0NjI6XHRcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIDQ2MzpcdFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCYjMzk7cyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG4gNDY0Olx0XHQgKi9cbiA0NjU6XHRcdGlmICghaXRlci5wcmV2X2VudHJ5KSB7XG4gNDY2Olx0XHRcdF9fYmUxNiBwcmV2X25leHQgPSBtZXRhLVx1MDAzZW1ldGEuaGFzaHRhYmxlW2l0ZXIuYnVja2V0XTtcbiA0Njc6XHRcbiA0Njg6XHRcdFx0aWYgKHVubGlrZWx5KHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpKSB7XG4gNDY5Olx0XHRcdFx0cHJfd2FybihcJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBoZWFkIG9mIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wmIzM0OyxcbiA0NzA6XHRcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiA0NzE6XHRcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG4gNDcyOlx0XHRcdFx0XHRuYW1lLVx1MDAzZWxlbiwgbmFtZS1cdTAwM2VuYW1lKTtcbiA0NzM6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDQ3NDpcdFx0XHR9XG4gNDc1Olx0XHRcdG1ldGEtXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdID0gbmV4dDtcbiA0NzY6XHRcdH0gZWxzZSB7XG4gNDc3Olx0XHRcdHVuc2lnbmVkIGludCBwYiA9IGl0ZXIucHJldl9lbnRyeSAvIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xuIDQ3ODpcdFx0XHR1bnNpZ25lZCBpbnQgcHMgPSBpdGVyLnByZXZfZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcbiA0Nzk6XHRcdFx0X19iZTE2IHByZXZfbmV4dDtcbiA0ODA6XHRcbiA0ODE6XHRcdFx0cGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIHBiKTtcbiA0ODI6XHRcdFx0aWYgKCFwYmxvY2spXG4gNDgzOlx0XHRcdFx0Z290byBlcnJvcjtcbiA0ODQ6XHRcdFx0cGRlID0gXHUwMDI2cGJsb2NrLVx1MDAzZWRpcmVudHNbcHNdO1xuIDQ4NTpcdFx0XHRwcmV2X25leHQgPSBwZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gNDg2Olx0XHRcdGlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7XG4gNDg3Olx0XHRcdFx0cHJfd2FybihcJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wmIzM0OyxcbiA0ODg6XHRcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiA0ODk6XHRcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG4gNDkwOlx0XHRcdFx0XHRuYW1lLVx1MDAzZWxlbiwgbmFtZS1cdTAwM2VuYW1lKTtcbiA0OTE6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDQ5MjpcdFx0XHR9XG4gNDkzOlx0XHRcdHBkZS1cdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XG4gNDk0Olx0XHR9XG4gNDk1Olx0XG4gNDk2Olx0XHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG4gNDk3Olx0XG4gNDk4Olx0XHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCB2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uKTtcbiA0OTk6XHRcdGFmc19zdGF0X3Yodm5vZGUsIG5fZGlyX3JtKTtcbiA1MDA6XHRcdF9kZWJ1ZyhcJiMzNDtSZW1vdmUgJXMgZnJvbSAldVsldV1cJiMzNDssIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gNTAxOlx0XG4gNTAyOlx0b3V0X3VubWFwOlxuIDUwMzpcdFx0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiA1MDQ6XHRcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiA1MDU6XHRcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIDUwNjpcdFx0cmV0dXJuO1xuIDUwNzpcdFxuIDUwODpcdGFscmVhZHlfaW52YWxpZGF0ZWQ6XG4gNTA5Olx0XHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcbiA1MTA6XHRcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDUxMTpcdFx0Z290byBvdXRfdW5tYXA7XG4gNTEyOlx0XG4gNTEzOlx0ZXJyb3I6XG4gNTE0Olx0XHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiA1MTU6XHRcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDUxNjpcdFx0Z290byBvdXRfdW5tYXA7XG4gNTE3Olx0fVxuIDUxODpcdFxuIDUxOTpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IE1hcHBpbmcgSXNzdWUgaW4gdGhlIEFGUyBGaWxlc3lzdGVtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBga3VubWFwX2xvY2FsYC4gVGhlIGtleSBpcyB0aGF0IGBrdW5tYXBfbG9jYWxgIHdhcyBpbmNvcnJlY3RseSBiZWluZyBjYWxsZWQgb24gYGJsb2NrYCBvciBgcGJsb2NrYC4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCB0aG9zZSBwb2ludGVycywgYGJsb2NrYCBvciBgcGJsb2NrYCwgYXJlIGJlaW5nIHRyZWF0ZWQgYXMgaWYgdGhleSBhcmUgbWVtb3J5IG1hcHBlZCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgYGttYXBfbG9jYWxgLCB3aGljaCBpcyBpbmNvcnJlY3QuIEFuZCwgZXZlbiBtb3JlIGltcG9ydGFudCwgdGhlc2UgcG9pbnRlcnMgY29tZSBmcm9tIGBhZnNfZGlyX2ZpbmRfYmxvY2tgLgoKSG9sZCBvbiwgc29tZXRoaW5nIGRvZXNuJiMzOTt0IHF1aXRlIHNpdCByaWdodC4gYGFmc19kaXJfZmluZF9ibG9ja2AgKnJldHVybnMqIGEgcG9pbnRlciwgcmlnaHQ/IEJ1dCBkb2VzbiYjMzk7dCBpdCBhbHNvIHN0b3JlIHRoZSBtYXBwZWQgYmxvY2sgaW4gYGl0ZXItJmd0O2Jsb2NrYD8gVGhhdCYjMzk7cyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBXZSBuZWVkIHRvIGNvbmZpcm0gaG93IGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGlzIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgb2YgdGhpcyBtZW1vcnkuIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIHN0ZW1zIGZyb20gYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSByZXR1cm5lZCBwb2ludGVyLgoKTGV0JiMzOTtzIGRpdmUgaW50byBgZnMvYWZzL2Rpcl9zZWFyY2guY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvZGlyX3NlYXJjaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aXRlci1cdTAwM2VidWNrZXQgPSBhZnNfZGlyX2hhc2hfbmFtZShuYW1lKTtcbiAgNjE6XHRcdHJldHVybiBhZnNfZGlyX3Jlc2V0X2l0ZXIoaXRlcik7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdC8qXG4gIDY1Olx0ICogR2V0IGEgc3BlY2lmaWMgYmxvY2suXG4gIDY2Olx0ICovXG4gIDY3Olx0dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXG4gIDY4Olx0e1xuICA2OTpcdFx0c3RydWN0IGZvbGlvX3F1ZXVlICpmcSA9IGl0ZXItXHUwMDNlZnE7XG4gIDcwOlx0XHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBpdGVyLVx1MDAzZWR2bm9kZTtcbiAgNzE6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDcyOlx0XHRzaXplX3QgYmxwb3MgPSBibG9jayAqIEFGU19ESVJfQkxPQ0tfU0laRTtcbiAgNzM6XHRcdHNpemVfdCBibGVuZCA9IChibG9jayAmIzQzOyAxKSAqIEFGU19ESVJfQkxPQ0tfU0laRSwgZnBvcyA9IGl0ZXItXHUwMDNlZnBvcztcbiAgNzQ6XHRcdGludCBzbG90ID0gaXRlci1cdTAwM2VmcV9zbG90O1xuICA3NTpcdFxuICA3NjpcdFx0X2VudGVyKFwmIzM0OyV6eCwlZFwmIzM0OywgYmxvY2ssIHNsb3QpO1xuICA3NzpcdFxuICA3ODpcdFx0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcbiAgNzk6XHRcbiAgODA6XHRcdGlmIChkdm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgXHUwMDNjIGJsZW5kKVxuICA4MTpcdFx0XHRnb3RvIGZhaWw7XG4gIDgyOlx0XG4gIDgzOlx0XHRpZiAoIWZxIHx8IGJscG9zIFx1MDAzYyBmcG9zKSB7XG4gIDg0Olx0XHRcdGZxID0gZHZub2RlLVx1MDAzZWRpcmVjdG9yeTtcbiAgODU6XHRcdFx0c2xvdCA9IDA7XG4gIDg2Olx0XHRcdGZwb3MgPSAwO1xuICA4NzpcdFx0fVxuICA4ODpcdFxuICA4OTpcdFx0LyogU2VhcmNoIHRoZSBmb2xpbyBxdWV1ZSBmb3IgdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhlIGJsb2NrLi4uICovXG4gIDkwOlx0XHRmb3IgKDsgZnE7IGZxID0gZnEtXHUwMDNlbmV4dCkge1xuICA5MTpcdFx0XHRmb3IgKDsgc2xvdCBcdTAwM2MgZm9saW9xX2NvdW50KGZxKTsgc2xvdCYjNDM7JiM0MzspIHtcbiAgOTI6XHRcdFx0XHRzaXplX3QgZnNpemUgPSBmb2xpb3FfZm9saW9fc2l6ZShmcSwgc2xvdCk7XG4gIDkzOlx0XG4gIDk0Olx0XHRcdFx0aWYgKGJsZW5kIFx1MDAzYz0gZnBvcyAmIzQzOyBmc2l6ZSkge1xuICA5NTpcdFx0XHRcdFx0LyogLi4uIGFuZCB0aGVuIHJldHVybiB0aGUgbWFwcGVkIGJsb2NrLiAqL1xuICA5NjpcdFx0XHRcdFx0Zm9saW8gPSBmb2xpb3FfZm9saW8oZnEsIHNsb3QpO1xuICA5NzpcdFx0XHRcdFx0aWYgKFdBUk5fT05fT05DRShmb2xpb19wb3MoZm9saW8pICE9IGZwb3MpKVxuICA5ODpcdFx0XHRcdFx0XHRnb3RvIGZhaWw7XG4gIDk5Olx0XHRcdFx0XHRpdGVyLVx1MDAzZWZxID0gZnE7XG4gMTAwOlx0XHRcdFx0XHRpdGVyLVx1MDAzZWZxX3Nsb3QgPSBzbG90O1xuIDEwMTpcdFx0XHRcdFx0aXRlci1cdTAwM2VmcG9zID0gZnBvcztcbiAxMDI6XHRcdFx0XHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBibHBvcyAtIGZwb3MpO1xuIDEwMzpcdFx0XHRcdFx0cmV0dXJuIGl0ZXItXHUwMDNlYmxvY2s7XG4gMTA0Olx0XHRcdFx0fVxuIDEwNTpcdFx0XHRcdGZwb3MgJiM0Mzs9IGZzaXplO1xuIDEwNjpcdFx0XHR9XG4gMTA3Olx0XHRcdHNsb3QgPSAwO1xuIDEwODpcdFx0fVxuIDEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQUZTIERpcmVjdG9yeSBFZGl0aW5nIERvdWJsZS1Vbm1hcCBCdWcgRml4KioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEFGUyBjb2RlLCBzcGVjaWZpY2FsbHkgYGFmc19kaXJfZmluZF9ibG9ja2AuIEl0IHNlZW1zIHRvIG1hcCBhIGZvbGlvIGFuZCBzdG9yZSBpdCBpbiBgaXRlci0mZ3Q7YmxvY2tgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiBgaXRlci0mZ3Q7YmxvY2tgIGFscmVhZHkgaGFzIGEgdmFsdWUsIGl0IHVubWFwcyBpdCBmaXJzdCAodXNpbmcgYGFmc19kaXJfZW5kX2l0ZXJgKS4gUmlnaHQsIGdvdCBpdC4KCk5vdywgSSYjMzk7bSBkaWdnaW5nIGludG8gYGFmc19lZGl0X2Rpcl9yZW1vdmVgLiBJdCBjYWxscyBgYWZzX2Rpcl9maW5kX2Jsb2NrKCZhbXA7aXRlciwgYilgIHRvIGdldCB0aGUgaW5pdGlhbCBgYmxvY2tgLCBhbmQgc3RvcmVzIGl0LiBUaGVuIGl0IGNhbGxzIGBhZnNfZGlyX2ZpbmRfYmxvY2soJmFtcDtpdGVyLCBwYilgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgdHJpY2t5LiBUaGF0IHNlY29uZCBjYWxsICp1bm1hcHMqIHRoZSBwcmV2aW91cyBgaXRlci0mZ3Q7YmxvY2tgLCB3aGljaCwgYXQgdGhpcyBwb2ludCwgKmlzKiB0aGUgYGJsb2NrYCB3ZSBqdXN0IGdvdCEgU28sIGBibG9ja2AgZ2V0cyB1bm1hcHBlZCAqaW1tZWRpYXRlbHkqIGJlZm9yZSBpdCYjMzk7cyB1c2VkLgoKSG9sZCBvbi4uLiBJIG5vdGljZWQgdGhlcmUgd2FzIGEgYGt1bm1hcF9sb2NhbChibG9jaylgIGluIHRoZSBvcmlnaW5hbCBjb2RlLCAqYmVmb3JlKiB0aGUgc2Vjb25kIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGNhbGwuIEFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgYSBga3VubWFwX2xvY2FsKHBibG9jaylgIGFmdGVyIHRoZSBzZWNvbmQgYGFmc19kaXJfZmluZF9ibG9ja2AuICBBaGEhIFRoYXQgaW5pdGlhbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgd2FzIG1hbnVhbGx5IHVubWFwcGluZyB0aGUgdmVyeSBgYmxvY2tgIHRoYXQmIzM5O3Mgbm93IGFsc28gdW5tYXBwZWQgYnkgdGhlICpzZWNvbmQqIGNhbGwgdG8gYGFmc19kaXJfZmluZF9ibG9ja2AuIEl0IGxvb2tzIGxpa2UgdGhhdCBtYW51YWwgdW5tYXAgd2FzIGFscmVhZHkgZG9uZSwgYnV0IGBpdGVyLSZndDtibG9ja2Agd2FzICpub3QqIHJlc2V0IHRvIGBOVUxMYCB0byBpbmRpY2F0ZSB0aGF0IGBibG9ja2Agd2FzIG5vIGxvbmdlciBpbiB1c2UuCgpTbyB0aGUgc2Vjb25kIGNhbGwgdG8gYGFmc19kaXJfZmluZF9ibG9ja2Agd2FzIGRvaW5nIHRoaXM6CgpgYGBjCglpZiAoaXRlci0mZ3Q7YmxvY2spIHsKCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwoJCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKCX0KYGBgCgpTaW5jZSB0aGUgcHJldmlvdXMgY2FsbCB0byBga3VubWFwX2xvY2FsYCB3YXNuJiMzOTt0IGJlaW5nIGFjY291bnRlZCBmb3IgaW4gdGhlIHN0YXRlIG9mIGBpdGVyLSZndDtibG9ja2AsIGl0IHJlc3VsdGVkIGluIGEgZG91YmxlLXVubWFwISBXZSBoYXZlIGFuIGlzc3VlLgoKVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQuIFJlbW92aW5nIHRoZSBtYW51YWwgYGt1bm1hcF9sb2NhbChibG9jaylgIGFuZCBga3VubWFwX2xvY2FsKHBibG9jaylgIGFuZCByZWx5aW5nIG9uIHRoZSB1bm1hcHBpbmcgYmVpbmcgaGFuZGxlZCBieSBgYWZzX2Rpcl9lbmRfaXRlcigmYW1wO2l0ZXIpYCAod2hpY2ggaXMgY2FsbGVkIGluIGBvdXRfdW5tYXBgIGFuZCBpbnNpZGUgYGFmc19kaXJfZmluZF9ibG9ja2ApLiBUaGF0IHdheSBpdCYjMzk7cyBvbmx5IHVubWFwcGVkIG9uY2UsIGFzIGV4cGVjdGVkLgoKVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGZpeCBmb3IgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZy4gQW5kIHllcywgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZz10cnVlLiBJIGJldHRlciBmaW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4uLiBBaCwgYENPTkZJR19BRlNfRlNgIGlzIHRoZSBtYWluIG9uZS4gSSBoYXZlIGl0LiBHb29kLiBUaGlzIGlzIHJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXG5mcy9hZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZz0xNz1jb25maWcgQUZTX0RFQlVHXG4tLVxuZnMvYWZzL0tjb25maWctMjYtXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcbmZzL2Fmcy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIGBBRlNfRlNgIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbioqCgpSaWdodCwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgQUZTX0ZTYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIG5vdyBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlbGV2YW50IHdpdGhpbiB0aGF0IGNvbnRleHQuIFRoZSBtYWluIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGlzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYC4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIGhvdyBpdCYjMzk7cyBiZWVuIGNoYW5nZWQsIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBHaXZlbiB0aGF0IGl0IGRlYWxzIHdpdGggZGlyZWN0b3J5IHJlbW92YWwgd2l0aGluIEFGUywgaXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGludGVncml0eSBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gTm93IHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgd2hhdCB0aGUgY2FsbCBwYXRoIGlzLCB0aGF0IHRlbGxzIG1lIHRoZSBkaWZmZXJlbnQgcGxhY2VzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyB1c2VkLCB0byBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZCBmcm9tLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IG1vZGlmaWNhdGlvbnMgdG8gaXQuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gbWFwIG91dCBpdHMgJiMzNDtmYW1pbHkgdHJlZSYjMzQ7IHdpdGhpbiB0aGUgbGFyZ2VyIEFGUyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTEzNjg9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTM4MC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXIuYzoxMzgxOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b3AtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMzgyLVx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNTE2PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xNTI2LVx0ICAgIGR2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cdTAwM2Vkdl9iZWZvcmUgJiM0MzsgZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE1Mjc6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE1MjgtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xuLS1cbmZzL2Fmcy9kaXIuYz0xODg4PXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xOTEzLVx0ICAgIG9yaWdfZHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IG9yaWdfZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE5MTQ6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE5MTUtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XG4tLVxuZnMvYWZzL2Rpci5jLTE5MjQtXHRcdGlmICghb3AtXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcbmZzL2Fmcy9kaXIuYzoxOTI1Olx0XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG5mcy9hZnMvZGlyLmMtMTkyNi1cdFx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSkge1xuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b2xkLVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXHRcdFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQUZTIERpcmVjdG9yeSBSZW1vdmFsIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYGFmc19ybWRpcl9lZGl0X2RpcmAsIGBhZnNfdW5saW5rX2VkaXRfZGlyYCwgYGFmc19yZW5hbWVfZWRpdF9kaXJgLCBhbmQgZXZlbiB0aG9zZSBzaWxseSByZW5hbWUgYW5kIHVubGluayB2YXJpYW50cy4gVGhlc2UgYXJlIGFsbCB0aGUgZXhwZWN0ZWQgb3BlcmF0aW9ucyBmb3IgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbjogcmVtb3ZpbmcgYW4gZW1wdHkgZGlyZWN0b3J5LCB1bmxpbmtpbmcgKHJlbW92aW5nIGEgZmlsZSksIGFuZCByZW5hbWluZyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gVGhhdCBtYWtlcyBzZW5zZS4KCkdpdmVuIHRoYXQgY29udGV4dCwgbXkgYXR0ZW50aW9uIG5hdHVyYWxseSB0dXJucyB0byBhIGZldyBrZXkgZnVuY3Rpb25zLiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgb2J2aW91c2x5IGNyaXRpY2FsLiBUaGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBhY3R1YWxseSBuYXZpZ2F0ZWQuIEl0IGxvb2tzIGxpa2UgYGFmc19kaXJfZmluZF9ibG9ja2AsIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLCBhbmQgYGFmc19kaXJfc2VhcmNoYCBhcmUgZGVlcGx5IGludm9sdmVkIGluIHRoYXQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRpcmVjdG9yeSBibG9ja3MgYW5kIGJ1Y2tldHMgYXJlIHNlYXJjaGVkIHRvIGZpbmQgZW50cmllcyB0aGF0IGNhbiB0aGVuIGJlIHJlbW92ZWQuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtLiBBaCwgYGFmc19lZGl0X2Rpcl9yZW1vdmVgICppcyogZXhwb3J0ZWQgaW4gYGludGVybmFsLmhgIGFuZCBpcyBkZWZpbmVkIGluIGBkaXJfZWRpdC5jYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoaXMgaXMgYSBrZXkgZnVuY3Rpb24uIEkgYWxzbyBzZWUgdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQgYW5kIGV4cG9ydGVkLCBzbyB0aGV5JiMzOTtyZSB3b3J0aCBhIGNsb3NlciBsb29rIGFzIHdlbGwuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGZzL2Fmcy9kaXJfc2VhcmNoLmNgIHRvIHNlZSBob3cgdGhhdCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQyMi1cdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6NDIzOlx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgXHUwMDI2ZmlkKTtcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyNC1cdGlmIChmb3VuZCBcdTAwM2MgMCkge1xuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9Njc9dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXG4tLVxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMTktICovXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyMDppbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjEtXHRcdFx0ICBzdHJ1Y3QgYWZzX2ZpZCAqX2ZpZClcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTE4ND1pbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MjEyOlx0XHRyZXQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgX2ZpZCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMy1cdFx0dXBfcmVhZChcdTAwMjZkdm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTEzMD11bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jayk7XG5mcy9hZnMvaW50ZXJuYWwuaDoxMTMxOmludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTMyLVx0XHRcdCAgc3RydWN0IGFmc19maWQgKl9maWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwOAoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBRlMgRGlyZWN0b3J5IEVkaXRpbmcgUGF0Y2gqKgoKT2theSwgc28gYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzIGhlcmUuIExldCYjMzk7cyBzZWUsIHdoYXQgb3RoZXIgc3ltYm9scyBhcmUgcmVsZXZhbnQ/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIC0gb2J2aW91c2x5LCBzaW5jZSBpdCYjMzk7cyB0aGUgdGFyZ2V0IG9mIHRoZSBmaXgKKiAgIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIC0gY291bGQgYmUgcmVsYXRlZCB0byBob3cgdGhlIGJsb2NrcyBhcmUgbG9jYXRlZCBvciBtYW5hZ2VkCiogICBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCAtIHRoZSBidWNrZXQgc2VhcmNoIGlzIHdoZXJlIHdlIHN0YXJ0ZWQKClJpZ2h0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZS11bm1hcCBidWcgaW4gQUZTIGRpcmVjdG9yeSBlZGl0aW5nLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGZ1bmN0aW9uYWwgZml4LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgLSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgb3RoZXIgcmVsYXRlZCBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgdGhpcyBgYWZzX2Rpcl9lbmRfaXRlcmAgaGVscGVyLiBJdCBsb29rcyBsaWtlIGl0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIGJhc2ljYWxseSByZXBsYWNpbmcgdGhvc2UgbWFudWFsIGBrdW5tYXBfbG9jYWxgIGNhbGxzIHRoYXQgd2VyZSBjYXVzaW5nIHRoZSBkb3VibGUtdW5tYXBwaW5nIHByb2JsZW0uIFNtYXJ0LCB0aGF0IHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgaXNzdWVzLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIGBBRlNfRlNgIGNvbmZpZyBpcyBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGlzIGZpeC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIG90aGVyIGNvbmZpZ3MgbmVlZGVkIGhlcmUuCgpBbHJpZ2h0LCBsb29rcyBnb29kLiBUaW1lIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjA1LjgyNzQ4MTU1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDAyNjIxNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZyAoYWZzX2VkaXRfZGlyX3JlbW92ZSkgYnkgaW50cm9kdWNpbmcgYSBoZWxwZXIgYWZzX2Rpcl9lbmRfaXRlciB0aGF0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIHJlcGxhY2luZyBtYW51YWwga3VubWFwX2xvY2FsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byBkb3VibGUtdW5tYXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODowNS44Mjc0OTAyMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ1MzQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQzZmYzZDc0M2M1MTFiNWJhYzI0MjFhYTIwNGU2OTBmN2MxNjU1MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6Mzg6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xcbmluZGV4IDNlYWQzNmEwNzA0ODcuLmMzMTMwMzA1OTQ0NGEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcXG4rKysgYi9mcy9hZnMvZGlyX2VkaXQuY1xcbkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xcbiBcXHRkZSA9IFxcdTAwMjZibG9jay1cXHUwMDNlZGlyZW50c1tzbG90XTtcXG4gXFx0aWYgKGRlLVxcdTAwM2V1LnZhbGlkICE9IDEpXFxuLVxcdFxcdGdvdG8gZXJyb3JfdW5tYXA7XFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcXG4gXFx0XFx0XFx0ICAgbnRvaGwoZGUtXFx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cXHUwMDNldS51bmlxdWUpLFxcbkBAIC00NTgsNyArNDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cXG4gXFx0bmV4dCA9IGRlLVxcdTAwM2V1Lmhhc2hfbmV4dDtcXG4gXFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBcXG4gXFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVxcdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxcbiBcXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0J3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LlxcbkBAIC00ODUsNyArNDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRcXHRwZGUgPSBcXHUwMDI2cGJsb2NrLVxcdTAwM2VkaXJlbnRzW3BzXTtcXG4gXFx0XFx0cHJldl9uZXh0ID0gcGRlLVxcdTAwM2V1Lmhhc2hfbmV4dDtcXG4gXFx0XFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcXG4tXFx0XFx0XFx0a3VubWFwX2xvY2FsKHBibG9jayk7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcIiVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXFxcIixcXG4gXFx0XFx0XFx0XFx0dm5vZGUtXFx1MDAzZWZpZC52aWQsIHZub2RlLVxcdTAwM2VmaWQudm5vZGUsIHZub2RlLVxcdTAwM2VmaWQudW5pcXVlLFxcbiBcXHRcXHRcXHRcXHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxcbkBAIC00OTMsNyArNDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHBkZS1cXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcXG4gXFx0fVxcbiBcXG4gXFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSk7XFxuQEAgLTUwMywxOCArNTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4gXFx0X2RlYnVnKFxcXCJSZW1vdmUgJXMgZnJvbSAldVsldV1cXFwiLCBuYW1lLVxcdTAwM2VuYW1lLCBiLCBzbG90KTtcXG4gXFxuIG91dF91bm1hcDpcXG4rXFx0YWZzX2Rpcl9lbmRfaXRlcihcXHUwMDI2aXRlcik7XFxuIFxcdGt1bm1hcF9sb2NhbChtZXRhKTtcXG4gXFx0X2xlYXZlKFxcXCJcXFwiKTtcXG4gXFx0cmV0dXJuO1xcbiBcXG4gYWxyZWFkeV9pbnZhbGlkYXRlZDpcXG4tXFx0a3VubWFwX2xvY2FsKGJsb2NrKTtcXG4gXFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfaW52YWwsXFxuIFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiBcXHRnb3RvIG91dF91bm1hcDtcXG4gXFxuLWVycm9yX3VubWFwOlxcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBlcnJvcjpcXG4gXFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsXFxuIFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX3NlYXJjaC5jIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xcbmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xcbisrKyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcXG5AQCAtNzUsMTAgKzc1LDcgQEAgdW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxcXG4gXFxuIFxcdF9lbnRlcihcXFwiJXp4LCVkXFxcIiwgYmxvY2ssIHNsb3QpO1xcbiBcXG4tXFx0aWYgKGl0ZXItXFx1MDAzZWJsb2NrKSB7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChpdGVyLVxcdTAwM2VibG9jayk7XFxuLVxcdFxcdGl0ZXItXFx1MDAzZWJsb2NrID0gTlVMTDtcXG4tXFx0fVxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xcbiBcXG4gXFx0aWYgKGR2bm9kZS1cXHUwMDNlZGlyZWN0b3J5X3NpemUgXFx1MDAzYyBibGVuZClcXG4gXFx0XFx0Z290byBmYWlsO1xcbkBAIC0xNzMsMTIgKzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcbiBcXHRyZXQgPSAtRU5PRU5UO1xcbiBmb3VuZDpcXG4tXFx0aWYgKGl0ZXItXFx1MDAzZWJsb2NrKSB7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChpdGVyLVxcdTAwM2VibG9jayk7XFxuLVxcdFxcdGl0ZXItXFx1MDAzZWJsb2NrID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4gYmFkOlxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xcbiBcXHRpZiAocmV0ID09IC1FU1RBTEUpXFxuIFxcdFxcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVxcdTAwM2Vkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTtcXG4gXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMTEzMyw2ICsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIGludCBhZnNfZGlyX3NlYXJjaChzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHQgICBzdHJ1Y3QgYWZzX2ZpZCAqX2ZpZCwgYWZzX2RhdGF2ZXJzaW9uX3QgKl9kaXJfdmVyc2lvbik7XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2Rpcl9lbmRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyKVxcbit7XFxuK1xcdGlmIChpdGVyLVxcdTAwM2VibG9jaykge1xcbitcXHRcXHRrdW5tYXBfbG9jYWwoaXRlci1cXHUwMDNlYmxvY2spO1xcbitcXHRcXHRpdGVyLVxcdTAwM2VibG9jayA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4gICogZGlyX3NpbGx5LmNcXG4gICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjA2LjMwODkwNDYwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxNTIxMTgxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZyAoYWZzX2VkaXRfZGlyX3JlbW92ZSkgYnkgaW50cm9kdWNpbmcgYSBoZWxwZXIgYWZzX2Rpcl9lbmRfaXRlciB0aGF0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIHJlcGxhY2luZyBtYW51YWwga3VubWFwX2xvY2FsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byBkb3VibGUtdW5tYXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0M2ZmM2Q3NDNjNTExYjViYWMyNDIxYWEyMDRlNjkwZjdjMTY1NTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6Mzg6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5pbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXG4gXHRkZSA9IFx1MDAyNmJsb2NrLVx1MDAzZWRpcmVudHNbc2xvdF07XG4gXHRpZiAoZGUtXHUwMDNldS52YWxpZCAhPSAxKVxuLVx0XHRnb3RvIGVycm9yX3VubWFwO1xuK1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyArNDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovXG4gXHRuZXh0ID0gZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFxuIFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0J3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LlxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCIlbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wiLFxuIFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbkBAIC00OTMsNyArNDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0X2RlYnVnKFwiUmVtb3ZlICVzIGZyb20gJXVbJXVdXCIsIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuK1x0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiBcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Li4xMWViZGZmZmNiMWQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xuKysrIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuQEAgLTc1LDEwICs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCIlengsJWRcIiwgYmxvY2ssIHNsb3QpO1xuIFxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiArMTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4gZm91bmQ6XG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuLVxuIGJhZDpcbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXHRpZiAocmV0ID09IC1FU1RBTEUpXG4gXHRcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTEzMyw2ICsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2Rpcl9lbmRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyKVxuK3tcbitcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4rXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbitcdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogZGlyX3NpbGx5LmNcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjA2LjMwODkwNjcxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTg3MTA2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgQUZTIERpcmVjdG9yeSBJdGVyYXRpb24gQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYSBjbGVhbi11cCBvZiBzb21lIEFGUyBkaXJlY3RvcnkgaXRlcmF0aW9uIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEl0IGFwcGVhcnMgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGFmc19kaXJfZW5kX2l0ZXJgLCB3aGljaCBpcyBkZXNpZ25lZCB0byBuZWF0bHkgdW5tYXAgdGhlIGBpdGVyLVx1MDAzZWJsb2NrYCBhbmQgdGhlbiBudWxsaWZ5IHRoZSBwb2ludGVyLiBUaGUgYmVuZWZpdD8gSXQgc2VlbXMgd2UncmUgY2VudHJhbGl6aW5nIHRoaXMga2luZCBvZiB1bm1hcHBpbmcgb3BlcmF0aW9uLlxuXG5Hb29kLCBnb29kLiBUaGV5IGFyZSBiYXNpY2FsbHkgcmVwbGFjaW5nIHRob3NlIG1hbnVhbCBga3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spYCBjYWxscyB3aXRoIHRoZSBuZXcgaGVscGVyLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBtYWludGFpbmFiaWxpdHkgc3RhbmRwb2ludC4gRmV3ZXIgcGxhY2VzIHRvIGdldCBpdCB3cm9uZy4gTm93LCBpbiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIEkgc2VlIHRoZXkndmUgcmVtb3ZlZCBhIGJ1bmNoIG9mIHRoZSBga3VubWFwX2xvY2FsKGJsb2NrKWAgYW5kIGBrdW5tYXBfbG9jYWwocGJsb2NrKWAgY2FsbHMsIGFuZCB0aGV5J3JlIHJlbHlpbmcgb24gYGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcilgIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBpcyBsYWJlbGVkIGFzIGBvdXRfdW5tYXBgLlxuXG5XYWl0IGEgbWludXRlLCBgYmxvY2tgIGFuZCBgcGJsb2NrYC4uLiB3ZXJlbid0IHRob3NlIG1hcHBlZCBieSBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgZHJpbGwgZG93biBpbnRvIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgc2VlIGhvdyB0aG9zZSBibG9ja3MgYXJlIGhhbmRsZWQuIFRpbWUgdG8gYnJpbmcgdXAgbXkgdHJ1c3RlZCBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCB0b29sIGFuZCBjaGVjayBgZnMvYWZzL2Rpcl9lZGl0LmNgIGFyb3VuZCB0aGUgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGZ1bmN0aW9uIHRvIGNsYXJpZnkgdGhlIG1hcHBpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODoxMS40MDc2MTk4NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL2Rpcl9lZGl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xcbiA0MjM6XFx0XFx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXFx1MDAyNml0ZXIsIG5hbWUsIFxcdTAwMjZmaWQpO1xcbiA0MjQ6XFx0XFx0aWYgKGZvdW5kIFxcdTAwM2MgMCkge1xcbiA0MjU6XFx0XFx0XFx0LyogRGlkbid0IGZpbmQgdGhlIGRpcmVudCB0byBjbG9iYmVyLiAgUmUtZG93bmxvYWQuICovXFxuIDQyNjpcXHRcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9ub2VudCxcXG4gNDI3OlxcdFxcdFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0Mjg6XFx0XFx0XFx0YWZzX2ludmFsaWRhdGVfZGlyKHZub2RlLCBhZnNfZGlyX2ludmFsaWRfZWRpdF9yZW1fd3JvbmdfbmFtZSk7XFxuIDQyOTpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG4gNDMwOlxcdFxcdH1cXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0ZW50cnkgPSBmb3VuZDtcXG4gNDMzOlxcdFxcdGIgICAgPSBlbnRyeSAvIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xcbiA0MzQ6XFx0XFx0c2xvdCA9IGVudHJ5ICUgQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XFxuIDQzNTpcXHRcXG4gNDM2OlxcdFxcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBiKTtcXG4gNDM3OlxcdFxcdGlmICghYmxvY2spXFxuIDQzODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0Mzk6XFx0XFx0aWYgKCF0ZXN0X2JpdChBRlNfVk5PREVfRElSX1ZBTElELCBcXHUwMDI2dm5vZGUtXFx1MDAzZWZsYWdzKSlcXG4gNDQwOlxcdFxcdFxcdGdvdG8gYWxyZWFkeV9pbnZhbGlkYXRlZDtcXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cXG4gNDQzOlxcdFxcdGRlID0gXFx1MDAyNmJsb2NrLVxcdTAwM2VkaXJlbnRzW3Nsb3RdO1xcbiA0NDQ6XFx0XFx0aWYgKGRlLVxcdTAwM2V1LnZhbGlkICE9IDEpXFxuIDQ0NTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcXG4gNDQ4OlxcdFxcdFxcdFxcdCAgIG50b2hsKGRlLVxcdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXFx1MDAzZXUudW5pcXVlKSxcXG4gNDQ5OlxcdFxcdFxcdFxcdCAgIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHQvKiBBZGp1c3QgdGhlIGJpdG1hcC4gKi9cXG4gNDUyOlxcdFxcdGFmc19jbGVhcl9jb250aWdfYml0cyhibG9jaywgc2xvdCwgaXRlci5ucl9zbG90cyk7XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdC8qIEFkanVzdCB0aGUgYWxsb2NhdGlvbiBjb3VudGVyLiAqL1xcbiA0NTU6XFx0XFx0aWYgKGIgXFx1MDAzYyBBRlNfRElSX0JMT0NLU19XSVRIX0NUUilcXG4gNDU2OlxcdFxcdFxcdG1ldGEtXFx1MDAzZW1ldGEuYWxsb2NfY3Ryc1tiXSArPSBpdGVyLm5yX3Nsb3RzO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cXG4gNDU5OlxcdFxcdG5leHQgPSBkZS1cXHUwMDNldS5oYXNoX25leHQ7XFxuIDQ2MDpcXHRcXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cXHUwMDNlcHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWRcXG4gNDYzOlxcdFxcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXFxuIDQ2NDpcXHRcXHQgKi9cXG4gNDY1OlxcdFxcdGlmICghaXRlci5wcmV2X2VudHJ5KSB7XFxuIDQ2NjpcXHRcXHRcXHRfX2JlMTYgcHJldl9uZXh0ID0gbWV0YS1cXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHRcXHRpZiAodW5saWtlbHkocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkpIHtcXG4gNDY5OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIiVsbHg6JWxseDoleDogbm90IGhlYWQgb2YgY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXFxcIixcXG4gNDcwOlxcdFxcdFxcdFxcdFxcdHZub2RlLVxcdTAwM2VmaWQudmlkLCB2bm9kZS1cXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cXHUwMDNlZmlkLnVuaXF1ZSxcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuIDQ3MjpcXHRcXHRcXHRcXHRcXHRuYW1lLVxcdTAwM2VsZW4sIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0NzM6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNDc0OlxcdFxcdFxcdH1cXG4gNDc1OlxcdFxcdFxcdG1ldGEtXFx1MDAzZW1ldGEuaGFzaHRhYmxlW2l0ZXIuYnVja2V0XSA9IG5leHQ7XFxuIDQ3NjpcXHRcXHR9IGVsc2Uge1xcbiA0Nzc6XFx0XFx0XFx0dW5zaWduZWQgaW50IHBiID0gaXRlci5wcmV2X2VudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XFxuIDQ3ODpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHMgPSBpdGVyLnByZXZfZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcXG4gNDc5OlxcdFxcdFxcdF9fYmUxNiBwcmV2X25leHQ7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdFxcdHBibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcXHUwMDI2aXRlciwgcGIpO1xcbiA0ODI6XFx0XFx0XFx0aWYgKCFwYmxvY2spXFxuIDQ4MzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0ODQ6XFx0XFx0XFx0cGRlID0gXFx1MDAyNnBibG9jay1cXHUwMDNlZGlyZW50c1twc107XFxuIDQ4NTpcXHRcXHRcXHRwcmV2X25leHQgPSBwZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiA0ODY6XFx0XFx0XFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcXG4gNDg3OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIiVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXFxcIixcXG4gNDg4OlxcdFxcdFxcdFxcdFxcdHZub2RlLVxcdTAwM2VmaWQudmlkLCB2bm9kZS1cXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cXHUwMDNlZmlkLnVuaXF1ZSxcXG4gNDg5OlxcdFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuIDQ5MDpcXHRcXHRcXHRcXHRcXHRuYW1lLVxcdTAwM2VsZW4sIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0OTE6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNDkyOlxcdFxcdFxcdH1cXG4gNDkzOlxcdFxcdFxcdHBkZS1cXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xcbiA0OTQ6XFx0XFx0fVxcbiA0OTU6XFx0XFxuIDQ5NjpcXHRcXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0aW5vZGVfc2V0X2l2ZXJzaW9uX3JhdyhcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlLCB2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbik7XFxuIDQ5OTpcXHRcXHRhZnNfc3RhdF92KHZub2RlLCBuX2Rpcl9ybSk7XFxuIDUwMDpcXHRcXHRfZGVidWcoXFxcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVxcXCIsIG5hbWUtXFx1MDAzZW5hbWUsIGIsIHNsb3QpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRvdXRfdW5tYXA6XFxuIDUwMzpcXHRcXHRhZnNfZGlyX2VuZF9pdGVyKFxcdTAwMjZpdGVyKTtcXG4gNTA0OlxcdFxcdGt1bm1hcF9sb2NhbChtZXRhKTtcXG4gNTA1OlxcdFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIDUwNjpcXHRcXHRyZXR1cm47XFxuIDUwNzpcXHRcXG4gNTA4OlxcdGFscmVhZHlfaW52YWxpZGF0ZWQ6XFxuIDUwOTpcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcXG4gNTEwOlxcdFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA1MTE6XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdGVycm9yOlxcbiA1MTQ6XFx0XFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsXFxuIDUxNTpcXHRcXHRcXHRcXHQgICAwLCAwLCAwLCAwLCBuYW1lLVxcdTAwM2VuYW1lKTtcXG4gNTE2OlxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbiA1MTc6XFx0fVxcbiA1MTg6XFx0XFxuIDUxOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODoxMS40MDc3OTIyNzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk2MTM4ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBNZW1vcnkgTWFwcGluZyBJc3N1ZSBpbiB0aGUgQUZTIEZpbGVzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGZpeGluZyBhIGJ1ZyByZWxhdGVkIHRvIGBrdW5tYXBfbG9jYWxgLiBUaGUga2V5IGlzIHRoYXQgYGt1bm1hcF9sb2NhbGAgd2FzIGluY29ycmVjdGx5IGJlaW5nIGNhbGxlZCBvbiBgYmxvY2tgIG9yIGBwYmxvY2tgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRob3NlIHBvaW50ZXJzLCBgYmxvY2tgIG9yIGBwYmxvY2tgLCBhcmUgYmVpbmcgdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBtZW1vcnkgbWFwcGVkIHdpdGggdGhlIGtlcm5lbCdzIGBrbWFwX2xvY2FsYCwgd2hpY2ggaXMgaW5jb3JyZWN0LiBBbmQsIGV2ZW4gbW9yZSBpbXBvcnRhbnQsIHRoZXNlIHBvaW50ZXJzIGNvbWUgZnJvbSBgYWZzX2Rpcl9maW5kX2Jsb2NrYC5cblxuSG9sZCBvbiwgc29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgc2l0IHJpZ2h0LiBgYWZzX2Rpcl9maW5kX2Jsb2NrYCAqcmV0dXJucyogYSBwb2ludGVyLCByaWdodD8gQnV0IGRvZXNuJ3QgaXQgYWxzbyBzdG9yZSB0aGUgbWFwcGVkIGJsb2NrIGluIGBpdGVyLVx1MDAzZWJsb2NrYD8gVGhhdCdzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgdG8gYmUgdmVyaWZpZWQuIFdlIG5lZWQgdG8gY29uZmlybSBob3cgYGFmc19kaXJfZmluZF9ibG9ja2AgaXMgaGFuZGxpbmcgdGhlIG1hcHBpbmcgYW5kIHVubWFwcGluZyBvZiB0aGlzIG1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgaXNzdWUgc3RlbXMgZnJvbSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHJldHVybmVkIHBvaW50ZXIuXG5cbkxldCdzIGRpdmUgaW50byBgZnMvYWZzL2Rpcl9zZWFyY2guY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjE1LjIwMzkzMzU1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvZGlyX3NlYXJjaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdGl0ZXItXFx1MDAzZWJ1Y2tldCA9IGFmc19kaXJfaGFzaF9uYW1lKG5hbWUpO1xcbiAgNjE6XFx0XFx0cmV0dXJuIGFmc19kaXJfcmVzZXRfaXRlcihpdGVyKTtcXG4gIDYyOlxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0LypcXG4gIDY1OlxcdCAqIEdldCBhIHNwZWNpZmljIGJsb2NrLlxcbiAgNjY6XFx0ICovXFxuICA2NzpcXHR1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jaylcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCBmb2xpb19xdWV1ZSAqZnEgPSBpdGVyLVxcdTAwM2VmcTtcXG4gIDcwOlxcdFxcdHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSA9IGl0ZXItXFx1MDAzZWR2bm9kZTtcXG4gIDcxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuICA3MjpcXHRcXHRzaXplX3QgYmxwb3MgPSBibG9jayAqIEFGU19ESVJfQkxPQ0tfU0laRTtcXG4gIDczOlxcdFxcdHNpemVfdCBibGVuZCA9IChibG9jayArIDEpICogQUZTX0RJUl9CTE9DS19TSVpFLCBmcG9zID0gaXRlci1cXHUwMDNlZnBvcztcXG4gIDc0OlxcdFxcdGludCBzbG90ID0gaXRlci1cXHUwMDNlZnFfc2xvdDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0X2VudGVyKFxcXCIlengsJWRcXFwiLCBibG9jaywgc2xvdCk7XFxuICA3NzpcXHRcXG4gIDc4OlxcdFxcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdGlmIChkdm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplIFxcdTAwM2MgYmxlbmQpXFxuICA4MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdGlmICghZnEgfHwgYmxwb3MgXFx1MDAzYyBmcG9zKSB7XFxuICA4NDpcXHRcXHRcXHRmcSA9IGR2bm9kZS1cXHUwMDNlZGlyZWN0b3J5O1xcbiAgODU6XFx0XFx0XFx0c2xvdCA9IDA7XFxuICA4NjpcXHRcXHRcXHRmcG9zID0gMDtcXG4gIDg3OlxcdFxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0LyogU2VhcmNoIHRoZSBmb2xpbyBxdWV1ZSBmb3IgdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhlIGJsb2NrLi4uICovXFxuICA5MDpcXHRcXHRmb3IgKDsgZnE7IGZxID0gZnEtXFx1MDAzZW5leHQpIHtcXG4gIDkxOlxcdFxcdFxcdGZvciAoOyBzbG90IFxcdTAwM2MgZm9saW9xX2NvdW50KGZxKTsgc2xvdCsrKSB7XFxuICA5MjpcXHRcXHRcXHRcXHRzaXplX3QgZnNpemUgPSBmb2xpb3FfZm9saW9fc2l6ZShmcSwgc2xvdCk7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdFxcdFxcdGlmIChibGVuZCBcXHUwMDNjPSBmcG9zICsgZnNpemUpIHtcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdC8qIC4uLiBhbmQgdGhlbiByZXR1cm4gdGhlIG1hcHBlZCBibG9jay4gKi9cXG4gIDk2OlxcdFxcdFxcdFxcdFxcdGZvbGlvID0gZm9saW9xX2ZvbGlvKGZxLCBzbG90KTtcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoZm9saW9fcG9zKGZvbGlvKSAhPSBmcG9zKSlcXG4gIDk4OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdGl0ZXItXFx1MDAzZWZxID0gZnE7XFxuIDEwMDpcXHRcXHRcXHRcXHRcXHRpdGVyLVxcdTAwM2VmcV9zbG90ID0gc2xvdDtcXG4gMTAxOlxcdFxcdFxcdFxcdFxcdGl0ZXItXFx1MDAzZWZwb3MgPSBmcG9zO1xcbiAxMDI6XFx0XFx0XFx0XFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBibHBvcyAtIGZwb3MpO1xcbiAxMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGl0ZXItXFx1MDAzZWJsb2NrO1xcbiAxMDQ6XFx0XFx0XFx0XFx0fVxcbiAxMDU6XFx0XFx0XFx0XFx0ZnBvcyArPSBmc2l6ZTtcXG4gMTA2OlxcdFxcdFxcdH1cXG4gMTA3OlxcdFxcdFxcdHNsb3QgPSAwO1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjE1LjIwNDA0MTMwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNzQyOTcwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZTIERpcmVjdG9yeSBFZGl0aW5nIERvdWJsZS1Vbm1hcCBCdWcgRml4KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQncyBoYXBwZW5pbmcuIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgQUZTIGNvZGUsIHNwZWNpZmljYWxseSBgYWZzX2Rpcl9maW5kX2Jsb2NrYC4gSXQgc2VlbXMgdG8gbWFwIGEgZm9saW8gYW5kIHN0b3JlIGl0IGluIGBpdGVyLVx1MDAzZWJsb2NrYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaWYgYGl0ZXItXHUwMDNlYmxvY2tgIGFscmVhZHkgaGFzIGEgdmFsdWUsIGl0IHVubWFwcyBpdCBmaXJzdCAodXNpbmcgYGFmc19kaXJfZW5kX2l0ZXJgKS4gUmlnaHQsIGdvdCBpdC5cblxuTm93LCBJJ20gZGlnZ2luZyBpbnRvIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYC4gSXQgY2FsbHMgYGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBiKWAgdG8gZ2V0IHRoZSBpbml0aWFsIGBibG9ja2AsIGFuZCBzdG9yZXMgaXQuIFRoZW4gaXQgY2FsbHMgYGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBwYilgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgdHJpY2t5LiBUaGF0IHNlY29uZCBjYWxsICp1bm1hcHMqIHRoZSBwcmV2aW91cyBgaXRlci1cdTAwM2VibG9ja2AsIHdoaWNoLCBhdCB0aGlzIHBvaW50LCAqaXMqIHRoZSBgYmxvY2tgIHdlIGp1c3QgZ290ISBTbywgYGJsb2NrYCBnZXRzIHVubWFwcGVkICppbW1lZGlhdGVseSogYmVmb3JlIGl0J3MgdXNlZC5cblxuSG9sZCBvbi4uLiBJIG5vdGljZWQgdGhlcmUgd2FzIGEgYGt1bm1hcF9sb2NhbChibG9jaylgIGluIHRoZSBvcmlnaW5hbCBjb2RlLCAqYmVmb3JlKiB0aGUgc2Vjb25kIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGNhbGwuIEFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgYSBga3VubWFwX2xvY2FsKHBibG9jaylgIGFmdGVyIHRoZSBzZWNvbmQgYGFmc19kaXJfZmluZF9ibG9ja2AuICBBaGEhIFRoYXQgaW5pdGlhbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgd2FzIG1hbnVhbGx5IHVubWFwcGluZyB0aGUgdmVyeSBgYmxvY2tgIHRoYXQncyBub3cgYWxzbyB1bm1hcHBlZCBieSB0aGUgKnNlY29uZCogY2FsbCB0byBgYWZzX2Rpcl9maW5kX2Jsb2NrYC4gSXQgbG9va3MgbGlrZSB0aGF0IG1hbnVhbCB1bm1hcCB3YXMgYWxyZWFkeSBkb25lLCBidXQgYGl0ZXItXHUwMDNlYmxvY2tgIHdhcyAqbm90KiByZXNldCB0byBgTlVMTGAgdG8gaW5kaWNhdGUgdGhhdCBgYmxvY2tgIHdhcyBubyBsb25nZXIgaW4gdXNlLlxuXG5TbyB0aGUgc2Vjb25kIGNhbGwgdG8gYGFmc19kaXJfZmluZF9ibG9ja2Agd2FzIGRvaW5nIHRoaXM6XG5cbmBgYGNcblx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcblx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG5cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG5cdH1cbmBgYFxuXG5TaW5jZSB0aGUgcHJldmlvdXMgY2FsbCB0byBga3VubWFwX2xvY2FsYCB3YXNuJ3QgYmVpbmcgYWNjb3VudGVkIGZvciBpbiB0aGUgc3RhdGUgb2YgYGl0ZXItXHUwMDNlYmxvY2tgLCBpdCByZXN1bHRlZCBpbiBhIGRvdWJsZS11bm1hcCEgV2UgaGF2ZSBhbiBpc3N1ZS5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQuIFJlbW92aW5nIHRoZSBtYW51YWwgYGt1bm1hcF9sb2NhbChibG9jaylgIGFuZCBga3VubWFwX2xvY2FsKHBibG9jaylgIGFuZCByZWx5aW5nIG9uIHRoZSB1bm1hcHBpbmcgYmVpbmcgaGFuZGxlZCBieSBgYWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKWAgKHdoaWNoIGlzIGNhbGxlZCBpbiBgb3V0X3VubWFwYCBhbmQgaW5zaWRlIGBhZnNfZGlyX2ZpbmRfYmxvY2tgKS4gVGhhdCB3YXkgaXQncyBvbmx5IHVubWFwcGVkIG9uY2UsIGFzIGV4cGVjdGVkLlxuXG5UaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4IGZvciBhIGRvdWJsZS11bm1hcCBidWcgaW4gQUZTIGRpcmVjdG9yeSBlZGl0aW5nLiBBbmQgeWVzLCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmc9dHJ1ZS4gSSBiZXR0ZXIgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuLi4gQWgsIGBDT05GSUdfQUZTX0ZTYCBpcyB0aGUgbWFpbiBvbmUuIEkgaGF2ZSBpdC4gR29vZC4gVGhpcyBpcyByZWFkeSB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjIzLjQ3ODM0MTcwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzNjk4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MjMuNjUxNzE3MjY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4OTE2MzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYEFGU19GU2AgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgYEFGU19GU2AuIFRoYXQncyB0aGUgYmFzZWxpbmUsIG5vdyBsZXQncyBmaWd1cmUgb3V0IHdoYXQncyByZWxldmFudCB3aXRoaW4gdGhhdCBjb250ZXh0LiBUaGUgbWFpbiBmdW5jdGlvbiB0aGF0J3MgYmVlbiBtb2RpZmllZCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGlzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYC4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSwgaG93IGl0J3MgYmVlbiBjaGFuZ2VkLCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhvc2UgY2hhbmdlcy4gR2l2ZW4gdGhhdCBpdCBkZWFscyB3aXRoIGRpcmVjdG9yeSByZW1vdmFsIHdpdGhpbiBBRlMsIGl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGZpbGUgc3lzdGVtJ3MgaW50ZWdyaXR5IGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBOb3cgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHNlZSB3aGF0IHRoZSBjYWxsIHBhdGggaXMsIHRoYXQgdGVsbHMgbWUgdGhlIGRpZmZlcmVudCBwbGFjZXMgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGlzIHVzZWQsIHRvIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgdHJpZ2dlcmVkIGZyb20uIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0byBpdC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBtYXAgb3V0IGl0cyBcImZhbWlseSB0cmVlXCIgd2l0aGluIHRoZSBsYXJnZXIgQUZTIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MjcuMjQwODgzNjQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE2NjM2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz0xMzY4PXN0YXRpYyB2b2lkIGFmc19ybWRpcl9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTM4MC1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyLmM6MTM4MTpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9wLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTM4Mi1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9ybWRpcik7XFxuLS1cXG5mcy9hZnMvZGlyLmM9MTUxNj1zdGF0aWMgdm9pZCBhZnNfdW5saW5rX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xNTI2LVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXIuYzoxNTI3OlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b3AtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xNTI4LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XFxuLS1cXG5mcy9hZnMvZGlyLmM9MTg4OD1zdGF0aWMgdm9pZCBhZnNfcmVuYW1lX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xOTEzLVxcdCAgICBvcmlnX2R2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBvcmlnX2R2cC1cXHUwMDNlZHZfYmVmb3JlICsgb3JpZ19kdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXIuYzoxOTE0OlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFxcdTAwMjZvbGRfZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTE5MTUtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzApO1xcbi0tXFxuZnMvYWZzL2Rpci5jLTE5MjQtXFx0XFx0aWYgKCFvcC1cXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcXG5mcy9hZnMvZGlyLmM6MTkyNTpcXHRcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKG5ld19kdm5vZGUsIFxcdTAwMjZuZXdfZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTE5MjYtXFx0XFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmM9MjQxPXZvaWQgYWZzX2VkaXRfZGlyX2FkZChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5Mi0gKi9cXG5mcy9hZnMvZGlyX2VkaXQuYzozOTM6dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmM9MjM9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3JlbmFtZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmMtNDEtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpIHtcXG5mcy9hZnMvZGlyX3NpbGx5LmM6NDI6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvbGQtXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyX3NpbGx5LmMtNDMtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfc2lsbHlfMCk7XFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmM9MTc2PXN0YXRpYyB2b2lkIGFmc19zaWxseV91bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyX3NpbGx5LmM6MTg1OlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b3AtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXJfc2lsbHkuYy0xODYtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfdW5saW5rKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTExMTg9ZXh0ZXJuIHZvaWQgYWZzX2VkaXRfZGlyX2FkZChzdHJ1Y3QgYWZzX3Zub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICosIHN0cnVjdCBhZnNfZmlkICosXFxuZnMvYWZzL2ludGVybmFsLmgtMTExOS1cXHRcXHRcXHQgICAgIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbik7XFxuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTIxLXZvaWQgYWZzX2VkaXRfZGlyX3VwZGF0ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjI3LjQxMjU1MzIxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM1NDA2MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRlMgRGlyZWN0b3J5IFJlbW92YWwgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYGFmc19ybWRpcl9lZGl0X2RpcmAsIGBhZnNfdW5saW5rX2VkaXRfZGlyYCwgYGFmc19yZW5hbWVfZWRpdF9kaXJgLCBhbmQgZXZlbiB0aG9zZSBzaWxseSByZW5hbWUgYW5kIHVubGluayB2YXJpYW50cy4gVGhlc2UgYXJlIGFsbCB0aGUgZXhwZWN0ZWQgb3BlcmF0aW9ucyBmb3IgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbjogcmVtb3ZpbmcgYW4gZW1wdHkgZGlyZWN0b3J5LCB1bmxpbmtpbmcgKHJlbW92aW5nIGEgZmlsZSksIGFuZCByZW5hbWluZyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gVGhhdCBtYWtlcyBzZW5zZS5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBhdHRlbnRpb24gbmF0dXJhbGx5IHR1cm5zIHRvIGEgZmV3IGtleSBmdW5jdGlvbnMuIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyBvYnZpb3VzbHkgY3JpdGljYWwuIFRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIGFjdHVhbGx5IG5hdmlnYXRlZC4gSXQgbG9va3MgbGlrZSBgYWZzX2Rpcl9maW5kX2Jsb2NrYCwgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAsIGFuZCBgYWZzX2Rpcl9zZWFyY2hgIGFyZSBkZWVwbHkgaW52b2x2ZWQgaW4gdGhhdCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGlyZWN0b3J5IGJsb2NrcyBhbmQgYnVja2V0cyBhcmUgc2VhcmNoZWQgdG8gZmluZCBlbnRyaWVzIHRoYXQgY2FuIHRoZW4gYmUgcmVtb3ZlZC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtLiBBaCwgYGFmc19lZGl0X2Rpcl9yZW1vdmVgICppcyogZXhwb3J0ZWQgaW4gYGludGVybmFsLmhgIGFuZCBpcyBkZWZpbmVkIGluIGBkaXJfZWRpdC5jYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoaXMgaXMgYSBrZXkgZnVuY3Rpb24uIEkgYWxzbyBzZWUgdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQgYW5kIGV4cG9ydGVkLCBzbyB0aGV5J3JlIHdvcnRoIGEgY2xvc2VyIGxvb2sgYXMgd2VsbC5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCB0byBzZWUgaG93IHRoYXQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MzIuNDQ3OTYyNDQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc3NDEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGlyX3NlYXJjaF9idWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDIyLVxcdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xcbmZzL2Fmcy9kaXJfZWRpdC5jOjQyMzpcXHRmb3VuZCA9IGFmc19kaXJfc2VhcmNoX2J1Y2tldChcXHUwMDI2aXRlciwgbmFtZSwgXFx1MDAyNmZpZCk7XFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDI0LVxcdGlmIChmb3VuZCBcXHUwMDNjIDApIHtcXG4tLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmM9Njc9dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTExOS0gKi9cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyMDppbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMTIxLVxcdFxcdFxcdCAgc3RydWN0IGFmc19maWQgKl9maWQpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTE4ND1pbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMjExLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MjEyOlxcdFxcdHJldCA9IGFmc19kaXJfc2VhcmNoX2J1Y2tldChcXHUwMDI2aXRlciwgbmFtZSwgX2ZpZCk7XFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0yMTMtXFx0XFx0dXBfcmVhZChcXHUwMDI2ZHZub2RlLVxcdTAwM2V2YWxpZGF0ZV9sb2NrKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTExMzA9dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjExMzE6aW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTMyLVxcdFxcdFxcdCAgc3RydWN0IGFmc19maWQgKl9maWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODozMi41NDc3NDE0NjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyODk0MjYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGUyBEaXJlY3RvcnkgRWRpdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIGlzIGRlZmluaXRlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXNpcyBoZXJlLiBMZXQncyBzZWUsIHdoYXQgb3RoZXIgc3ltYm9scyBhcmUgcmVsZXZhbnQ/IEknbSB0aGlua2luZzpcblxuKiAgIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCAtIG9idmlvdXNseSwgc2luY2UgaXQncyB0aGUgdGFyZ2V0IG9mIHRoZSBmaXhcbiogICBgYWZzX2Rpcl9maW5kX2Jsb2NrYCAtIGNvdWxkIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBibG9ja3MgYXJlIGxvY2F0ZWQgb3IgbWFuYWdlZFxuKiAgIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIC0gdGhlIGJ1Y2tldCBzZWFyY2ggaXMgd2hlcmUgd2Ugc3RhcnRlZFxuXG5SaWdodCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZy4gSXQncyBhIHN0cmFpZ2h0LXVwIGZ1bmN0aW9uYWwgZml4LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgLSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgb3RoZXIgcmVsYXRlZCBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdGhhdCB0aGV5J3ZlIGFkZGVkIHRoaXMgYGFmc19kaXJfZW5kX2l0ZXJgIGhlbHBlci4gSXQgbG9va3MgbGlrZSBpdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCBiYXNpY2FsbHkgcmVwbGFjaW5nIHRob3NlIG1hbnVhbCBga3VubWFwX2xvY2FsYCBjYWxscyB0aGF0IHdlcmUgY2F1c2luZyB0aGUgZG91YmxlLXVubWFwcGluZyBwcm9ibGVtLiBTbWFydCwgdGhhdCBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGlzc3Vlcy5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYEFGU19GU2AgY29uZmlnIGlzIHN1ZmZpY2llbnQgZm9yIGVuYWJsaW5nIHRoaXMgZml4LiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBvdGhlciBjb25maWdzIG5lZWRlZCBoZXJlLlxuXG5BbHJpZ2h0LCBsb29rcyBnb29kLiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwOCwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MzcuNTc2Njg3MTQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMzkzNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 20:20:41 +0000 UTC FinishedAt: 2026-07-30 20:38:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "05c09c9c8a79d5539fef30d42e732eba90a15dcf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "05c09c9c8a79d5539fef30d42e732eba90a15dcf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "AFS_FS" ], "series_id": "4ce9225d-e3fd-440a-98c3-54c5accf0e88" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "afs_edit_dir_remove", "afs_dir_find_block", "afs_dir_search_bucket" ], "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+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0FGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Fmc19lZGl0X2Rpcl9yZW1vdmUmIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9maW5kX2Jsb2NrJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfc2VhcmNoX2J1Y2tldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGRvdWJsZS11bm1hcCBidWcgaW4gQUZTIGRpcmVjdG9yeSBlZGl0aW5nIChhZnNfZWRpdF9kaXJfcmVtb3ZlKSBieSBpbnRyb2R1Y2luZyBhIGhlbHBlciBhZnNfZGlyX2VuZF9pdGVyIHRoYXQgc2FmZWx5IHVubWFwcyB0aGUgYmxvY2sgYW5kIGNsZWFycyB0aGUgcG9pbnRlciwgcmVwbGFjaW5nIG1hbnVhbCBrdW5tYXBfbG9jYWwgY2FsbHMgdGhhdCBjb3VsZCBsZWFkIHRvIGRvdWJsZS11bm1hcHBpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0M2ZmM2Q3NDNjNTExYjViYWMyNDIxYWEyMDRlNjkwZjdjMTY1NTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6Mzg6MDQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xuaW5kZXggM2VhZDM2YTA3MDQ4Ny4uYzMxMzAzMDU5NDQ0YSAxMDA2NDRcbi0tLSBhL2ZzL2Fmcy9kaXJfZWRpdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX2VkaXQuY1xuQEAgLTQ0Miw3ICYjNDM7NDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiBcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiBcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4tXHRcdGdvdG8gZXJyb3JfdW5tYXA7XG4mIzQzO1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENsZWFyIHRoZSBjb25zdGl0dWVudCBlbnRyaWVzLiAqL1xuIFx0bmV4dCA9IGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcbiBcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCYjMzk7cyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG5AQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCYjMzQ7JWxseDolbGx4OiV4OiBub3QgcHJldiBpbiBjaGFpbiBiPSV4IHA9JXgsJXggZT0leCAlKnNcJiMzNDssXG4gXHRcdFx0XHR2bm9kZS1cdTAwM2VmaWQudmlkLCB2bm9kZS1cdTAwM2VmaWQudm5vZGUsIHZub2RlLVx1MDAzZWZpZC51bmlxdWUsXG4gXHRcdFx0XHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxuQEAgLTQ5Myw3ICYjNDM7NDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICYjNDM7NTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdF9kZWJ1ZyhcJiMzNDtSZW1vdmUgJXMgZnJvbSAldVsldV1cJiMzNDssIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcik7XG4gXHRrdW5tYXBfbG9jYWwobWV0YSk7XG4gXHRfbGVhdmUoXCYjMzQ7XCYjMzQ7KTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Li4xMWViZGZmZmNiMWQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuQEAgLTc1LDEwICYjNDM7NzUsNyBAQCB1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibFxuIFxuIFx0X2VudGVyKFwmIzM0OyV6eCwlZFwmIzM0OywgYmxvY2ssIHNsb3QpO1xuIFxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbiYjNDM7XHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xuIFxuIFx0aWYgKGR2bm9kZS1cdTAwM2VkaXJlY3Rvcnlfc2l6ZSBcdTAwM2MgYmxlbmQpXG4gXHRcdGdvdG8gZmFpbDtcbkBAIC0xNzMsMTIgJiM0MzsxNzAsOCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuIFxuIFx0cmV0ID0gLUVOT0VOVDtcbiBmb3VuZDpcbi1cdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4tXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbi1cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4tXHR9XG4tXG4gYmFkOlxuJiM0MztcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXHRpZiAocmV0ID09IC1FU1RBTEUpXG4gXHRcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xuIFx0X2xlYXZlKFwmIzM0OyA9ICVkXCYjMzQ7LCByZXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcbmluZGV4IDI5MDg3M2JhYzg5YjMuLjMzMDY1NGVkMTZlY2UgMTAwNjQ0XG4tLS0gYS9mcy9hZnMvaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvYWZzL2ludGVybmFsLmhcbkBAIC0xMTMzLDYgJiM0MzsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGFmc19kaXJfZW5kX2l0ZXIoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlcilcbiYjNDM7e1xuJiM0MztcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4mIzQzO1x0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4mIzQzO1x0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkaXJfc2lsbHkuY1xuICAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtBRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthZnNfZWRpdF9kaXJfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2Fmc19kaXJfZmluZF9ibG9jayYjMzQ7LAogICAgJiMzNDthZnNfZGlyX3NlYXJjaF9idWNrZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZyAoYWZzX2VkaXRfZGlyX3JlbW92ZSkgYnkgaW50cm9kdWNpbmcgYSBoZWxwZXIgYWZzX2Rpcl9lbmRfaXRlciB0aGF0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIHJlcGxhY2luZyBtYW51YWwga3VubWFwX2xvY2FsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byBkb3VibGUtdW5tYXBwaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDNmZjNkNzQzYzUxMWI1YmFjMjQyMWFhMjA0ZTY5MGY3YzE2NTUxOQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDMwIDIwOjM4OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuYwppbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NAotLS0gYS9mcy9hZnMvZGlyX2VkaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX2VkaXQuYwpAQCAtNDQyLDcgJiM0Mzs0NDIsNyBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJLyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi8KIAlkZSA9ICZhbXA7YmxvY2stJmd0O2RpcmVudHNbc2xvdF07CiAJaWYgKGRlLSZndDt1LnZhbGlkICE9IDEpCi0JCWdvdG8gZXJyb3JfdW5tYXA7CiYjNDM7CQlnb3RvIGVycm9yOwogCiAJdHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsCiAJCQkgICBudG9obChkZS0mZ3Q7dS52bm9kZSksIG50b2hsKGRlLSZndDt1LnVuaXF1ZSksCkBAIC00NTgsNyAmIzQzOzQ1OCw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi8KIAluZXh0ID0gZGUtJmd0O3UuaGFzaF9uZXh0OwogCW1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTsKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCiAJLyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLSZndDtwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZAogCSAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQmIzM5O3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LgpAQCAtNDg1LDcgJiM0Mzs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJCXBkZSA9ICZhbXA7cGJsb2NrLSZndDtkaXJlbnRzW3BzXTsKIAkJcHJldl9uZXh0ID0gcGRlLSZndDt1Lmhhc2hfbmV4dDsKIAkJaWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHsKLQkJCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCQkJcHJfd2FybigmIzM0OyVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzJiMzNDssCiAJCQkJdm5vZGUtJmd0O2ZpZC52aWQsIHZub2RlLSZndDtmaWQudm5vZGUsIHZub2RlLSZndDtmaWQudW5pcXVlLAogCQkJCWl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksCkBAIC00OTMsNyAmIzQzOzQ5MSw2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJcGRlLSZndDt1Lmhhc2hfbmV4dCA9IG5leHQ7Ci0JCWt1bm1hcF9sb2NhbChwYmxvY2spOwogCX0KIAogCW5ldGZzX3NpbmdsZV9tYXJrX2lub2RlX2RpcnR5KCZhbXA7dm5vZGUtJmd0O25ldGZzLmlub2RlKTsKQEAgLTUwMywxOCAmIzQzOzUwMCwxNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsCiAJX2RlYnVnKCYjMzQ7UmVtb3ZlICVzIGZyb20gJXVbJXVdJiMzNDssIG5hbWUtJmd0O25hbWUsIGIsIHNsb3QpOwogCiBvdXRfdW5tYXA6CiYjNDM7CWFmc19kaXJfZW5kX2l0ZXIoJmFtcDtpdGVyKTsKIAlrdW5tYXBfbG9jYWwobWV0YSk7CiAJX2xlYXZlKCYjMzQ7JiMzNDspOwogCXJldHVybjsKIAogYWxyZWFkeV9pbnZhbGlkYXRlZDoKLQlrdW5tYXBfbG9jYWwoYmxvY2spOwogCXRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLAogCQkJICAgMCwgMCwgMCwgMCwgbmFtZS0mZ3Q7bmFtZSk7CiAJZ290byBvdXRfdW5tYXA7CiAKLWVycm9yX3VubWFwOgotCWt1bm1hcF9sb2NhbChibG9jayk7CiBlcnJvcjoKIAl0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvciwKIAkJCSAgIDAsIDAsIDAsIDAsIG5hbWUtJmd0O25hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9zZWFyY2guYyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmMKaW5kZXggMTA0NDExYzA2OTJmNS4uMTFlYmRmZmZjYjFkMyAxMDA2NDQKLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvZGlyX3NlYXJjaC5jCkBAIC03NSwxMCAmIzQzOzc1LDcgQEAgdW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmwKIAogCV9lbnRlcigmIzM0OyV6eCwlZCYjMzQ7LCBibG9jaywgc2xvdCk7CiAKLQlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKLQkJa3VubWFwX2xvY2FsKGl0ZXItJmd0O2Jsb2NrKTsKLQkJaXRlci0mZ3Q7YmxvY2sgPSBOVUxMOwotCX0KJiM0MzsJYWZzX2Rpcl9lbmRfaXRlcihpdGVyKTsKIAogCWlmIChkdm5vZGUtJmd0O2RpcmVjdG9yeV9zaXplICZsdDsgYmxlbmQpCiAJCWdvdG8gZmFpbDsKQEAgLTE3MywxMiAmIzQzOzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAKIAlyZXQgPSAtRU5PRU5UOwogZm91bmQ6Ci0JaWYgKGl0ZXItJmd0O2Jsb2NrKSB7Ci0JCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7Ci0JCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKLQl9Ci0KIGJhZDoKJiM0MzsJYWZzX2Rpcl9lbmRfaXRlcihpdGVyKTsKIAlpZiAocmV0ID09IC1FU1RBTEUpCiAJCWFmc19pbnZhbGlkYXRlX2RpcihpdGVyLSZndDtkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTsKIAlfbGVhdmUoJiMzNDsgPSAlZCYjMzQ7LCByZXQpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL2ludGVybmFsLmggYi9mcy9hZnMvaW50ZXJuYWwuaAppbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NAotLS0gYS9mcy9hZnMvaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9hZnMvaW50ZXJuYWwuaApAQCAtMTEzMyw2ICYjNDM7MTEzMywxNCBAQCBpbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLAogaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsCiAJCSAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBhZnNfZGlyX2VuZF9pdGVyKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIpCiYjNDM7ewomIzQzOwlpZiAoaXRlci0mZ3Q7YmxvY2spIHsKJiM0MzsJCWt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jayk7CiYjNDM7CQlpdGVyLSZndDtibG9jayA9IE5VTEw7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiAvKgogICogZGlyX3NpbGx5LmMKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQ0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmFjdG9yaW5nIEFGUyBEaXJlY3RvcnkgSXRlcmF0aW9uIENsZWFudXAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYSBjbGVhbi11cCBvZiBzb21lIEFGUyBkaXJlY3RvcnkgaXRlcmF0aW9uIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEl0IGFwcGVhcnMgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIG5ldyBoZWxwZXIgZnVuY3Rpb24sIGBhZnNfZGlyX2VuZF9pdGVyYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gbmVhdGx5IHVubWFwIHRoZSBgaXRlci0mZ3Q7YmxvY2tgIGFuZCB0aGVuIG51bGxpZnkgdGhlIHBvaW50ZXIuIFRoZSBiZW5lZml0PyBJdCBzZWVtcyB3ZSYjMzk7cmUgY2VudHJhbGl6aW5nIHRoaXMga2luZCBvZiB1bm1hcHBpbmcgb3BlcmF0aW9uLgoKR29vZCwgZ29vZC4gVGhleSBhcmUgYmFzaWNhbGx5IHJlcGxhY2luZyB0aG9zZSBtYW51YWwgYGt1bm1hcF9sb2NhbChpdGVyLSZndDtibG9jaylgIGNhbGxzIHdpdGggdGhlIG5ldyBoZWxwZXIuIFRoaXMgbWFrZXMgc2Vuc2UgZnJvbSBhIG1haW50YWluYWJpbGl0eSBzdGFuZHBvaW50LiBGZXdlciBwbGFjZXMgdG8gZ2V0IGl0IHdyb25nLiBOb3csIGluIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCwgSSBzZWUgdGhleSYjMzk7dmUgcmVtb3ZlZCBhIGJ1bmNoIG9mIHRoZSBga3VubWFwX2xvY2FsKGJsb2NrKWAgYW5kIGBrdW5tYXBfbG9jYWwocGJsb2NrKWAgY2FsbHMsIGFuZCB0aGV5JiMzOTtyZSByZWx5aW5nIG9uIGBhZnNfZGlyX2VuZF9pdGVyKCZhbXA7aXRlcilgIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBpcyBsYWJlbGVkIGFzIGBvdXRfdW5tYXBgLgoKV2FpdCBhIG1pbnV0ZSwgYGJsb2NrYCBhbmQgYHBibG9ja2AuLi4gd2VyZW4mIzM5O3QgdGhvc2UgbWFwcGVkIGJ5IGBhZnNfZGlyX2ZpbmRfYmxvY2tgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBkcmlsbCBkb3duIGludG8gYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGFuZCBzZWUgaG93IHRob3NlIGJsb2NrcyBhcmUgaGFuZGxlZC4gVGltZSB0byBicmluZyB1cCBteSB0cnVzdGVkIGBkZWZhdWx0X2FwaTpyZWFkLWZpbGVgIHRvb2wgYW5kIGNoZWNrIGBmcy9hZnMvZGlyX2VkaXQuY2AgYXJvdW5kIHRoZSBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgZnVuY3Rpb24gdG8gY2xhcmlmeSB0aGUgbWFwcGluZyBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2Fmcy9kaXJfZWRpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDIwOlx0XHRcdHJldHVybjtcbiA0MjE6XHRcbiA0MjI6XHRcdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xuIDQyMzpcdFx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgXHUwMDI2ZmlkKTtcbiA0MjQ6XHRcdGlmIChmb3VuZCBcdTAwM2MgMCkge1xuIDQyNTpcdFx0XHQvKiBEaWRuJiMzOTt0IGZpbmQgdGhlIGRpcmVudCB0byBjbG9iYmVyLiAgUmUtZG93bmxvYWQuICovXG4gNDI2Olx0XHRcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX25vZW50LFxuIDQyNzpcdFx0XHRcdFx0ICAgMCwgMCwgMCwgMCwgbmFtZS1cdTAwM2VuYW1lKTtcbiA0Mjg6XHRcdFx0YWZzX2ludmFsaWRhdGVfZGlyKHZub2RlLCBhZnNfZGlyX2ludmFsaWRfZWRpdF9yZW1fd3JvbmdfbmFtZSk7XG4gNDI5Olx0XHRcdGdvdG8gb3V0X3VubWFwO1xuIDQzMDpcdFx0fVxuIDQzMTpcdFxuIDQzMjpcdFx0ZW50cnkgPSBmb3VuZDtcbiA0MzM6XHRcdGIgICAgPSBlbnRyeSAvIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xuIDQzNDpcdFx0c2xvdCA9IGVudHJ5ICUgQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XG4gNDM1Olx0XG4gNDM2Olx0XHRibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBiKTtcbiA0Mzc6XHRcdGlmICghYmxvY2spXG4gNDM4Olx0XHRcdGdvdG8gZXJyb3I7XG4gNDM5Olx0XHRpZiAoIXRlc3RfYml0KEFGU19WTk9ERV9ESVJfVkFMSUQsIFx1MDAyNnZub2RlLVx1MDAzZWZsYWdzKSlcbiA0NDA6XHRcdFx0Z290byBhbHJlYWR5X2ludmFsaWRhdGVkO1xuIDQ0MTpcdFxuIDQ0MjpcdFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cbiA0NDM6XHRcdGRlID0gXHUwMDI2YmxvY2stXHUwMDNlZGlyZW50c1tzbG90XTtcbiA0NDQ6XHRcdGlmIChkZS1cdTAwM2V1LnZhbGlkICE9IDEpXG4gNDQ1Olx0XHRcdGdvdG8gZXJyb3I7XG4gNDQ2Olx0XG4gNDQ3Olx0XHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcbiA0NDg6XHRcdFx0XHQgICBudG9obChkZS1cdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXHUwMDNldS51bmlxdWUpLFxuIDQ0OTpcdFx0XHRcdCAgIG5hbWUtXHUwMDNlbmFtZSk7XG4gNDUwOlx0XG4gNDUxOlx0XHQvKiBBZGp1c3QgdGhlIGJpdG1hcC4gKi9cbiA0NTI6XHRcdGFmc19jbGVhcl9jb250aWdfYml0cyhibG9jaywgc2xvdCwgaXRlci5ucl9zbG90cyk7XG4gNDUzOlx0XG4gNDU0Olx0XHQvKiBBZGp1c3QgdGhlIGFsbG9jYXRpb24gY291bnRlci4gKi9cbiA0NTU6XHRcdGlmIChiIFx1MDAzYyBBRlNfRElSX0JMT0NLU19XSVRIX0NUUilcbiA0NTY6XHRcdFx0bWV0YS1cdTAwM2VtZXRhLmFsbG9jX2N0cnNbYl0gJiM0Mzs9IGl0ZXIubnJfc2xvdHM7XG4gNDU3Olx0XG4gNDU4Olx0XHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cbiA0NTk6XHRcdG5leHQgPSBkZS1cdTAwM2V1Lmhhc2hfbmV4dDtcbiA0NjA6XHRcdG1lbXNldChkZSwgMCwgc2l6ZW9mKCpkZSkgKiBpdGVyLm5yX3Nsb3RzKTtcbiA0NjE6XHRcbiA0NjI6XHRcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxuIDQ2MzpcdFx0ICogaW5kZXggaXMgcHJldmlvdXM7IG90aGVyd2lzZSBpdCYjMzk7cyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXG4gNDY0Olx0XHQgKi9cbiA0NjU6XHRcdGlmICghaXRlci5wcmV2X2VudHJ5KSB7XG4gNDY2Olx0XHRcdF9fYmUxNiBwcmV2X25leHQgPSBtZXRhLVx1MDAzZW1ldGEuaGFzaHRhYmxlW2l0ZXIuYnVja2V0XTtcbiA0Njc6XHRcbiA0Njg6XHRcdFx0aWYgKHVubGlrZWx5KHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpKSB7XG4gNDY5Olx0XHRcdFx0cHJfd2FybihcJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBoZWFkIG9mIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wmIzM0OyxcbiA0NzA6XHRcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiA0NzE6XHRcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG4gNDcyOlx0XHRcdFx0XHRuYW1lLVx1MDAzZWxlbiwgbmFtZS1cdTAwM2VuYW1lKTtcbiA0NzM6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDQ3NDpcdFx0XHR9XG4gNDc1Olx0XHRcdG1ldGEtXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdID0gbmV4dDtcbiA0NzY6XHRcdH0gZWxzZSB7XG4gNDc3Olx0XHRcdHVuc2lnbmVkIGludCBwYiA9IGl0ZXIucHJldl9lbnRyeSAvIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xuIDQ3ODpcdFx0XHR1bnNpZ25lZCBpbnQgcHMgPSBpdGVyLnByZXZfZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcbiA0Nzk6XHRcdFx0X19iZTE2IHByZXZfbmV4dDtcbiA0ODA6XHRcbiA0ODE6XHRcdFx0cGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFx1MDAyNml0ZXIsIHBiKTtcbiA0ODI6XHRcdFx0aWYgKCFwYmxvY2spXG4gNDgzOlx0XHRcdFx0Z290byBlcnJvcjtcbiA0ODQ6XHRcdFx0cGRlID0gXHUwMDI2cGJsb2NrLVx1MDAzZWRpcmVudHNbcHNdO1xuIDQ4NTpcdFx0XHRwcmV2X25leHQgPSBwZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gNDg2Olx0XHRcdGlmIChwcmV2X25leHQgIT0gaHRvbnMoZW50cnkpKSB7XG4gNDg3Olx0XHRcdFx0cHJfd2FybihcJiMzNDslbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wmIzM0OyxcbiA0ODg6XHRcdFx0XHRcdHZub2RlLVx1MDAzZWZpZC52aWQsIHZub2RlLVx1MDAzZWZpZC52bm9kZSwgdm5vZGUtXHUwMDNlZmlkLnVuaXF1ZSxcbiA0ODk6XHRcdFx0XHRcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXG4gNDkwOlx0XHRcdFx0XHRuYW1lLVx1MDAzZWxlbiwgbmFtZS1cdTAwM2VuYW1lKTtcbiA0OTE6XHRcdFx0XHRnb3RvIGVycm9yO1xuIDQ5MjpcdFx0XHR9XG4gNDkzOlx0XHRcdHBkZS1cdTAwM2V1Lmhhc2hfbmV4dCA9IG5leHQ7XG4gNDk0Olx0XHR9XG4gNDk1Olx0XG4gNDk2Olx0XHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG4gNDk3Olx0XG4gNDk4Olx0XHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KFx1MDAyNnZub2RlLVx1MDAzZW5ldGZzLmlub2RlLCB2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uKTtcbiA0OTk6XHRcdGFmc19zdGF0X3Yodm5vZGUsIG5fZGlyX3JtKTtcbiA1MDA6XHRcdF9kZWJ1ZyhcJiMzNDtSZW1vdmUgJXMgZnJvbSAldVsldV1cJiMzNDssIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gNTAxOlx0XG4gNTAyOlx0b3V0X3VubWFwOlxuIDUwMzpcdFx0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiA1MDQ6XHRcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiA1MDU6XHRcdF9sZWF2ZShcJiMzNDtcJiMzNDspO1xuIDUwNjpcdFx0cmV0dXJuO1xuIDUwNzpcdFxuIDUwODpcdGFscmVhZHlfaW52YWxpZGF0ZWQ6XG4gNTA5Olx0XHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcbiA1MTA6XHRcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDUxMTpcdFx0Z290byBvdXRfdW5tYXA7XG4gNTEyOlx0XG4gNTEzOlx0ZXJyb3I6XG4gNTE0Olx0XHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiA1MTU6XHRcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuIDUxNjpcdFx0Z290byBvdXRfdW5tYXA7XG4gNTE3Olx0fVxuIDUxODpcdFxuIDUxOTpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgTWVtb3J5IE1hcHBpbmcgSXNzdWUgaW4gdGhlIEFGUyBGaWxlc3lzdGVtKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJiMzOTtyZSBmaXhpbmcgYSBidWcgcmVsYXRlZCB0byBga3VubWFwX2xvY2FsYC4gVGhlIGtleSBpcyB0aGF0IGBrdW5tYXBfbG9jYWxgIHdhcyBpbmNvcnJlY3RseSBiZWluZyBjYWxsZWQgb24gYGJsb2NrYCBvciBgcGJsb2NrYC4gVGhlIGltcGxpY2F0aW9uIGhlcmUgaXMgdGhhdCB0aG9zZSBwb2ludGVycywgYGJsb2NrYCBvciBgcGJsb2NrYCwgYXJlIGJlaW5nIHRyZWF0ZWQgYXMgaWYgdGhleSBhcmUgbWVtb3J5IG1hcHBlZCB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgYGttYXBfbG9jYWxgLCB3aGljaCBpcyBpbmNvcnJlY3QuIEFuZCwgZXZlbiBtb3JlIGltcG9ydGFudCwgdGhlc2UgcG9pbnRlcnMgY29tZSBmcm9tIGBhZnNfZGlyX2ZpbmRfYmxvY2tgLgoKSG9sZCBvbiwgc29tZXRoaW5nIGRvZXNuJiMzOTt0IHF1aXRlIHNpdCByaWdodC4gYGFmc19kaXJfZmluZF9ibG9ja2AgKnJldHVybnMqIGEgcG9pbnRlciwgcmlnaHQ/IEJ1dCBkb2VzbiYjMzk7dCBpdCBhbHNvIHN0b3JlIHRoZSBtYXBwZWQgYmxvY2sgaW4gYGl0ZXItJmd0O2Jsb2NrYD8gVGhhdCYjMzk7cyB0aGUgcGFydCB0aGF0IG5lZWRzIHRvIGJlIHZlcmlmaWVkLiBXZSBuZWVkIHRvIGNvbmZpcm0gaG93IGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGlzIGhhbmRsaW5nIHRoZSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcgb2YgdGhpcyBtZW1vcnkuIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIHN0ZW1zIGZyb20gYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSByZXR1cm5lZCBwb2ludGVyLgoKTGV0JiMzOTtzIGRpdmUgaW50byBgZnMvYWZzL2Rpcl9zZWFyY2guY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9hZnMvZGlyX3NlYXJjaC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MDpcdFx0aXRlci1cdTAwM2VidWNrZXQgPSBhZnNfZGlyX2hhc2hfbmFtZShuYW1lKTtcbiAgNjE6XHRcdHJldHVybiBhZnNfZGlyX3Jlc2V0X2l0ZXIoaXRlcik7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdC8qXG4gIDY1Olx0ICogR2V0IGEgc3BlY2lmaWMgYmxvY2suXG4gIDY2Olx0ICovXG4gIDY3Olx0dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXG4gIDY4Olx0e1xuICA2OTpcdFx0c3RydWN0IGZvbGlvX3F1ZXVlICpmcSA9IGl0ZXItXHUwMDNlZnE7XG4gIDcwOlx0XHRzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUgPSBpdGVyLVx1MDAzZWR2bm9kZTtcbiAgNzE6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDcyOlx0XHRzaXplX3QgYmxwb3MgPSBibG9jayAqIEFGU19ESVJfQkxPQ0tfU0laRTtcbiAgNzM6XHRcdHNpemVfdCBibGVuZCA9IChibG9jayAmIzQzOyAxKSAqIEFGU19ESVJfQkxPQ0tfU0laRSwgZnBvcyA9IGl0ZXItXHUwMDNlZnBvcztcbiAgNzQ6XHRcdGludCBzbG90ID0gaXRlci1cdTAwM2VmcV9zbG90O1xuICA3NTpcdFxuICA3NjpcdFx0X2VudGVyKFwmIzM0OyV6eCwlZFwmIzM0OywgYmxvY2ssIHNsb3QpO1xuICA3NzpcdFxuICA3ODpcdFx0YWZzX2Rpcl9lbmRfaXRlcihpdGVyKTtcbiAgNzk6XHRcbiAgODA6XHRcdGlmIChkdm5vZGUtXHUwMDNlZGlyZWN0b3J5X3NpemUgXHUwMDNjIGJsZW5kKVxuICA4MTpcdFx0XHRnb3RvIGZhaWw7XG4gIDgyOlx0XG4gIDgzOlx0XHRpZiAoIWZxIHx8IGJscG9zIFx1MDAzYyBmcG9zKSB7XG4gIDg0Olx0XHRcdGZxID0gZHZub2RlLVx1MDAzZWRpcmVjdG9yeTtcbiAgODU6XHRcdFx0c2xvdCA9IDA7XG4gIDg2Olx0XHRcdGZwb3MgPSAwO1xuICA4NzpcdFx0fVxuICA4ODpcdFxuICA4OTpcdFx0LyogU2VhcmNoIHRoZSBmb2xpbyBxdWV1ZSBmb3IgdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhlIGJsb2NrLi4uICovXG4gIDkwOlx0XHRmb3IgKDsgZnE7IGZxID0gZnEtXHUwMDNlbmV4dCkge1xuICA5MTpcdFx0XHRmb3IgKDsgc2xvdCBcdTAwM2MgZm9saW9xX2NvdW50KGZxKTsgc2xvdCYjNDM7JiM0MzspIHtcbiAgOTI6XHRcdFx0XHRzaXplX3QgZnNpemUgPSBmb2xpb3FfZm9saW9fc2l6ZShmcSwgc2xvdCk7XG4gIDkzOlx0XG4gIDk0Olx0XHRcdFx0aWYgKGJsZW5kIFx1MDAzYz0gZnBvcyAmIzQzOyBmc2l6ZSkge1xuICA5NTpcdFx0XHRcdFx0LyogLi4uIGFuZCB0aGVuIHJldHVybiB0aGUgbWFwcGVkIGJsb2NrLiAqL1xuICA5NjpcdFx0XHRcdFx0Zm9saW8gPSBmb2xpb3FfZm9saW8oZnEsIHNsb3QpO1xuICA5NzpcdFx0XHRcdFx0aWYgKFdBUk5fT05fT05DRShmb2xpb19wb3MoZm9saW8pICE9IGZwb3MpKVxuICA5ODpcdFx0XHRcdFx0XHRnb3RvIGZhaWw7XG4gIDk5Olx0XHRcdFx0XHRpdGVyLVx1MDAzZWZxID0gZnE7XG4gMTAwOlx0XHRcdFx0XHRpdGVyLVx1MDAzZWZxX3Nsb3QgPSBzbG90O1xuIDEwMTpcdFx0XHRcdFx0aXRlci1cdTAwM2VmcG9zID0gZnBvcztcbiAxMDI6XHRcdFx0XHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBibHBvcyAtIGZwb3MpO1xuIDEwMzpcdFx0XHRcdFx0cmV0dXJuIGl0ZXItXHUwMDNlYmxvY2s7XG4gMTA0Olx0XHRcdFx0fVxuIDEwNTpcdFx0XHRcdGZwb3MgJiM0Mzs9IGZzaXplO1xuIDEwNjpcdFx0XHR9XG4gMTA3Olx0XHRcdHNsb3QgPSAwO1xuIDEwODpcdFx0fVxuIDEwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2MDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQUZTIERpcmVjdG9yeSBFZGl0aW5nIERvdWJsZS1Vbm1hcCBCdWcgRml4KioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIEFGUyBjb2RlLCBzcGVjaWZpY2FsbHkgYGFmc19kaXJfZmluZF9ibG9ja2AuIEl0IHNlZW1zIHRvIG1hcCBhIGZvbGlvIGFuZCBzdG9yZSBpdCBpbiBgaXRlci0mZ3Q7YmxvY2tgLiBUaGUga2V5IGhlcmUgaXMgdGhhdCBpZiBgaXRlci0mZ3Q7YmxvY2tgIGFscmVhZHkgaGFzIGEgdmFsdWUsIGl0IHVubWFwcyBpdCBmaXJzdCAodXNpbmcgYGFmc19kaXJfZW5kX2l0ZXJgKS4gUmlnaHQsIGdvdCBpdC4KCk5vdywgSSYjMzk7bSBkaWdnaW5nIGludG8gYGFmc19lZGl0X2Rpcl9yZW1vdmVgLiBJdCBjYWxscyBgYWZzX2Rpcl9maW5kX2Jsb2NrKCZhbXA7aXRlciwgYilgIHRvIGdldCB0aGUgaW5pdGlhbCBgYmxvY2tgLCBhbmQgc3RvcmVzIGl0LiBUaGVuIGl0IGNhbGxzIGBhZnNfZGlyX2ZpbmRfYmxvY2soJmFtcDtpdGVyLCBwYilgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgdHJpY2t5LiBUaGF0IHNlY29uZCBjYWxsICp1bm1hcHMqIHRoZSBwcmV2aW91cyBgaXRlci0mZ3Q7YmxvY2tgLCB3aGljaCwgYXQgdGhpcyBwb2ludCwgKmlzKiB0aGUgYGJsb2NrYCB3ZSBqdXN0IGdvdCEgU28sIGBibG9ja2AgZ2V0cyB1bm1hcHBlZCAqaW1tZWRpYXRlbHkqIGJlZm9yZSBpdCYjMzk7cyB1c2VkLgoKSG9sZCBvbi4uLiBJIG5vdGljZWQgdGhlcmUgd2FzIGEgYGt1bm1hcF9sb2NhbChibG9jaylgIGluIHRoZSBvcmlnaW5hbCBjb2RlLCAqYmVmb3JlKiB0aGUgc2Vjb25kIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGNhbGwuIEFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgYSBga3VubWFwX2xvY2FsKHBibG9jaylgIGFmdGVyIHRoZSBzZWNvbmQgYGFmc19kaXJfZmluZF9ibG9ja2AuICBBaGEhIFRoYXQgaW5pdGlhbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgd2FzIG1hbnVhbGx5IHVubWFwcGluZyB0aGUgdmVyeSBgYmxvY2tgIHRoYXQmIzM5O3Mgbm93IGFsc28gdW5tYXBwZWQgYnkgdGhlICpzZWNvbmQqIGNhbGwgdG8gYGFmc19kaXJfZmluZF9ibG9ja2AuIEl0IGxvb2tzIGxpa2UgdGhhdCBtYW51YWwgdW5tYXAgd2FzIGFscmVhZHkgZG9uZSwgYnV0IGBpdGVyLSZndDtibG9ja2Agd2FzICpub3QqIHJlc2V0IHRvIGBOVUxMYCB0byBpbmRpY2F0ZSB0aGF0IGBibG9ja2Agd2FzIG5vIGxvbmdlciBpbiB1c2UuCgpTbyB0aGUgc2Vjb25kIGNhbGwgdG8gYGFmc19kaXJfZmluZF9ibG9ja2Agd2FzIGRvaW5nIHRoaXM6CgpgYGBjCglpZiAoaXRlci0mZ3Q7YmxvY2spIHsKCQlrdW5tYXBfbG9jYWwoaXRlci0mZ3Q7YmxvY2spOwoJCWl0ZXItJmd0O2Jsb2NrID0gTlVMTDsKCX0KYGBgCgpTaW5jZSB0aGUgcHJldmlvdXMgY2FsbCB0byBga3VubWFwX2xvY2FsYCB3YXNuJiMzOTt0IGJlaW5nIGFjY291bnRlZCBmb3IgaW4gdGhlIHN0YXRlIG9mIGBpdGVyLSZndDtibG9ja2AsIGl0IHJlc3VsdGVkIGluIGEgZG91YmxlLXVubWFwISBXZSBoYXZlIGFuIGlzc3VlLgoKVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQuIFJlbW92aW5nIHRoZSBtYW51YWwgYGt1bm1hcF9sb2NhbChibG9jaylgIGFuZCBga3VubWFwX2xvY2FsKHBibG9jaylgIGFuZCByZWx5aW5nIG9uIHRoZSB1bm1hcHBpbmcgYmVpbmcgaGFuZGxlZCBieSBgYWZzX2Rpcl9lbmRfaXRlcigmYW1wO2l0ZXIpYCAod2hpY2ggaXMgY2FsbGVkIGluIGBvdXRfdW5tYXBgIGFuZCBpbnNpZGUgYGFmc19kaXJfZmluZF9ibG9ja2ApLiBUaGF0IHdheSBpdCYjMzk7cyBvbmx5IHVubWFwcGVkIG9uY2UsIGFzIGV4cGVjdGVkLgoKVGhpcyBpcyBhIGNsZWFyLCBmdW5jdGlvbmFsIGZpeCBmb3IgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZy4gQW5kIHllcywgSSYjMzk7ZCBzYXkgdGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZz10cnVlLiBJIGJldHRlciBmaW5kIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucy4uLiBBaCwgYENPTkZJR19BRlNfRlNgIGlzIHRoZSBtYWluIG9uZS4gSSBoYXZlIGl0LiBHb29kLiBUaGlzIGlzIHJlYWR5IHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDIwOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvYWZzL0tjb25maWc6Mjpjb25maWcgQUZTX0ZTXG5mcy9hZnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7QW5kcmV3IEZpbGUgU3lzdGVtIHN1cHBvcnQgKEFGUylcJiMzNDtcbi0tXG5mcy9hZnMvS2NvbmZpZz0xNz1jb25maWcgQUZTX0RFQlVHXG4tLVxuZnMvYWZzL0tjb25maWctMjYtXG5mcy9hZnMvS2NvbmZpZzoyNzpjb25maWcgQUZTX0ZTQ0FDSEVcbmZzL2Fmcy9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtQcm92aWRlIEFGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipBbmFseXppbmcgdGhlIGBBRlNfRlNgIENvbmZpZ3VyYXRpb24gYW5kIEtleSBGdW5jdGlvbioqCgpSaWdodCwgc28gdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgQUZTX0ZTYC4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIG5vdyBsZXQmIzM5O3MgZmlndXJlIG91dCB3aGF0JiMzOTtzIHJlbGV2YW50IHdpdGhpbiB0aGF0IGNvbnRleHQuIFRoZSBtYWluIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGlzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYC4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UsIGhvdyBpdCYjMzk7cyBiZWVuIGNoYW5nZWQsIGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aG9zZSBjaGFuZ2VzLiBHaXZlbiB0aGF0IGl0IGRlYWxzIHdpdGggZGlyZWN0b3J5IHJlbW92YWwgd2l0aGluIEFGUywgaXQmIzM5O3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGZpbGUgc3lzdGVtJiMzOTtzIGludGVncml0eSBhbmQgY29uY3VycmVuY3kgY29udHJvbC4gTm93IHRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBzZWUgd2hhdCB0aGUgY2FsbCBwYXRoIGlzLCB0aGF0IHRlbGxzIG1lIHRoZSBkaWZmZXJlbnQgcGxhY2VzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyB1c2VkLCB0byBzZWUgd2hlcmUgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHRyaWdnZXJlZCBmcm9tLiBUaGlzIHdpbGwgaGVscCBtZSB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYW55IG1vZGlmaWNhdGlvbnMgdG8gaXQuIEVzc2VudGlhbGx5LCBJIG5lZWQgdG8gbWFwIG91dCBpdHMgJiMzNDtmYW1pbHkgdHJlZSYjMzQ7IHdpdGhpbiB0aGUgbGFyZ2VyIEFGUyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2Fmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZzL2Rpci5jPTEzNjg9c3RhdGljIHZvaWQgYWZzX3JtZGlyX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcbi0tXG5mcy9hZnMvZGlyLmMtMTM4MC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXIuYzoxMzgxOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b3AtXHUwMDNlZGVudHJ5LVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXIuYy0xMzgyLVx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfcm1kaXIpO1xuLS1cbmZzL2Fmcy9kaXIuYz0xNTE2PXN0YXRpYyB2b2lkIGFmc191bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xNTI2LVx0ICAgIGR2bm9kZS1cdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cdTAwM2Vkdl9iZWZvcmUgJiM0MzsgZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE1Mjc6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE1MjgtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl91bmxpbmspO1xuLS1cbmZzL2Fmcy9kaXIuYz0xODg4PXN0YXRpYyB2b2lkIGFmc19yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXIuYy0xOTEzLVx0ICAgIG9yaWdfZHZub2RlLVx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gb3JpZ19kdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IG9yaWdfZHZwLVx1MDAzZWR2X2RlbHRhKVxuZnMvYWZzL2Rpci5jOjE5MTQ6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFx1MDAyNm9sZF9kZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpci5jLTE5MTUtXHRcdFx0XHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9yZW5hbWVfMCk7XG4tLVxuZnMvYWZzL2Rpci5jLTE5MjQtXHRcdGlmICghb3AtXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcbmZzL2Fmcy9kaXIuYzoxOTI1Olx0XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUobmV3X2R2bm9kZSwgXHUwMDI2bmV3X2RlbnRyeS1cdTAwM2VkX25hbWUsXG5mcy9hZnMvZGlyLmMtMTkyNi1cdFx0XHRcdFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jPTI0MT12b2lkIGFmc19lZGl0X2Rpcl9hZGQoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4tLVxuZnMvYWZzL2Rpcl9lZGl0LmMtMzkyLSAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6MzkzOnZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jPTIzPXN0YXRpYyB2b2lkIGFmc19zaWxseV9yZW5hbWVfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYy00MS1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSkge1xuZnMvYWZzL2Rpcl9zaWxseS5jOjQyOlx0XHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXHUwMDI2b2xkLVx1MDAzZWRfbmFtZSxcbmZzL2Fmcy9kaXJfc2lsbHkuYy00My1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3NpbGx5XzApO1xuLS1cbmZzL2Fmcy9kaXJfc2lsbHkuYz0xNzY9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3VubGlua19lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXG4tLVxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cdCAgICBkdm5vZGUtXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXHUwMDNlZHZfYmVmb3JlICYjNDM7IGR2cC1cdTAwM2Vkdl9kZWx0YSlcbmZzL2Fmcy9kaXJfc2lsbHkuYzoxODU6XHRcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcdTAwMjZvcC1cdTAwM2VkZW50cnktXHUwMDNlZF9uYW1lLFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4Ni1cdFx0XHRcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTExOD1leHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfYWRkKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgc3RydWN0IGFmc19maWQgKixcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMTktXHRcdFx0ICAgICBlbnVtIGFmc19lZGl0X2Rpcl9yZWFzb24pO1xuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcbmZzL2Fmcy9pbnRlcm5hbC5oLTExMjEtdm9pZCBhZnNfZWRpdF9kaXJfdXBkYXRlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU5MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQUZTIERpcmVjdG9yeSBSZW1vdmFsIE9wZXJhdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYGFmc19ybWRpcl9lZGl0X2RpcmAsIGBhZnNfdW5saW5rX2VkaXRfZGlyYCwgYGFmc19yZW5hbWVfZWRpdF9kaXJgLCBhbmQgZXZlbiB0aG9zZSBzaWxseSByZW5hbWUgYW5kIHVubGluayB2YXJpYW50cy4gVGhlc2UgYXJlIGFsbCB0aGUgZXhwZWN0ZWQgb3BlcmF0aW9ucyBmb3IgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbjogcmVtb3ZpbmcgYW4gZW1wdHkgZGlyZWN0b3J5LCB1bmxpbmtpbmcgKHJlbW92aW5nIGEgZmlsZSksIGFuZCByZW5hbWluZyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gVGhhdCBtYWtlcyBzZW5zZS4KCkdpdmVuIHRoYXQgY29udGV4dCwgbXkgYXR0ZW50aW9uIG5hdHVyYWxseSB0dXJucyB0byBhIGZldyBrZXkgZnVuY3Rpb25zLiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAgaXMgb2J2aW91c2x5IGNyaXRpY2FsLiBUaGVuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBpcyBhY3R1YWxseSBuYXZpZ2F0ZWQuIEl0IGxvb2tzIGxpa2UgYGFmc19kaXJfZmluZF9ibG9ja2AsIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgLCBhbmQgYGFmc19kaXJfc2VhcmNoYCBhcmUgZGVlcGx5IGludm9sdmVkIGluIHRoYXQgcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGRpcmVjdG9yeSBibG9ja3MgYW5kIGJ1Y2tldHMgYXJlIHNlYXJjaGVkIHRvIGZpbmQgZW50cmllcyB0aGF0IGNhbiB0aGVuIGJlIHJlbW92ZWQuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtLiBBaCwgYGFmc19lZGl0X2Rpcl9yZW1vdmVgICppcyogZXhwb3J0ZWQgaW4gYGludGVybmFsLmhgIGFuZCBpcyBkZWZpbmVkIGluIGBkaXJfZWRpdC5jYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoaXMgaXMgYSBrZXkgZnVuY3Rpb24uIEkgYWxzbyBzZWUgdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQgYW5kIGV4cG9ydGVkLCBzbyB0aGV5JiMzOTtyZSB3b3J0aCBhIGNsb3NlciBsb29rIGFzIHdlbGwuCgpJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGZzL2Fmcy9kaXJfc2VhcmNoLmNgIHRvIHNlZSBob3cgdGhhdCBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMjA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvYWZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuLS1cbmZzL2Fmcy9kaXJfZWRpdC5jLTQyMi1cdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xuZnMvYWZzL2Rpcl9lZGl0LmM6NDIzOlx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgXHUwMDI2ZmlkKTtcbmZzL2Fmcy9kaXJfZWRpdC5jLTQyNC1cdGlmIChmb3VuZCBcdTAwM2MgMCkge1xuLS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM9Njc9dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXG4tLVxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMTktICovXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyMDppbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0xMjEtXHRcdFx0ICBzdHJ1Y3QgYWZzX2ZpZCAqX2ZpZClcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTE4ND1pbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbi0tXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMS1cbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MjEyOlx0XHRyZXQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXHUwMDI2aXRlciwgbmFtZSwgX2ZpZCk7XG5mcy9hZnMvZGlyX3NlYXJjaC5jLTIxMy1cdFx0dXBfcmVhZChcdTAwMjZkdm5vZGUtXHUwMDNldmFsaWRhdGVfbG9jayk7XG4tLVxuZnMvYWZzL2ludGVybmFsLmg9MTEzMD11bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jayk7XG5mcy9hZnMvaW50ZXJuYWwuaDoxMTMxOmludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTMyLVx0XHRcdCAgc3RydWN0IGFmc19maWQgKl9maWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDcwOAoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAyMDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBRlMgRGlyZWN0b3J5IEVkaXRpbmcgUGF0Y2gqKgoKT2theSwgc28gYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgaXMgZGVmaW5pdGVseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGFuYWx5c2lzIGhlcmUuIExldCYjMzk7cyBzZWUsIHdoYXQgb3RoZXIgc3ltYm9scyBhcmUgcmVsZXZhbnQ/IEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIC0gb2J2aW91c2x5LCBzaW5jZSBpdCYjMzk7cyB0aGUgdGFyZ2V0IG9mIHRoZSBmaXgKKiAgIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIC0gY291bGQgYmUgcmVsYXRlZCB0byBob3cgdGhlIGJsb2NrcyBhcmUgbG9jYXRlZCBvciBtYW5hZ2VkCiogICBgYWZzX2Rpcl9zZWFyY2hfYnVja2V0YCAtIHRoZSBidWNrZXQgc2VhcmNoIGlzIHdoZXJlIHdlIHN0YXJ0ZWQKClJpZ2h0LCB0aGlzIHBhdGNoIGFkZHJlc3NlcyBhIGRvdWJsZS11bm1hcCBidWcgaW4gQUZTIGRpcmVjdG9yeSBlZGl0aW5nLiBJdCYjMzk7cyBhIHN0cmFpZ2h0LXVwIGZ1bmN0aW9uYWwgZml4LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgLSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgb3RoZXIgcmVsYXRlZCBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgZml4IGlzIHRoYXQgdGhleSYjMzk7dmUgYWRkZWQgdGhpcyBgYWZzX2Rpcl9lbmRfaXRlcmAgaGVscGVyLiBJdCBsb29rcyBsaWtlIGl0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIGJhc2ljYWxseSByZXBsYWNpbmcgdGhvc2UgbWFudWFsIGBrdW5tYXBfbG9jYWxgIGNhbGxzIHRoYXQgd2VyZSBjYXVzaW5nIHRoZSBkb3VibGUtdW5tYXBwaW5nIHByb2JsZW0uIFNtYXJ0LCB0aGF0IHNob3VsZCBwcmV2ZW50IGZ1cnRoZXIgaXNzdWVzLgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIGBBRlNfRlNgIGNvbmZpZyBpcyBzdWZmaWNpZW50IGZvciBlbmFibGluZyB0aGlzIGZpeC4gSSBkb24mIzM5O3Qgc2VlIGFueSBvYnZpb3VzIG90aGVyIGNvbmZpZ3MgbmVlZGVkIGhlcmUuCgpBbHJpZ2h0LCBsb29rcyBnb29kLiBUaW1lIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAyMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QUZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWZzX2VkaXRfZGlyX3JlbW92ZSYjMzQ7LAogICAgJiMzNDthZnNfZGlyX2ZpbmRfYmxvY2smIzM0OywKICAgICYjMzQ7YWZzX2Rpcl9zZWFyY2hfYnVja2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjA1LjgyNzQ4MTU1MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMDAyNjIxNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZyAoYWZzX2VkaXRfZGlyX3JlbW92ZSkgYnkgaW50cm9kdWNpbmcgYSBoZWxwZXIgYWZzX2Rpcl9lbmRfaXRlciB0aGF0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIHJlcGxhY2luZyBtYW51YWwga3VubWFwX2xvY2FsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byBkb3VibGUtdW5tYXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODowNS44Mjc0OTAyMTFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MDQ1MzQwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQzZmYzZDc0M2M1MTFiNWJhYzI0MjFhYTIwNGU2OTBmN2MxNjU1MTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6Mzg6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZnMvYWZzL2Rpcl9lZGl0LmMgYi9mcy9hZnMvZGlyX2VkaXQuY1xcbmluZGV4IDNlYWQzNmEwNzA0ODcuLmMzMTMwMzA1OTQ0NGEgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcXG4rKysgYi9mcy9hZnMvZGlyX2VkaXQuY1xcbkBAIC00NDIsNyArNDQyLDcgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHQvKiBDaGVjayBhbmQgY2xlYXIgdGhlIGVudHJ5LiAqL1xcbiBcXHRkZSA9IFxcdTAwMjZibG9jay1cXHUwMDNlZGlyZW50c1tzbG90XTtcXG4gXFx0aWYgKGRlLVxcdTAwM2V1LnZhbGlkICE9IDEpXFxuLVxcdFxcdGdvdG8gZXJyb3JfdW5tYXA7XFxuK1xcdFxcdGdvdG8gZXJyb3I7XFxuIFxcbiBcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcXG4gXFx0XFx0XFx0ICAgbnRvaGwoZGUtXFx1MDAzZXUudm5vZGUpLCBudG9obChkZS1cXHUwMDNldS51bmlxdWUpLFxcbkBAIC00NTgsNyArNDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cXG4gXFx0bmV4dCA9IGRlLVxcdTAwM2V1Lmhhc2hfbmV4dDtcXG4gXFx0bWVtc2V0KGRlLCAwLCBzaXplb2YoKmRlKSAqIGl0ZXIubnJfc2xvdHMpO1xcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBcXG4gXFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVxcdTAwM2VwcmV2X2VudHJ5IGlzIDAsIHRoZSBoYXNodGFibGUgaGVhZFxcbiBcXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0J3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LlxcbkBAIC00ODUsNyArNDg0LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRcXHRwZGUgPSBcXHUwMDI2cGJsb2NrLVxcdTAwM2VkaXJlbnRzW3BzXTtcXG4gXFx0XFx0cHJldl9uZXh0ID0gcGRlLVxcdTAwM2V1Lmhhc2hfbmV4dDtcXG4gXFx0XFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcXG4tXFx0XFx0XFx0a3VubWFwX2xvY2FsKHBibG9jayk7XFxuIFxcdFxcdFxcdHByX3dhcm4oXFxcIiVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXFxcIixcXG4gXFx0XFx0XFx0XFx0dm5vZGUtXFx1MDAzZWZpZC52aWQsIHZub2RlLVxcdTAwM2VmaWQudm5vZGUsIHZub2RlLVxcdTAwM2VmaWQudW5pcXVlLFxcbiBcXHRcXHRcXHRcXHRpdGVyLmJ1Y2tldCwgaXRlci5wcmV2X2VudHJ5LCBwcmV2X25leHQsIGVudHJ5LFxcbkBAIC00OTMsNyArNDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbiBcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHBkZS1cXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xcbi1cXHRcXHRrdW5tYXBfbG9jYWwocGJsb2NrKTtcXG4gXFx0fVxcbiBcXG4gXFx0bmV0ZnNfc2luZ2xlX21hcmtfaW5vZGVfZGlydHkoXFx1MDAyNnZub2RlLVxcdTAwM2VuZXRmcy5pbm9kZSk7XFxuQEAgLTUwMywxOCArNTAwLDE2IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4gXFx0X2RlYnVnKFxcXCJSZW1vdmUgJXMgZnJvbSAldVsldV1cXFwiLCBuYW1lLVxcdTAwM2VuYW1lLCBiLCBzbG90KTtcXG4gXFxuIG91dF91bm1hcDpcXG4rXFx0YWZzX2Rpcl9lbmRfaXRlcihcXHUwMDI2aXRlcik7XFxuIFxcdGt1bm1hcF9sb2NhbChtZXRhKTtcXG4gXFx0X2xlYXZlKFxcXCJcXFwiKTtcXG4gXFx0cmV0dXJuO1xcbiBcXG4gYWxyZWFkeV9pbnZhbGlkYXRlZDpcXG4tXFx0a3VubWFwX2xvY2FsKGJsb2NrKTtcXG4gXFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfaW52YWwsXFxuIFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiBcXHRnb3RvIG91dF91bm1hcDtcXG4gXFxuLWVycm9yX3VubWFwOlxcbi1cXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xcbiBlcnJvcjpcXG4gXFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsXFxuIFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX3NlYXJjaC5jIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xcbmluZGV4IDEwNDQxMWMwNjkyZjUuLjExZWJkZmZmY2IxZDMgMTAwNjQ0XFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xcbisrKyBiL2ZzL2Fmcy9kaXJfc2VhcmNoLmNcXG5AQCAtNzUsMTAgKzc1LDcgQEAgdW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxcXG4gXFxuIFxcdF9lbnRlcihcXFwiJXp4LCVkXFxcIiwgYmxvY2ssIHNsb3QpO1xcbiBcXG4tXFx0aWYgKGl0ZXItXFx1MDAzZWJsb2NrKSB7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChpdGVyLVxcdTAwM2VibG9jayk7XFxuLVxcdFxcdGl0ZXItXFx1MDAzZWJsb2NrID0gTlVMTDtcXG4tXFx0fVxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xcbiBcXG4gXFx0aWYgKGR2bm9kZS1cXHUwMDNlZGlyZWN0b3J5X3NpemUgXFx1MDAzYyBibGVuZClcXG4gXFx0XFx0Z290byBmYWlsO1xcbkBAIC0xNzMsMTIgKzE3MCw4IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIFxcbiBcXHRyZXQgPSAtRU5PRU5UO1xcbiBmb3VuZDpcXG4tXFx0aWYgKGl0ZXItXFx1MDAzZWJsb2NrKSB7XFxuLVxcdFxcdGt1bm1hcF9sb2NhbChpdGVyLVxcdTAwM2VibG9jayk7XFxuLVxcdFxcdGl0ZXItXFx1MDAzZWJsb2NrID0gTlVMTDtcXG4tXFx0fVxcbi1cXG4gYmFkOlxcbitcXHRhZnNfZGlyX2VuZF9pdGVyKGl0ZXIpO1xcbiBcXHRpZiAocmV0ID09IC1FU1RBTEUpXFxuIFxcdFxcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVxcdTAwM2Vkdm5vZGUsIGFmc19kaXJfaW52YWxpZF9pdGVyX3N0YWxlKTtcXG4gXFx0X2xlYXZlKFxcXCIgPSAlZFxcXCIsIHJldCk7XFxuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmhcXG5pbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NFxcbi0tLSBhL2ZzL2Fmcy9pbnRlcm5hbC5oXFxuKysrIGIvZnMvYWZzL2ludGVybmFsLmhcXG5AQCAtMTEzMyw2ICsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuIGludCBhZnNfZGlyX3NlYXJjaChzdHJ1Y3QgYWZzX3Zub2RlICpkdm5vZGUsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbiBcXHRcXHQgICBzdHJ1Y3QgYWZzX2ZpZCAqX2ZpZCwgYWZzX2RhdGF2ZXJzaW9uX3QgKl9kaXJfdmVyc2lvbik7XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2Rpcl9lbmRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyKVxcbit7XFxuK1xcdGlmIChpdGVyLVxcdTAwM2VibG9jaykge1xcbitcXHRcXHRrdW5tYXBfbG9jYWwoaXRlci1cXHUwMDNlYmxvY2spO1xcbitcXHRcXHRpdGVyLVxcdTAwM2VibG9jayA9IE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4gICogZGlyX3NpbGx5LmNcXG4gICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjA2LjMwODkwNDYwN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjMxNTIxMTgxOTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkFGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFmc19lZGl0X2Rpcl9yZW1vdmVcIixcbiAgICBcImFmc19kaXJfZmluZF9ibG9ja1wiLFxuICAgIFwiYWZzX2Rpcl9zZWFyY2hfYnVja2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZyAoYWZzX2VkaXRfZGlyX3JlbW92ZSkgYnkgaW50cm9kdWNpbmcgYSBoZWxwZXIgYWZzX2Rpcl9lbmRfaXRlciB0aGF0IHNhZmVseSB1bm1hcHMgdGhlIGJsb2NrIGFuZCBjbGVhcnMgdGhlIHBvaW50ZXIsIHJlcGxhY2luZyBtYW51YWwga3VubWFwX2xvY2FsIGNhbGxzIHRoYXQgY291bGQgbGVhZCB0byBkb3VibGUtdW5tYXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0M2ZmM2Q3NDNjNTExYjViYWMyNDIxYWEyMDRlNjkwZjdjMTY1NTE5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMjA6Mzg6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9hZnMvZGlyX2VkaXQuYyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5pbmRleCAzZWFkMzZhMDcwNDg3Li5jMzEzMDMwNTk0NDRhIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9lZGl0LmNcbisrKyBiL2ZzL2Fmcy9kaXJfZWRpdC5jXG5AQCAtNDQyLDcgKzQ0Miw3IEBAIHZvaWQgYWZzX2VkaXRfZGlyX3JlbW92ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcbiBcdC8qIENoZWNrIGFuZCBjbGVhciB0aGUgZW50cnkuICovXG4gXHRkZSA9IFx1MDAyNmJsb2NrLVx1MDAzZWRpcmVudHNbc2xvdF07XG4gXHRpZiAoZGUtXHUwMDNldS52YWxpZCAhPSAxKVxuLVx0XHRnb3RvIGVycm9yX3VubWFwO1xuK1x0XHRnb3RvIGVycm9yO1xuIFxuIFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGUsIGIsIHNsb3QsXG4gXHRcdFx0ICAgbnRvaGwoZGUtXHUwMDNldS52bm9kZSksIG50b2hsKGRlLVx1MDAzZXUudW5pcXVlKSxcbkBAIC00NTgsNyArNDU4LDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0LyogQ2xlYXIgdGhlIGNvbnN0aXR1ZW50IGVudHJpZXMuICovXG4gXHRuZXh0ID0gZGUtXHUwMDNldS5oYXNoX25leHQ7XG4gXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XG4tXHRrdW5tYXBfbG9jYWwoYmxvY2spO1xuIFxuIFx0LyogQWRqdXN0IHRoZSBoYXNoIGNoYWluOiBpZiBpdGVyLVx1MDAzZXByZXZfZW50cnkgaXMgMCwgdGhlIGhhc2h0YWJsZSBoZWFkXG4gXHQgKiBpbmRleCBpcyBwcmV2aW91czsgb3RoZXJ3aXNlIGl0J3Mgc2xvdCBudW1iZXIgb2YgdGhlIHByZXZpb3VzIGVudHJ5LlxuQEAgLTQ4NSw3ICs0ODQsNiBAQCB2b2lkIGFmc19lZGl0X2Rpcl9yZW1vdmUoc3RydWN0IGFmc192bm9kZSAqdm5vZGUsXG4gXHRcdHBkZSA9IFx1MDAyNnBibG9jay1cdTAwM2VkaXJlbnRzW3BzXTtcbiBcdFx0cHJldl9uZXh0ID0gcGRlLVx1MDAzZXUuaGFzaF9uZXh0O1xuIFx0XHRpZiAocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkge1xuLVx0XHRcdGt1bm1hcF9sb2NhbChwYmxvY2spO1xuIFx0XHRcdHByX3dhcm4oXCIlbGx4OiVsbHg6JXg6IG5vdCBwcmV2IGluIGNoYWluIGI9JXggcD0leCwleCBlPSV4ICUqc1wiLFxuIFx0XHRcdFx0dm5vZGUtXHUwMDNlZmlkLnZpZCwgdm5vZGUtXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cdTAwM2VmaWQudW5pcXVlLFxuIFx0XHRcdFx0aXRlci5idWNrZXQsIGl0ZXIucHJldl9lbnRyeSwgcHJldl9uZXh0LCBlbnRyeSxcbkBAIC00OTMsNyArNDkxLDYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbiBcdFx0cGRlLVx1MDAzZXUuaGFzaF9uZXh0ID0gbmV4dDtcbi1cdFx0a3VubWFwX2xvY2FsKHBibG9jayk7XG4gXHR9XG4gXG4gXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcdTAwMjZ2bm9kZS1cdTAwM2VuZXRmcy5pbm9kZSk7XG5AQCAtNTAzLDE4ICs1MDAsMTYgQEAgdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxuIFx0X2RlYnVnKFwiUmVtb3ZlICVzIGZyb20gJXVbJXVdXCIsIG5hbWUtXHUwMDNlbmFtZSwgYiwgc2xvdCk7XG4gXG4gb3V0X3VubWFwOlxuK1x0YWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKTtcbiBcdGt1bm1hcF9sb2NhbChtZXRhKTtcbiBcdF9sZWF2ZShcIlwiKTtcbiBcdHJldHVybjtcbiBcbiBhbHJlYWR5X2ludmFsaWRhdGVkOlxuLVx0a3VubWFwX2xvY2FsKGJsb2NrKTtcbiBcdHRyYWNlX2Fmc19lZGl0X2Rpcih2bm9kZSwgd2h5LCBhZnNfZWRpdF9kaXJfZGVsZXRlX2ludmFsLFxuIFx0XHRcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXHUwMDNlbmFtZSk7XG4gXHRnb3RvIG91dF91bm1hcDtcbiBcbi1lcnJvcl91bm1hcDpcbi1cdGt1bm1hcF9sb2NhbChibG9jayk7XG4gZXJyb3I6XG4gXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9lcnJvcixcbiBcdFx0XHQgICAwLCAwLCAwLCAwLCBuYW1lLVx1MDAzZW5hbWUpO1xuZGlmZiAtLWdpdCBhL2ZzL2Fmcy9kaXJfc2VhcmNoLmMgYi9mcy9hZnMvZGlyX3NlYXJjaC5jXG5pbmRleCAxMDQ0MTFjMDY5MmY1Li4xMWViZGZmZmNiMWQzIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2Rpcl9zZWFyY2guY1xuKysrIGIvZnMvYWZzL2Rpcl9zZWFyY2guY1xuQEAgLTc1LDEwICs3NSw3IEBAIHVuaW9uIGFmc194ZHJfZGlyX2Jsb2NrICphZnNfZGlyX2ZpbmRfYmxvY2soc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgc2l6ZV90IGJsXG4gXG4gXHRfZW50ZXIoXCIlengsJWRcIiwgYmxvY2ssIHNsb3QpO1xuIFxuLVx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcbi1cdFx0a3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spO1xuLVx0XHRpdGVyLVx1MDAzZWJsb2NrID0gTlVMTDtcbi1cdH1cbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXG4gXHRpZiAoZHZub2RlLVx1MDAzZWRpcmVjdG9yeV9zaXplIFx1MDAzYyBibGVuZClcbiBcdFx0Z290byBmYWlsO1xuQEAgLTE3MywxMiArMTcwLDggQEAgaW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcbiBcbiBcdHJldCA9IC1FTk9FTlQ7XG4gZm91bmQ6XG4tXHRpZiAoaXRlci1cdTAwM2VibG9jaykge1xuLVx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG4tXHRcdGl0ZXItXHUwMDNlYmxvY2sgPSBOVUxMO1xuLVx0fVxuLVxuIGJhZDpcbitcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XG4gXHRpZiAocmV0ID09IC1FU1RBTEUpXG4gXHRcdGFmc19pbnZhbGlkYXRlX2RpcihpdGVyLVx1MDAzZWR2bm9kZSwgYWZzX2Rpcl9pbnZhbGlkX2l0ZXJfc3RhbGUpO1xuIFx0X2xlYXZlKFwiID0gJWRcIiwgcmV0KTtcbmRpZmYgLS1naXQgYS9mcy9hZnMvaW50ZXJuYWwuaCBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5pbmRleCAyOTA4NzNiYWM4OWIzLi4zMzA2NTRlZDE2ZWNlIDEwMDY0NFxuLS0tIGEvZnMvYWZzL2ludGVybmFsLmhcbisrKyBiL2ZzL2Fmcy9pbnRlcm5hbC5oXG5AQCAtMTEzMyw2ICsxMTMzLDE0IEBAIGludCBhZnNfZGlyX3NlYXJjaF9idWNrZXQoc3RydWN0IGFmc19kaXJfaXRlciAqaXRlciwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gaW50IGFmc19kaXJfc2VhcmNoKHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXG4gXHRcdCAgIHN0cnVjdCBhZnNfZmlkICpfZmlkLCBhZnNfZGF0YXZlcnNpb25fdCAqX2Rpcl92ZXJzaW9uKTtcbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgYWZzX2Rpcl9lbmRfaXRlcihzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyKVxuK3tcbitcdGlmIChpdGVyLVx1MDAzZWJsb2NrKSB7XG4rXHRcdGt1bm1hcF9sb2NhbChpdGVyLVx1MDAzZWJsb2NrKTtcbitcdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogZGlyX3NpbGx5LmNcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjA2LjMwODkwNjcxN1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTg3MTA2NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVmYWN0b3JpbmcgQUZTIERpcmVjdG9yeSBJdGVyYXRpb24gQ2xlYW51cCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0IGxvb2tzIGxpa2UgYSBjbGVhbi11cCBvZiBzb21lIEFGUyBkaXJlY3RvcnkgaXRlcmF0aW9uIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9hZnMvZGlyX2VkaXQuY2AsIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCwgYW5kIGBmcy9hZnMvaW50ZXJuYWwuaGAuIEl0IGFwcGVhcnMgdGhleSd2ZSBpbnRyb2R1Y2VkIGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGFmc19kaXJfZW5kX2l0ZXJgLCB3aGljaCBpcyBkZXNpZ25lZCB0byBuZWF0bHkgdW5tYXAgdGhlIGBpdGVyLVx1MDAzZWJsb2NrYCBhbmQgdGhlbiBudWxsaWZ5IHRoZSBwb2ludGVyLiBUaGUgYmVuZWZpdD8gSXQgc2VlbXMgd2UncmUgY2VudHJhbGl6aW5nIHRoaXMga2luZCBvZiB1bm1hcHBpbmcgb3BlcmF0aW9uLlxuXG5Hb29kLCBnb29kLiBUaGV5IGFyZSBiYXNpY2FsbHkgcmVwbGFjaW5nIHRob3NlIG1hbnVhbCBga3VubWFwX2xvY2FsKGl0ZXItXHUwMDNlYmxvY2spYCBjYWxscyB3aXRoIHRoZSBuZXcgaGVscGVyLiBUaGlzIG1ha2VzIHNlbnNlIGZyb20gYSBtYWludGFpbmFiaWxpdHkgc3RhbmRwb2ludC4gRmV3ZXIgcGxhY2VzIHRvIGdldCBpdCB3cm9uZy4gTm93LCBpbiBgYWZzX2VkaXRfZGlyX3JlbW92ZWAsIEkgc2VlIHRoZXkndmUgcmVtb3ZlZCBhIGJ1bmNoIG9mIHRoZSBga3VubWFwX2xvY2FsKGJsb2NrKWAgYW5kIGBrdW5tYXBfbG9jYWwocGJsb2NrKWAgY2FsbHMsIGFuZCB0aGV5J3JlIHJlbHlpbmcgb24gYGFmc19kaXJfZW5kX2l0ZXIoXHUwMDI2aXRlcilgIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB3aGljaCBpcyBsYWJlbGVkIGFzIGBvdXRfdW5tYXBgLlxuXG5XYWl0IGEgbWludXRlLCBgYmxvY2tgIGFuZCBgcGJsb2NrYC4uLiB3ZXJlbid0IHRob3NlIG1hcHBlZCBieSBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBvciBzb21ldGhpbmcgc2ltaWxhcj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBMZXQgbWUgZHJpbGwgZG93biBpbnRvIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBhbmQgc2VlIGhvdyB0aG9zZSBibG9ja3MgYXJlIGhhbmRsZWQuIFRpbWUgdG8gYnJpbmcgdXAgbXkgdHJ1c3RlZCBgZGVmYXVsdF9hcGk6cmVhZC1maWxlYCB0b29sIGFuZCBjaGVjayBgZnMvYWZzL2Rpcl9lZGl0LmNgIGFyb3VuZCB0aGUgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGZ1bmN0aW9uIHRvIGNsYXJpZnkgdGhlIG1hcHBpbmcgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODoxMS40MDc2MTk4NDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjk5MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvYWZzL2Rpcl9lZGl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDIwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQyMDpcXHRcXHRcXHRyZXR1cm47XFxuIDQyMTpcXHRcXG4gNDIyOlxcdFxcdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xcbiA0MjM6XFx0XFx0Zm91bmQgPSBhZnNfZGlyX3NlYXJjaF9idWNrZXQoXFx1MDAyNml0ZXIsIG5hbWUsIFxcdTAwMjZmaWQpO1xcbiA0MjQ6XFx0XFx0aWYgKGZvdW5kIFxcdTAwM2MgMCkge1xcbiA0MjU6XFx0XFx0XFx0LyogRGlkbid0IGZpbmQgdGhlIGRpcmVudCB0byBjbG9iYmVyLiAgUmUtZG93bmxvYWQuICovXFxuIDQyNjpcXHRcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9ub2VudCxcXG4gNDI3OlxcdFxcdFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0Mjg6XFx0XFx0XFx0YWZzX2ludmFsaWRhdGVfZGlyKHZub2RlLCBhZnNfZGlyX2ludmFsaWRfZWRpdF9yZW1fd3JvbmdfbmFtZSk7XFxuIDQyOTpcXHRcXHRcXHRnb3RvIG91dF91bm1hcDtcXG4gNDMwOlxcdFxcdH1cXG4gNDMxOlxcdFxcbiA0MzI6XFx0XFx0ZW50cnkgPSBmb3VuZDtcXG4gNDMzOlxcdFxcdGIgICAgPSBlbnRyeSAvIEFGU19ESVJfU0xPVFNfUEVSX0JMT0NLO1xcbiA0MzQ6XFx0XFx0c2xvdCA9IGVudHJ5ICUgQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XFxuIDQzNTpcXHRcXG4gNDM2OlxcdFxcdGJsb2NrID0gYWZzX2Rpcl9maW5kX2Jsb2NrKFxcdTAwMjZpdGVyLCBiKTtcXG4gNDM3OlxcdFxcdGlmICghYmxvY2spXFxuIDQzODpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0Mzk6XFx0XFx0aWYgKCF0ZXN0X2JpdChBRlNfVk5PREVfRElSX1ZBTElELCBcXHUwMDI2dm5vZGUtXFx1MDAzZWZsYWdzKSlcXG4gNDQwOlxcdFxcdFxcdGdvdG8gYWxyZWFkeV9pbnZhbGlkYXRlZDtcXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0LyogQ2hlY2sgYW5kIGNsZWFyIHRoZSBlbnRyeS4gKi9cXG4gNDQzOlxcdFxcdGRlID0gXFx1MDAyNmJsb2NrLVxcdTAwM2VkaXJlbnRzW3Nsb3RdO1xcbiA0NDQ6XFx0XFx0aWYgKGRlLVxcdTAwM2V1LnZhbGlkICE9IDEpXFxuIDQ0NTpcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0NDY6XFx0XFxuIDQ0NzpcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZSwgYiwgc2xvdCxcXG4gNDQ4OlxcdFxcdFxcdFxcdCAgIG50b2hsKGRlLVxcdTAwM2V1LnZub2RlKSwgbnRvaGwoZGUtXFx1MDAzZXUudW5pcXVlKSxcXG4gNDQ5OlxcdFxcdFxcdFxcdCAgIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0NTA6XFx0XFxuIDQ1MTpcXHRcXHQvKiBBZGp1c3QgdGhlIGJpdG1hcC4gKi9cXG4gNDUyOlxcdFxcdGFmc19jbGVhcl9jb250aWdfYml0cyhibG9jaywgc2xvdCwgaXRlci5ucl9zbG90cyk7XFxuIDQ1MzpcXHRcXG4gNDU0OlxcdFxcdC8qIEFkanVzdCB0aGUgYWxsb2NhdGlvbiBjb3VudGVyLiAqL1xcbiA0NTU6XFx0XFx0aWYgKGIgXFx1MDAzYyBBRlNfRElSX0JMT0NLU19XSVRIX0NUUilcXG4gNDU2OlxcdFxcdFxcdG1ldGEtXFx1MDAzZW1ldGEuYWxsb2NfY3Ryc1tiXSArPSBpdGVyLm5yX3Nsb3RzO1xcbiA0NTc6XFx0XFxuIDQ1ODpcXHRcXHQvKiBDbGVhciB0aGUgY29uc3RpdHVlbnQgZW50cmllcy4gKi9cXG4gNDU5OlxcdFxcdG5leHQgPSBkZS1cXHUwMDNldS5oYXNoX25leHQ7XFxuIDQ2MDpcXHRcXHRtZW1zZXQoZGUsIDAsIHNpemVvZigqZGUpICogaXRlci5ucl9zbG90cyk7XFxuIDQ2MTpcXHRcXG4gNDYyOlxcdFxcdC8qIEFkanVzdCB0aGUgaGFzaCBjaGFpbjogaWYgaXRlci1cXHUwMDNlcHJldl9lbnRyeSBpcyAwLCB0aGUgaGFzaHRhYmxlIGhlYWRcXG4gNDYzOlxcdFxcdCAqIGluZGV4IGlzIHByZXZpb3VzOyBvdGhlcndpc2UgaXQncyBzbG90IG51bWJlciBvZiB0aGUgcHJldmlvdXMgZW50cnkuXFxuIDQ2NDpcXHRcXHQgKi9cXG4gNDY1OlxcdFxcdGlmICghaXRlci5wcmV2X2VudHJ5KSB7XFxuIDQ2NjpcXHRcXHRcXHRfX2JlMTYgcHJldl9uZXh0ID0gbWV0YS1cXHUwMDNlbWV0YS5oYXNodGFibGVbaXRlci5idWNrZXRdO1xcbiA0Njc6XFx0XFxuIDQ2ODpcXHRcXHRcXHRpZiAodW5saWtlbHkocHJldl9uZXh0ICE9IGh0b25zKGVudHJ5KSkpIHtcXG4gNDY5OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIiVsbHg6JWxseDoleDogbm90IGhlYWQgb2YgY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXFxcIixcXG4gNDcwOlxcdFxcdFxcdFxcdFxcdHZub2RlLVxcdTAwM2VmaWQudmlkLCB2bm9kZS1cXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cXHUwMDNlZmlkLnVuaXF1ZSxcXG4gNDcxOlxcdFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuIDQ3MjpcXHRcXHRcXHRcXHRcXHRuYW1lLVxcdTAwM2VsZW4sIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0NzM6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNDc0OlxcdFxcdFxcdH1cXG4gNDc1OlxcdFxcdFxcdG1ldGEtXFx1MDAzZW1ldGEuaGFzaHRhYmxlW2l0ZXIuYnVja2V0XSA9IG5leHQ7XFxuIDQ3NjpcXHRcXHR9IGVsc2Uge1xcbiA0Nzc6XFx0XFx0XFx0dW5zaWduZWQgaW50IHBiID0gaXRlci5wcmV2X2VudHJ5IC8gQUZTX0RJUl9TTE9UU19QRVJfQkxPQ0s7XFxuIDQ3ODpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHMgPSBpdGVyLnByZXZfZW50cnkgJSBBRlNfRElSX1NMT1RTX1BFUl9CTE9DSztcXG4gNDc5OlxcdFxcdFxcdF9fYmUxNiBwcmV2X25leHQ7XFxuIDQ4MDpcXHRcXG4gNDgxOlxcdFxcdFxcdHBibG9jayA9IGFmc19kaXJfZmluZF9ibG9jayhcXHUwMDI2aXRlciwgcGIpO1xcbiA0ODI6XFx0XFx0XFx0aWYgKCFwYmxvY2spXFxuIDQ4MzpcXHRcXHRcXHRcXHRnb3RvIGVycm9yO1xcbiA0ODQ6XFx0XFx0XFx0cGRlID0gXFx1MDAyNnBibG9jay1cXHUwMDNlZGlyZW50c1twc107XFxuIDQ4NTpcXHRcXHRcXHRwcmV2X25leHQgPSBwZGUtXFx1MDAzZXUuaGFzaF9uZXh0O1xcbiA0ODY6XFx0XFx0XFx0aWYgKHByZXZfbmV4dCAhPSBodG9ucyhlbnRyeSkpIHtcXG4gNDg3OlxcdFxcdFxcdFxcdHByX3dhcm4oXFxcIiVsbHg6JWxseDoleDogbm90IHByZXYgaW4gY2hhaW4gYj0leCBwPSV4LCV4IGU9JXggJSpzXFxcIixcXG4gNDg4OlxcdFxcdFxcdFxcdFxcdHZub2RlLVxcdTAwM2VmaWQudmlkLCB2bm9kZS1cXHUwMDNlZmlkLnZub2RlLCB2bm9kZS1cXHUwMDNlZmlkLnVuaXF1ZSxcXG4gNDg5OlxcdFxcdFxcdFxcdFxcdGl0ZXIuYnVja2V0LCBpdGVyLnByZXZfZW50cnksIHByZXZfbmV4dCwgZW50cnksXFxuIDQ5MDpcXHRcXHRcXHRcXHRcXHRuYW1lLVxcdTAwM2VsZW4sIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA0OTE6XFx0XFx0XFx0XFx0Z290byBlcnJvcjtcXG4gNDkyOlxcdFxcdFxcdH1cXG4gNDkzOlxcdFxcdFxcdHBkZS1cXHUwMDNldS5oYXNoX25leHQgPSBuZXh0O1xcbiA0OTQ6XFx0XFx0fVxcbiA0OTU6XFx0XFxuIDQ5NjpcXHRcXHRuZXRmc19zaW5nbGVfbWFya19pbm9kZV9kaXJ0eShcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlKTtcXG4gNDk3OlxcdFxcbiA0OTg6XFx0XFx0aW5vZGVfc2V0X2l2ZXJzaW9uX3JhdyhcXHUwMDI2dm5vZGUtXFx1MDAzZW5ldGZzLmlub2RlLCB2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbik7XFxuIDQ5OTpcXHRcXHRhZnNfc3RhdF92KHZub2RlLCBuX2Rpcl9ybSk7XFxuIDUwMDpcXHRcXHRfZGVidWcoXFxcIlJlbW92ZSAlcyBmcm9tICV1WyV1XVxcXCIsIG5hbWUtXFx1MDAzZW5hbWUsIGIsIHNsb3QpO1xcbiA1MDE6XFx0XFxuIDUwMjpcXHRvdXRfdW5tYXA6XFxuIDUwMzpcXHRcXHRhZnNfZGlyX2VuZF9pdGVyKFxcdTAwMjZpdGVyKTtcXG4gNTA0OlxcdFxcdGt1bm1hcF9sb2NhbChtZXRhKTtcXG4gNTA1OlxcdFxcdF9sZWF2ZShcXFwiXFxcIik7XFxuIDUwNjpcXHRcXHRyZXR1cm47XFxuIDUwNzpcXHRcXG4gNTA4OlxcdGFscmVhZHlfaW52YWxpZGF0ZWQ6XFxuIDUwOTpcXHRcXHR0cmFjZV9hZnNfZWRpdF9kaXIodm5vZGUsIHdoeSwgYWZzX2VkaXRfZGlyX2RlbGV0ZV9pbnZhbCxcXG4gNTEwOlxcdFxcdFxcdFxcdCAgIDAsIDAsIDAsIDAsIG5hbWUtXFx1MDAzZW5hbWUpO1xcbiA1MTE6XFx0XFx0Z290byBvdXRfdW5tYXA7XFxuIDUxMjpcXHRcXG4gNTEzOlxcdGVycm9yOlxcbiA1MTQ6XFx0XFx0dHJhY2VfYWZzX2VkaXRfZGlyKHZub2RlLCB3aHksIGFmc19lZGl0X2Rpcl9kZWxldGVfZXJyb3IsXFxuIDUxNTpcXHRcXHRcXHRcXHQgICAwLCAwLCAwLCAwLCBuYW1lLVxcdTAwM2VuYW1lKTtcXG4gNTE2OlxcdFxcdGdvdG8gb3V0X3VubWFwO1xcbiA1MTc6XFx0fVxcbiA1MTg6XFx0XFxuIDUxOTpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODoxMS40MDc3OTIyNzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk2MTM4ODY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkRlYnVnZ2luZyBhIFBvdGVudGlhbCBNZW1vcnkgTWFwcGluZyBJc3N1ZSBpbiB0aGUgQUZTIEZpbGVzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCBzZWVtcyBsaWtlIHdlJ3JlIGZpeGluZyBhIGJ1ZyByZWxhdGVkIHRvIGBrdW5tYXBfbG9jYWxgLiBUaGUga2V5IGlzIHRoYXQgYGt1bm1hcF9sb2NhbGAgd2FzIGluY29ycmVjdGx5IGJlaW5nIGNhbGxlZCBvbiBgYmxvY2tgIG9yIGBwYmxvY2tgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRob3NlIHBvaW50ZXJzLCBgYmxvY2tgIG9yIGBwYmxvY2tgLCBhcmUgYmVpbmcgdHJlYXRlZCBhcyBpZiB0aGV5IGFyZSBtZW1vcnkgbWFwcGVkIHdpdGggdGhlIGtlcm5lbCdzIGBrbWFwX2xvY2FsYCwgd2hpY2ggaXMgaW5jb3JyZWN0LiBBbmQsIGV2ZW4gbW9yZSBpbXBvcnRhbnQsIHRoZXNlIHBvaW50ZXJzIGNvbWUgZnJvbSBgYWZzX2Rpcl9maW5kX2Jsb2NrYC5cblxuSG9sZCBvbiwgc29tZXRoaW5nIGRvZXNuJ3QgcXVpdGUgc2l0IHJpZ2h0LiBgYWZzX2Rpcl9maW5kX2Jsb2NrYCAqcmV0dXJucyogYSBwb2ludGVyLCByaWdodD8gQnV0IGRvZXNuJ3QgaXQgYWxzbyBzdG9yZSB0aGUgbWFwcGVkIGJsb2NrIGluIGBpdGVyLVx1MDAzZWJsb2NrYD8gVGhhdCdzIHRoZSBwYXJ0IHRoYXQgbmVlZHMgdG8gYmUgdmVyaWZpZWQuIFdlIG5lZWQgdG8gY29uZmlybSBob3cgYGFmc19kaXJfZmluZF9ibG9ja2AgaXMgaGFuZGxpbmcgdGhlIG1hcHBpbmcgYW5kIHVubWFwcGluZyBvZiB0aGlzIG1lbW9yeS4gSXQgc2VlbXMgbGlrZSB0aGUgaXNzdWUgc3RlbXMgZnJvbSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIHJldHVybmVkIHBvaW50ZXIuXG5cbkxldCdzIGRpdmUgaW50byBgZnMvYWZzL2Rpcl9zZWFyY2guY2AgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCB0byBzZWUgd2hhdCBpcyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjE1LjIwMzkzMzU1NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTI4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9hZnMvZGlyX3NlYXJjaC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdGl0ZXItXFx1MDAzZWJ1Y2tldCA9IGFmc19kaXJfaGFzaF9uYW1lKG5hbWUpO1xcbiAgNjE6XFx0XFx0cmV0dXJuIGFmc19kaXJfcmVzZXRfaXRlcihpdGVyKTtcXG4gIDYyOlxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0LypcXG4gIDY1OlxcdCAqIEdldCBhIHNwZWNpZmljIGJsb2NrLlxcbiAgNjY6XFx0ICovXFxuICA2NzpcXHR1bmlvbiBhZnNfeGRyX2Rpcl9ibG9jayAqYWZzX2Rpcl9maW5kX2Jsb2NrKHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIHNpemVfdCBibG9jaylcXG4gIDY4OlxcdHtcXG4gIDY5OlxcdFxcdHN0cnVjdCBmb2xpb19xdWV1ZSAqZnEgPSBpdGVyLVxcdTAwM2VmcTtcXG4gIDcwOlxcdFxcdHN0cnVjdCBhZnNfdm5vZGUgKmR2bm9kZSA9IGl0ZXItXFx1MDAzZWR2bm9kZTtcXG4gIDcxOlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuICA3MjpcXHRcXHRzaXplX3QgYmxwb3MgPSBibG9jayAqIEFGU19ESVJfQkxPQ0tfU0laRTtcXG4gIDczOlxcdFxcdHNpemVfdCBibGVuZCA9IChibG9jayArIDEpICogQUZTX0RJUl9CTE9DS19TSVpFLCBmcG9zID0gaXRlci1cXHUwMDNlZnBvcztcXG4gIDc0OlxcdFxcdGludCBzbG90ID0gaXRlci1cXHUwMDNlZnFfc2xvdDtcXG4gIDc1OlxcdFxcbiAgNzY6XFx0XFx0X2VudGVyKFxcXCIlengsJWRcXFwiLCBibG9jaywgc2xvdCk7XFxuICA3NzpcXHRcXG4gIDc4OlxcdFxcdGFmc19kaXJfZW5kX2l0ZXIoaXRlcik7XFxuICA3OTpcXHRcXG4gIDgwOlxcdFxcdGlmIChkdm5vZGUtXFx1MDAzZWRpcmVjdG9yeV9zaXplIFxcdTAwM2MgYmxlbmQpXFxuICA4MTpcXHRcXHRcXHRnb3RvIGZhaWw7XFxuICA4MjpcXHRcXG4gIDgzOlxcdFxcdGlmICghZnEgfHwgYmxwb3MgXFx1MDAzYyBmcG9zKSB7XFxuICA4NDpcXHRcXHRcXHRmcSA9IGR2bm9kZS1cXHUwMDNlZGlyZWN0b3J5O1xcbiAgODU6XFx0XFx0XFx0c2xvdCA9IDA7XFxuICA4NjpcXHRcXHRcXHRmcG9zID0gMDtcXG4gIDg3OlxcdFxcdH1cXG4gIDg4OlxcdFxcbiAgODk6XFx0XFx0LyogU2VhcmNoIHRoZSBmb2xpbyBxdWV1ZSBmb3IgdGhlIGZvbGlvIGNvbnRhaW5pbmcgdGhlIGJsb2NrLi4uICovXFxuICA5MDpcXHRcXHRmb3IgKDsgZnE7IGZxID0gZnEtXFx1MDAzZW5leHQpIHtcXG4gIDkxOlxcdFxcdFxcdGZvciAoOyBzbG90IFxcdTAwM2MgZm9saW9xX2NvdW50KGZxKTsgc2xvdCsrKSB7XFxuICA5MjpcXHRcXHRcXHRcXHRzaXplX3QgZnNpemUgPSBmb2xpb3FfZm9saW9fc2l6ZShmcSwgc2xvdCk7XFxuICA5MzpcXHRcXG4gIDk0OlxcdFxcdFxcdFxcdGlmIChibGVuZCBcXHUwMDNjPSBmcG9zICsgZnNpemUpIHtcXG4gIDk1OlxcdFxcdFxcdFxcdFxcdC8qIC4uLiBhbmQgdGhlbiByZXR1cm4gdGhlIG1hcHBlZCBibG9jay4gKi9cXG4gIDk2OlxcdFxcdFxcdFxcdFxcdGZvbGlvID0gZm9saW9xX2ZvbGlvKGZxLCBzbG90KTtcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdGlmIChXQVJOX09OX09OQ0UoZm9saW9fcG9zKGZvbGlvKSAhPSBmcG9zKSlcXG4gIDk4OlxcdFxcdFxcdFxcdFxcdFxcdGdvdG8gZmFpbDtcXG4gIDk5OlxcdFxcdFxcdFxcdFxcdGl0ZXItXFx1MDAzZWZxID0gZnE7XFxuIDEwMDpcXHRcXHRcXHRcXHRcXHRpdGVyLVxcdTAwM2VmcV9zbG90ID0gc2xvdDtcXG4gMTAxOlxcdFxcdFxcdFxcdFxcdGl0ZXItXFx1MDAzZWZwb3MgPSBmcG9zO1xcbiAxMDI6XFx0XFx0XFx0XFx0XFx0aXRlci1cXHUwMDNlYmxvY2sgPSBrbWFwX2xvY2FsX2ZvbGlvKGZvbGlvLCBibHBvcyAtIGZwb3MpO1xcbiAxMDM6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGl0ZXItXFx1MDAzZWJsb2NrO1xcbiAxMDQ6XFx0XFx0XFx0XFx0fVxcbiAxMDU6XFx0XFx0XFx0XFx0ZnBvcyArPSBmc2l6ZTtcXG4gMTA2OlxcdFxcdFxcdH1cXG4gMTA3OlxcdFxcdFxcdHNsb3QgPSAwO1xcbiAxMDg6XFx0XFx0fVxcbiAxMDk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjE1LjIwNDA0MTMwNFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyNzQyOTcwMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQUZTIERpcmVjdG9yeSBFZGl0aW5nIERvdWJsZS1Vbm1hcCBCdWcgRml4KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQncyBoYXBwZW5pbmcuIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgQUZTIGNvZGUsIHNwZWNpZmljYWxseSBgYWZzX2Rpcl9maW5kX2Jsb2NrYC4gSXQgc2VlbXMgdG8gbWFwIGEgZm9saW8gYW5kIHN0b3JlIGl0IGluIGBpdGVyLVx1MDAzZWJsb2NrYC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaWYgYGl0ZXItXHUwMDNlYmxvY2tgIGFscmVhZHkgaGFzIGEgdmFsdWUsIGl0IHVubWFwcyBpdCBmaXJzdCAodXNpbmcgYGFmc19kaXJfZW5kX2l0ZXJgKS4gUmlnaHQsIGdvdCBpdC5cblxuTm93LCBJJ20gZGlnZ2luZyBpbnRvIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYC4gSXQgY2FsbHMgYGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBiKWAgdG8gZ2V0IHRoZSBpbml0aWFsIGBibG9ja2AsIGFuZCBzdG9yZXMgaXQuIFRoZW4gaXQgY2FsbHMgYGFmc19kaXJfZmluZF9ibG9jayhcdTAwMjZpdGVyLCBwYilgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgdHJpY2t5LiBUaGF0IHNlY29uZCBjYWxsICp1bm1hcHMqIHRoZSBwcmV2aW91cyBgaXRlci1cdTAwM2VibG9ja2AsIHdoaWNoLCBhdCB0aGlzIHBvaW50LCAqaXMqIHRoZSBgYmxvY2tgIHdlIGp1c3QgZ290ISBTbywgYGJsb2NrYCBnZXRzIHVubWFwcGVkICppbW1lZGlhdGVseSogYmVmb3JlIGl0J3MgdXNlZC5cblxuSG9sZCBvbi4uLiBJIG5vdGljZWQgdGhlcmUgd2FzIGEgYGt1bm1hcF9sb2NhbChibG9jaylgIGluIHRoZSBvcmlnaW5hbCBjb2RlLCAqYmVmb3JlKiB0aGUgc2Vjb25kIGBhZnNfZGlyX2ZpbmRfYmxvY2tgIGNhbGwuIEFuZCBpdCB3YXMgZm9sbG93ZWQgYnkgYSBga3VubWFwX2xvY2FsKHBibG9jaylgIGFmdGVyIHRoZSBzZWNvbmQgYGFmc19kaXJfZmluZF9ibG9ja2AuICBBaGEhIFRoYXQgaW5pdGlhbCBga3VubWFwX2xvY2FsKGJsb2NrKWAgd2FzIG1hbnVhbGx5IHVubWFwcGluZyB0aGUgdmVyeSBgYmxvY2tgIHRoYXQncyBub3cgYWxzbyB1bm1hcHBlZCBieSB0aGUgKnNlY29uZCogY2FsbCB0byBgYWZzX2Rpcl9maW5kX2Jsb2NrYC4gSXQgbG9va3MgbGlrZSB0aGF0IG1hbnVhbCB1bm1hcCB3YXMgYWxyZWFkeSBkb25lLCBidXQgYGl0ZXItXHUwMDNlYmxvY2tgIHdhcyAqbm90KiByZXNldCB0byBgTlVMTGAgdG8gaW5kaWNhdGUgdGhhdCBgYmxvY2tgIHdhcyBubyBsb25nZXIgaW4gdXNlLlxuXG5TbyB0aGUgc2Vjb25kIGNhbGwgdG8gYGFmc19kaXJfZmluZF9ibG9ja2Agd2FzIGRvaW5nIHRoaXM6XG5cbmBgYGNcblx0aWYgKGl0ZXItXHUwMDNlYmxvY2spIHtcblx0XHRrdW5tYXBfbG9jYWwoaXRlci1cdTAwM2VibG9jayk7XG5cdFx0aXRlci1cdTAwM2VibG9jayA9IE5VTEw7XG5cdH1cbmBgYFxuXG5TaW5jZSB0aGUgcHJldmlvdXMgY2FsbCB0byBga3VubWFwX2xvY2FsYCB3YXNuJ3QgYmVpbmcgYWNjb3VudGVkIGZvciBpbiB0aGUgc3RhdGUgb2YgYGl0ZXItXHUwMDNlYmxvY2tgLCBpdCByZXN1bHRlZCBpbiBhIGRvdWJsZS11bm1hcCEgV2UgaGF2ZSBhbiBpc3N1ZS5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQuIFJlbW92aW5nIHRoZSBtYW51YWwgYGt1bm1hcF9sb2NhbChibG9jaylgIGFuZCBga3VubWFwX2xvY2FsKHBibG9jaylgIGFuZCByZWx5aW5nIG9uIHRoZSB1bm1hcHBpbmcgYmVpbmcgaGFuZGxlZCBieSBgYWZzX2Rpcl9lbmRfaXRlcihcdTAwMjZpdGVyKWAgKHdoaWNoIGlzIGNhbGxlZCBpbiBgb3V0X3VubWFwYCBhbmQgaW5zaWRlIGBhZnNfZGlyX2ZpbmRfYmxvY2tgKS4gVGhhdCB3YXkgaXQncyBvbmx5IHVubWFwcGVkIG9uY2UsIGFzIGV4cGVjdGVkLlxuXG5UaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgZml4IGZvciBhIGRvdWJsZS11bm1hcCBidWcgaW4gQUZTIGRpcmVjdG9yeSBlZGl0aW5nLiBBbmQgeWVzLCBJJ2Qgc2F5IHRoaXMgaXMgZGVmaW5pdGVseSBXb3J0aEZ1enppbmc9dHJ1ZS4gSSBiZXR0ZXIgZmluZCB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMuLi4gQWgsIGBDT05GSUdfQUZTX0ZTYCBpcyB0aGUgbWFpbiBvbmUuIEkgaGF2ZSBpdC4gR29vZC4gVGhpcyBpcyByZWFkeSB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwMywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjIzLjQ3ODM0MTcwNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzMzNjk4NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEFGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2Fmcy9LY29uZmlnOjI6Y29uZmlnIEFGU19GU1xcbmZzL2Fmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFuZHJldyBGaWxlIFN5c3RlbSBzdXBwb3J0IChBRlMpXFxcIlxcbi0tXFxuZnMvYWZzL0tjb25maWc9MTc9Y29uZmlnIEFGU19ERUJVR1xcbi0tXFxuZnMvYWZzL0tjb25maWctMjYtXFxuZnMvYWZzL0tjb25maWc6Mjc6Y29uZmlnIEFGU19GU0NBQ0hFXFxuZnMvYWZzL0tjb25maWctMjgtXFx0Ym9vbCBcXFwiUHJvdmlkZSBBRlMgY2xpZW50IGNhY2hpbmcgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MjMuNjUxNzE3MjY4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4OTE2MzU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYEFGU19GU2AgQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgYEFGU19GU2AuIFRoYXQncyB0aGUgYmFzZWxpbmUsIG5vdyBsZXQncyBmaWd1cmUgb3V0IHdoYXQncyByZWxldmFudCB3aXRoaW4gdGhhdCBjb250ZXh0LiBUaGUgbWFpbiBmdW5jdGlvbiB0aGF0J3MgYmVlbiBtb2RpZmllZCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGlzIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYC4gTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uJ3MgcHVycG9zZSwgaG93IGl0J3MgYmVlbiBjaGFuZ2VkLCBhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhvc2UgY2hhbmdlcy4gR2l2ZW4gdGhhdCBpdCBkZWFscyB3aXRoIGRpcmVjdG9yeSByZW1vdmFsIHdpdGhpbiBBRlMsIGl0J3MgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIGZpbGUgc3lzdGVtJ3MgaW50ZWdyaXR5IGFuZCBjb25jdXJyZW5jeSBjb250cm9sLiBOb3cgdGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHNlZSB3aGF0IHRoZSBjYWxsIHBhdGggaXMsIHRoYXQgdGVsbHMgbWUgdGhlIGRpZmZlcmVudCBwbGFjZXMgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGlzIHVzZWQsIHRvIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgYmVpbmcgdHJpZ2dlcmVkIGZyb20uIFRoaXMgd2lsbCBoZWxwIG1lIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBhbnkgbW9kaWZpY2F0aW9ucyB0byBpdC4gRXNzZW50aWFsbHksIEkgbmVlZCB0byBtYXAgb3V0IGl0cyBcImZhbWlseSB0cmVlXCIgd2l0aGluIHRoZSBsYXJnZXIgQUZTIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTkyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MjcuMjQwODgzNjQ4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE2NjM2NTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWZzX2VkaXRfZGlyX3JlbW92ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9hZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2Fmcy9kaXIuYz0xMzY4PXN0YXRpYyB2b2lkIGFmc19ybWRpcl9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyLmMtMTM4MC1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyLmM6MTM4MTpcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKGR2bm9kZSwgXFx1MDAyNm9wLVxcdTAwM2VkZW50cnktXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyLmMtMTM4Mi1cXHRcXHRcXHRcXHQgICAgYWZzX2VkaXRfZGlyX2Zvcl9ybWRpcik7XFxuLS1cXG5mcy9hZnMvZGlyLmM9MTUxNj1zdGF0aWMgdm9pZCBhZnNfdW5saW5rX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xNTI2LVxcdCAgICBkdm5vZGUtXFx1MDAzZXN0YXR1cy5kYXRhX3ZlcnNpb24gPT0gZHZwLVxcdTAwM2Vkdl9iZWZvcmUgKyBkdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXIuYzoxNTI3OlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b3AtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXIuYy0xNTI4LVxcdFxcdFxcdFxcdCAgICBhZnNfZWRpdF9kaXJfZm9yX3VubGluayk7XFxuLS1cXG5mcy9hZnMvZGlyLmM9MTg4OD1zdGF0aWMgdm9pZCBhZnNfcmVuYW1lX2VkaXRfZGlyKHN0cnVjdCBhZnNfb3BlcmF0aW9uICpvcClcXG4tLVxcbmZzL2Fmcy9kaXIuYy0xOTEzLVxcdCAgICBvcmlnX2R2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBvcmlnX2R2cC1cXHUwMDNlZHZfYmVmb3JlICsgb3JpZ19kdnAtXFx1MDAzZWR2X2RlbHRhKVxcbmZzL2Fmcy9kaXIuYzoxOTE0OlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUob3JpZ19kdm5vZGUsIFxcdTAwMjZvbGRfZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTE5MTUtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzApO1xcbi0tXFxuZnMvYWZzL2Rpci5jLTE5MjQtXFx0XFx0aWYgKCFvcC1cXHUwMDNlcmVuYW1lLm5ld19uZWdhdGl2ZSlcXG5mcy9hZnMvZGlyLmM6MTkyNTpcXHRcXHRcXHRhZnNfZWRpdF9kaXJfcmVtb3ZlKG5ld19kdm5vZGUsIFxcdTAwMjZuZXdfZGVudHJ5LVxcdTAwM2VkX25hbWUsXFxuZnMvYWZzL2Rpci5jLTE5MjYtXFx0XFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfcmVuYW1lXzEpO1xcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmM9MjQxPXZvaWQgYWZzX2VkaXRfZGlyX2FkZChzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSxcXG4tLVxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5Mi0gKi9cXG5mcy9hZnMvZGlyX2VkaXQuYzozOTM6dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbmZzL2Fmcy9kaXJfZWRpdC5jLTM5NC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbiB3aHkpXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmM9MjM9c3RhdGljIHZvaWQgYWZzX3NpbGx5X3JlbmFtZV9lZGl0X2RpcihzdHJ1Y3QgYWZzX29wZXJhdGlvbiAqb3ApXFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmMtNDEtXFx0ICAgIGR2bm9kZS1cXHUwMDNlc3RhdHVzLmRhdGFfdmVyc2lvbiA9PSBkdnAtXFx1MDAzZWR2X2JlZm9yZSArIGR2cC1cXHUwMDNlZHZfZGVsdGEpIHtcXG5mcy9hZnMvZGlyX3NpbGx5LmM6NDI6XFx0XFx0YWZzX2VkaXRfZGlyX3JlbW92ZShkdm5vZGUsIFxcdTAwMjZvbGQtXFx1MDAzZWRfbmFtZSxcXG5mcy9hZnMvZGlyX3NpbGx5LmMtNDMtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3Jfc2lsbHlfMCk7XFxuLS1cXG5mcy9hZnMvZGlyX3NpbGx5LmM9MTc2PXN0YXRpYyB2b2lkIGFmc19zaWxseV91bmxpbmtfZWRpdF9kaXIoc3RydWN0IGFmc19vcGVyYXRpb24gKm9wKVxcbi0tXFxuZnMvYWZzL2Rpcl9zaWxseS5jLTE4NC1cXHQgICAgZHZub2RlLVxcdTAwM2VzdGF0dXMuZGF0YV92ZXJzaW9uID09IGR2cC1cXHUwMDNlZHZfYmVmb3JlICsgZHZwLVxcdTAwM2Vkdl9kZWx0YSlcXG5mcy9hZnMvZGlyX3NpbGx5LmM6MTg1OlxcdFxcdGFmc19lZGl0X2Rpcl9yZW1vdmUoZHZub2RlLCBcXHUwMDI2b3AtXFx1MDAzZWRlbnRyeS1cXHUwMDNlZF9uYW1lLFxcbmZzL2Fmcy9kaXJfc2lsbHkuYy0xODYtXFx0XFx0XFx0XFx0ICAgIGFmc19lZGl0X2Rpcl9mb3JfdW5saW5rKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTExMTg9ZXh0ZXJuIHZvaWQgYWZzX2VkaXRfZGlyX2FkZChzdHJ1Y3QgYWZzX3Zub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICosIHN0cnVjdCBhZnNfZmlkICosXFxuZnMvYWZzL2ludGVybmFsLmgtMTExOS1cXHRcXHRcXHQgICAgIGVudW0gYWZzX2VkaXRfZGlyX3JlYXNvbik7XFxuZnMvYWZzL2ludGVybmFsLmg6MTEyMDpleHRlcm4gdm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKiwgZW51bSBhZnNfZWRpdF9kaXJfcmVhc29uKTtcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTIxLXZvaWQgYWZzX2VkaXRfZGlyX3VwZGF0ZShzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgY29uc3Qgc3RydWN0IHFzdHIgKm5hbWUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDIwOjM4OjI3LjQxMjU1MzIxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDM1NDA2MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBBRlMgRGlyZWN0b3J5IFJlbW92YWwgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBkaXJlY3RvcnkgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoaW4gdGhlIEFGUyBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIEkgc2VlIHRoYXQgYGFmc19lZGl0X2Rpcl9yZW1vdmVgIGlzIHRoZSBjb3JlIGZ1bmN0aW9uIGNhbGxlZCBieSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9uczogYGFmc19ybWRpcl9lZGl0X2RpcmAsIGBhZnNfdW5saW5rX2VkaXRfZGlyYCwgYGFmc19yZW5hbWVfZWRpdF9kaXJgLCBhbmQgZXZlbiB0aG9zZSBzaWxseSByZW5hbWUgYW5kIHVubGluayB2YXJpYW50cy4gVGhlc2UgYXJlIGFsbCB0aGUgZXhwZWN0ZWQgb3BlcmF0aW9ucyBmb3IgZGlyZWN0b3J5IG1hbmlwdWxhdGlvbjogcmVtb3ZpbmcgYW4gZW1wdHkgZGlyZWN0b3J5LCB1bmxpbmtpbmcgKHJlbW92aW5nIGEgZmlsZSksIGFuZCByZW5hbWluZyBmaWxlcyBvciBkaXJlY3Rvcmllcy4gVGhhdCBtYWtlcyBzZW5zZS5cblxuR2l2ZW4gdGhhdCBjb250ZXh0LCBteSBhdHRlbnRpb24gbmF0dXJhbGx5IHR1cm5zIHRvIGEgZmV3IGtleSBmdW5jdGlvbnMuIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCBpcyBvYnZpb3VzbHkgY3JpdGljYWwuIFRoZW4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGlzIGFjdHVhbGx5IG5hdmlnYXRlZC4gSXQgbG9va3MgbGlrZSBgYWZzX2Rpcl9maW5kX2Jsb2NrYCwgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAsIGFuZCBgYWZzX2Rpcl9zZWFyY2hgIGFyZSBkZWVwbHkgaW52b2x2ZWQgaW4gdGhhdCBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZGlyZWN0b3J5IGJsb2NrcyBhbmQgYnVja2V0cyBhcmUgc2VhcmNoZWQgdG8gZmluZCBlbnRyaWVzIHRoYXQgY2FuIHRoZW4gYmUgcmVtb3ZlZC5cblxuTGV0J3MgcXVpY2tseSBjb25maXJtLiBBaCwgYGFmc19lZGl0X2Rpcl9yZW1vdmVgICppcyogZXhwb3J0ZWQgaW4gYGludGVybmFsLmhgIGFuZCBpcyBkZWZpbmVkIGluIGBkaXJfZWRpdC5jYC4gVGhhdCBjb25maXJtcyBteSBpbml0aWFsIGludHVpdGlvbiB0aGF0IHRoaXMgaXMgYSBrZXkgZnVuY3Rpb24uIEkgYWxzbyBzZWUgdGhhdCBgYWZzX2Rpcl9maW5kX2Jsb2NrYCBhbmQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgYXJlIGFsc28gYmVpbmcgbW9kaWZpZWQgYW5kIGV4cG9ydGVkLCBzbyB0aGV5J3JlIHdvcnRoIGEgY2xvc2VyIGxvb2sgYXMgd2VsbC5cblxuSSBzaG91bGQgcHJvYmFibHkgZGl2ZSBpbnRvIGBmcy9hZnMvZGlyX3NlYXJjaC5jYCB0byBzZWUgaG93IHRoYXQgYGFmc19kaXJfc2VhcmNoX2J1Y2tldGAgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1OTIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MzIuNDQ3OTYyNDQ3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTc3NDEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZnNfZGlyX3NlYXJjaF9idWNrZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvYWZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9hZnMvZGlyX2VkaXQuYz0zOTM9dm9pZCBhZnNfZWRpdF9kaXJfcmVtb3ZlKHN0cnVjdCBhZnNfdm5vZGUgKnZub2RlLFxcbi0tXFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDIyLVxcdC8qIEZpbmQgdGhlIGVudHJ5IGluIHRoZSBibG9iLiAqL1xcbmZzL2Fmcy9kaXJfZWRpdC5jOjQyMzpcXHRmb3VuZCA9IGFmc19kaXJfc2VhcmNoX2J1Y2tldChcXHUwMDI2aXRlciwgbmFtZSwgXFx1MDAyNmZpZCk7XFxuZnMvYWZzL2Rpcl9lZGl0LmMtNDI0LVxcdGlmIChmb3VuZCBcXHUwMDNjIDApIHtcXG4tLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmM9Njc9dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jLTExOS0gKi9cXG5mcy9hZnMvZGlyX3NlYXJjaC5jOjEyMDppbnQgYWZzX2Rpcl9zZWFyY2hfYnVja2V0KHN0cnVjdCBhZnNfZGlyX2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBxc3RyICpuYW1lLFxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMTIxLVxcdFxcdFxcdCAgc3RydWN0IGFmc19maWQgKl9maWQpXFxuLS1cXG5mcy9hZnMvZGlyX3NlYXJjaC5jPTE4ND1pbnQgYWZzX2Rpcl9zZWFyY2goc3RydWN0IGFmc192bm9kZSAqZHZub2RlLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG4tLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmMtMjExLVxcbmZzL2Fmcy9kaXJfc2VhcmNoLmM6MjEyOlxcdFxcdHJldCA9IGFmc19kaXJfc2VhcmNoX2J1Y2tldChcXHUwMDI2aXRlciwgbmFtZSwgX2ZpZCk7XFxuZnMvYWZzL2Rpcl9zZWFyY2guYy0yMTMtXFx0XFx0dXBfcmVhZChcXHUwMDI2ZHZub2RlLVxcdTAwM2V2YWxpZGF0ZV9sb2NrKTtcXG4tLVxcbmZzL2Fmcy9pbnRlcm5hbC5oPTExMzA9dW5pb24gYWZzX3hkcl9kaXJfYmxvY2sgKmFmc19kaXJfZmluZF9ibG9jayhzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBzaXplX3QgYmxvY2spO1xcbmZzL2Fmcy9pbnRlcm5hbC5oOjExMzE6aW50IGFmc19kaXJfc2VhcmNoX2J1Y2tldChzdHJ1Y3QgYWZzX2Rpcl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgcXN0ciAqbmFtZSxcXG5mcy9hZnMvaW50ZXJuYWwuaC0xMTMyLVxcdFxcdFxcdCAgc3RydWN0IGFmc19maWQgKl9maWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQyMDozODozMi41NDc3NDE0NjVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAyODk0MjYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFGUyBEaXJlY3RvcnkgRWRpdGluZyBQYXRjaCoqXG5cbk9rYXksIHNvIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIGlzIGRlZmluaXRlbHkgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhbmFseXNpcyBoZXJlLiBMZXQncyBzZWUsIHdoYXQgb3RoZXIgc3ltYm9scyBhcmUgcmVsZXZhbnQ/IEknbSB0aGlua2luZzpcblxuKiAgIGBhZnNfZWRpdF9kaXJfcmVtb3ZlYCAtIG9idmlvdXNseSwgc2luY2UgaXQncyB0aGUgdGFyZ2V0IG9mIHRoZSBmaXhcbiogICBgYWZzX2Rpcl9maW5kX2Jsb2NrYCAtIGNvdWxkIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBibG9ja3MgYXJlIGxvY2F0ZWQgb3IgbWFuYWdlZFxuKiAgIGBhZnNfZGlyX3NlYXJjaF9idWNrZXRgIC0gdGhlIGJ1Y2tldCBzZWFyY2ggaXMgd2hlcmUgd2Ugc3RhcnRlZFxuXG5SaWdodCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBkb3VibGUtdW5tYXAgYnVnIGluIEFGUyBkaXJlY3RvcnkgZWRpdGluZy4gSXQncyBhIHN0cmFpZ2h0LXVwIGZ1bmN0aW9uYWwgZml4LCB3aGljaCBpcyBnb29kLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgLSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBjYW4gZmluZCBhbnkgb3RoZXIgcmVsYXRlZCBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBmaXggaXMgdGhhdCB0aGV5J3ZlIGFkZGVkIHRoaXMgYGFmc19kaXJfZW5kX2l0ZXJgIGhlbHBlci4gSXQgbG9va3MgbGlrZSBpdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCBiYXNpY2FsbHkgcmVwbGFjaW5nIHRob3NlIG1hbnVhbCBga3VubWFwX2xvY2FsYCBjYWxscyB0aGF0IHdlcmUgY2F1c2luZyB0aGUgZG91YmxlLXVubWFwcGluZyBwcm9ibGVtLiBTbWFydCwgdGhhdCBzaG91bGQgcHJldmVudCBmdXJ0aGVyIGlzc3Vlcy5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYEFGU19GU2AgY29uZmlnIGlzIHN1ZmZpY2llbnQgZm9yIGVuYWJsaW5nIHRoaXMgZml4LiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBvdGhlciBjb25maWdzIG5lZWRlZCBoZXJlLlxuXG5BbHJpZ2h0LCBsb29rcyBnb29kLiBUaW1lIHRvIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDcwOCwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMjA6Mzg6MzcuNTc2Njg3MTQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMzkzNjk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJBRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhZnNfZWRpdF9kaXJfcmVtb3ZlXCIsXG4gICAgXCJhZnNfZGlyX2ZpbmRfYmxvY2tcIixcbiAgICBcImFmc19kaXJfc2VhcmNoX2J1Y2tldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgZG91YmxlLXVubWFwIGJ1ZyBpbiBBRlMgZGlyZWN0b3J5IGVkaXRpbmcgKGFmc19lZGl0X2Rpcl9yZW1vdmUpIGJ5IGludHJvZHVjaW5nIGEgaGVscGVyIGFmc19kaXJfZW5kX2l0ZXIgdGhhdCBzYWZlbHkgdW5tYXBzIHRoZSBibG9jayBhbmQgY2xlYXJzIHRoZSBwb2ludGVyLCByZXBsYWNpbmcgbWFudWFsIGt1bm1hcF9sb2NhbCBjYWxscyB0aGF0IGNvdWxkIGxlYWQgdG8gZG91YmxlLXVubWFwcGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[1] Phase: Succeeded StartedAt: 2026-07-30 20:38:49 +0000 UTC FinishedAt: 2026-07-30 20:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 20:38:49 +0000 UTC FinishedAt: 2026-07-30 20:38:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2] Phase: Succeeded StartedAt: 2026-07-30 20:38:49 +0000 UTC FinishedAt: 2026-07-30 22:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 20:38:49 +0000 UTC FinishedAt: 2026-07-30 22:16:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 20:38:49 +0000 UTC FinishedAt: 2026-07-30 20:39:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 20:38:49 +0000 UTC FinishedAt: 2026-07-30 20:39:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},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-workflowcp2xv/series-workflowcp2xv-convert-artifact-3857231946/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 20:39:10 +0000 UTC FinishedAt: 2026-07-30 21:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 20:39:10 +0000 UTC FinishedAt: 2026-07-30 21:03:17 +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:*0c474d38-6c05-4b0b-90a7-abcdd1e59a29,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-workflowcp2xv/series-workflowcp2xv-convert-artifact-3857231946/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": "3552f131-1279-460f-99e8-bb4ca57de0ea", "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-workflowcp2xv/series-workflowcp2xv-build-action-423446584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 20:39:10 +0000 UTC FinishedAt: 2026-07-30 21:02:45 +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:*0c474d38-6c05-4b0b-90a7-abcdd1e59a29,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-workflowcp2xv/series-workflowcp2xv-convert-artifact-3857231946/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": "3552f131-1279-460f-99e8-bb4ca57de0ea", "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-workflowcp2xv/series-workflowcp2xv-build-action-423446584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 21:03:17 +0000 UTC FinishedAt: 2026-07-30 21:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 21:03:17 +0000 UTC FinishedAt: 2026-07-30 21:03:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 21:03:17 +0000 UTC FinishedAt: 2026-07-30 21:03:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 21:03:17 +0000 UTC FinishedAt: 2026-07-30 21:03:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},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-workflowcp2xv/series-workflowcp2xv-convert-artifact-2070329829/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 21:03:42 +0000 UTC FinishedAt: 2026-07-30 21:05:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 21:03:42 +0000 UTC FinishedAt: 2026-07-30 21:05:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3552f131-1279-460f-99e8-bb4ca57de0ea,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-workflowcp2xv/series-workflowcp2xv-build-action-423446584/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-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 21:05:46 +0000 UTC FinishedAt: 2026-07-30 21:05:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 21:05:46 +0000 UTC FinishedAt: 2026-07-30 21:05:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 21:05:46 +0000 UTC FinishedAt: 2026-07-30 21:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 21:05:46 +0000 UTC FinishedAt: 2026-07-30 21:26:12 +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:*0c474d38-6c05-4b0b-90a7-abcdd1e59a29,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-workflowcp2xv/series-workflowcp2xv-convert-artifact-2070329829/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": "433acdb2-e9a1-431b-8b6a-3f5ea75b8fc0", "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-workflowcp2xv/series-workflowcp2xv-build-action-396987953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 21:05:46 +0000 UTC FinishedAt: 2026-07-30 21:26:02 +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:*0c474d38-6c05-4b0b-90a7-abcdd1e59a29,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-workflowcp2xv/series-workflowcp2xv-convert-artifact-2070329829/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": "433acdb2-e9a1-431b-8b6a-3f5ea75b8fc0", "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-workflowcp2xv/series-workflowcp2xv-build-action-396987953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 21:26:12 +0000 UTC FinishedAt: 2026-07-30 21:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 21:26:12 +0000 UTC FinishedAt: 2026-07-30 21:26:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 21:26:12 +0000 UTC FinishedAt: 2026-07-30 21:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 21:26:12 +0000 UTC FinishedAt: 2026-07-30 21:28:04 +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:*433acdb2-e9a1-431b-8b6a-3f5ea75b8fc0,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-workflowcp2xv/series-workflowcp2xv-build-action-396987953/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-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 22:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 22:16:16 +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":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"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:*3552f131-1279-460f-99e8-bb4ca57de0ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*433acdb2-e9a1-431b-8b6a-3f5ea75b8fc0,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-workflowcp2xv/series-workflowcp2xv-build-action-423446584/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-workflowcp2xv/series-workflowcp2xv-build-action-396987953/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 21:28:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 21:28:18 +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":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"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-workflowcp2xv/series-workflowcp2xv-convert-artifact-272534634/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 21:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 21:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 21:28:13 +0000 UTC FinishedAt: 2026-07-30 21:28:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 21:28:23 +0000 UTC FinishedAt: 2026-07-30 22:16:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp2xv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["afs_edit_dir_remove","afs_dir_find_block","afs_dir_search_bucket"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"05c09c9c8a79d5539fef30d42e732eba90a15dcf","config_name":"upstream-apparmor-kasan.config","enable_configs":["AFS_FS"],"series_id":"4ce9225d-e3fd-440a-98c3-54c5accf0e88","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 21:28:23 +0000 UTC FinishedAt: 2026-07-30 22:16:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3552f131-1279-460f-99e8-bb4ca57de0ea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*433acdb2-e9a1-431b-8b6a-3f5ea75b8fc0,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-workflowcp2xv/series-workflowcp2xv-build-action-423446584/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-workflowcp2xv/series-workflowcp2xv-build-action-396987953/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-workflowcp2xv/series-workflowcp2xv-convert-artifact-272534634/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,}