Name: series-workflowcp8n8 Phase: Succeeded StartedAt: 2026-06-26 06:04:53 +0000 UTC FinishedAt: 2026-06-26 10:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[0] Phase: Succeeded StartedAt: 2026-06-26 06:04:53 +0000 UTC FinishedAt: 2026-06-26 06:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 06:04:53 +0000 UTC FinishedAt: 2026-06-26 06:15:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "719d8451-ce6d-4149-9e09-3fb9b81f9c67" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__ext4_iget", "ext4_iget_match", "ext4_xattr_inode_cache_find", "ext4_xattr_inode_lookup_create" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNzVlZjNjMDg3NDU1MDBkMzQ3ZjUwZGM1NjE5MWUxMDIxZGNlYzM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDY6MTM6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmM3NmRkMGJkZDNkODYwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMzE0NCw3ICYjNDM7MzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7XG4gXHRFWFQ0X0lHRVRfU1BFQ0lBTCA9XHQweDAwMDEsIC8qIE9LIHRvIGlnZXQgYSBzeXN0ZW0gaW5vZGUgKi9cbiBcdEVYVDRfSUdFVF9IQU5ETEUgPSBcdDB4MDAwMixcdC8qIElub2RlICMgaXMgZnJvbSBhIGhhbmRsZSAqL1xuIFx0RVhUNF9JR0VUX0JBRCA9XHRcdDB4MDAwNCwgLyogQWxsb3cgdG8gaWdldCBhIGJhZCBpbm9kZSAqL1xuLVx0RVhUNF9JR0VUX0VBX0lOT0RFID1cdDB4MDAwOFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbiYjNDM7XHRFWFQ0X0lHRVRfRUFfSU5PREUgPVx0MHgwMDA4LFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbiYjNDM7XHRFWFQ0X0lHRVRfTk9XQUlUID1cdDB4MDAxMFx0LyogTm9uLWJsb2NraW5nIGxvb2t1cCAoc2tpcCBpZiBmcmVlaW5nKSAqL1xuIH0gZXh0NF9pZ2V0X2ZsYWdzO1xuIFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLmEwOTFhNDM5NTlhMzM0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC01MjcwLDYgJiM0Mzs1MjcwLDIwIEBAIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBtaW5fb3JkZXIsIG1heF9vcmRlcik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGV4dDRfaWdldF9tYXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgaW5vLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlub2RlLVx1MDAzZWlfaW5vICE9IGlubylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0MztcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9DUkVBVElORykpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdF9faWdldChpbm9kZSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFx0XHRcdCAgZXh0NF9pZ2V0X2ZsYWdzIGZsYWdzLCBjb25zdCBjaGFyICpmdW5jdGlvbixcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBsaW5lKVxuQEAgLTUyOTgsOSAmIzQzOzUzMTIsMjQgQEAgc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gXHR9XG4gXG4tXHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0lHRVRfTk9XQUlUKSB7XG4mIzQzO1x0XHRpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBpbm8sIGV4dDRfaWdldF9tYXRjaCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAoIWlub2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpXG4mIzQzO1x0XHRcdHdhaXRfb25fbmV3X2lub2RlKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoaW5vZGVfdW5oYXNoZWQoaW5vZGUpKSkge1xuJiM0MztcdFx0XHRpcHV0KGlub2RlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7XG4mIzQzO1x0XHRpZiAoIWlub2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKSB7XG4gXHRcdHJldCA9IGNoZWNrX2lnb3RfaW5vZGUoaW5vZGUsIGZsYWdzLCBmdW5jdGlvbiwgbGluZSk7XG4gXHRcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTU1MCw3ICYjNDM7MTU1MCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcbiBcdHdoaWxlIChjZSkge1xuIFx0XHRlYV9pbm9kZSA9IGV4dDRfaWdldChpbm9kZS1cdTAwM2VpX3NiLCBjZS1cdTAwM2VlX3ZhbHVlLFxuLVx0XHRcdFx0ICAgICBFWFQ0X0lHRVRfRUFfSU5PREUpO1xuJiM0MztcdFx0XHRcdCAgICAgRVhUNF9JR0VUX0VBX0lOT0RFIHwgRVhUNF9JR0VUX05PV0FJVCk7XG4gXHRcdGlmIChJU19FUlIoZWFfaW5vZGUpKVxuIFx0XHRcdGdvdG8gbmV4dF9lbnRyeTtcbiBcdFx0ZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3MoZWFfaW5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY3NWVmM2MwODc0NTUwMGQzNDdmNTBkYzU2MTkxZTEwMjFkY2VjMzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAwNjoxMzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmM3NmRkMGJkZDNkODYwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzE0NCw3ICYjNDM7MzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7CiAJRVhUNF9JR0VUX1NQRUNJQUwgPQkweDAwMDEsIC8qIE9LIHRvIGlnZXQgYSBzeXN0ZW0gaW5vZGUgKi8KIAlFWFQ0X0lHRVRfSEFORExFID0gCTB4MDAwMiwJLyogSW5vZGUgIyBpcyBmcm9tIGEgaGFuZGxlICovCiAJRVhUNF9JR0VUX0JBRCA9CQkweDAwMDQsIC8qIEFsbG93IHRvIGlnZXQgYSBiYWQgaW5vZGUgKi8KLQlFWFQ0X0lHRVRfRUFfSU5PREUgPQkweDAwMDgJLyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi8KJiM0MzsJRVhUNF9JR0VUX0VBX0lOT0RFID0JMHgwMDA4LAkvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqLwomIzQzOwlFWFQ0X0lHRVRfTk9XQUlUID0JMHgwMDEwCS8qIE5vbi1ibG9ja2luZyBsb29rdXAgKHNraXAgaWYgZnJlZWluZykgKi8KIH0gZXh0NF9pZ2V0X2ZsYWdzOwogCiBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uYTA5MWE0Mzk1OWEzMzQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTUyNzAsNiAmIzQzOzUyNzAsMjAgQEAgdm9pZCBleHQ0X3NldF9pbm9kZV9tYXBwaW5nX29yZGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgbWluX29yZGVyLCBtYXhfb3JkZXIpOwogfQogCiYjNDM7c3RhdGljIGludCBleHQ0X2lnZXRfbWF0Y2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGlubywgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9pbm8gIT0gaW5vKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwlpZiAoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgJmFtcDsgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9DUkVBVElORykpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJX19pZ2V0KGlub2RlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKIAkJCSAgZXh0NF9pZ2V0X2ZsYWdzIGZsYWdzLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKIAkJCSAgdW5zaWduZWQgaW50IGxpbmUpCkBAIC01Mjk4LDkgJiM0Mzs1MzEyLDI0IEBAIHN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sCiAJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCX0KIAotCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBFWFQ0X0lHRVRfTk9XQUlUKSB7CiYjNDM7CQlpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBpbm8sIGV4dDRfaWdldF9tYXRjaCwgTlVMTCk7CiYjNDM7CQlpZiAoIWlub2RlKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwomIzQzOwkJaWYgKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgJmFtcDsgSV9ORVcpCiYjNDM7CQkJd2FpdF9vbl9uZXdfaW5vZGUoaW5vZGUpOwomIzQzOwomIzQzOwkJaWYgKHVubGlrZWx5KGlub2RlX3VuaGFzaGVkKGlub2RlKSkpIHsKJiM0MzsJCQlpcHV0KGlub2RlKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7CiYjNDM7CQlpZiAoIWlub2RlKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiAJaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX05FVykpIHsKIAkJcmV0ID0gY2hlY2tfaWdvdF9pbm9kZShpbm9kZSwgZmxhZ3MsIGZ1bmN0aW9uLCBsaW5lKTsKIAkJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTU1MCw3ICYjNDM7MTU1MCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAogCXdoaWxlIChjZSkgewogCQllYV9pbm9kZSA9IGV4dDRfaWdldChpbm9kZS0mZ3Q7aV9zYiwgY2UtJmd0O2VfdmFsdWUsCi0JCQkJICAgICBFWFQ0X0lHRVRfRUFfSU5PREUpOwomIzQzOwkJCQkgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSB8IEVYVDRfSUdFVF9OT1dBSVQpOwogCQlpZiAoSVNfRVJSKGVhX2lub2RlKSkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3MoZWFfaW5vZGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBQb3RlbnRpYWwgSW1wYWN0IG9uIGV4dDQgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIGV4dDQgY29kZTogYGV4dDQuaGAsIGBpbm9kZS5jYCwgYW5kIGB4YXR0ci5jYC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgaW50cm9kdWNpbmcgdGhpcyBuZXcgYEVYVDRfSUdFVF9OT1dBSVRgIGZsYWcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIGEgbm9uLWJsb2NraW5nIGlub2RlIGZldGNoLCB3aGljaCAqY291bGQqIGxlYWQgdG8gc29tZSBwZXJmb3JtYW5jZSBnYWlucywgb3IsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIG1heWJlIGludHJvZHVjZSBzb21lIHJhY2UgY29uZGl0aW9ucyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBgX19leHQ0X2lnZXRgLiBJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBgaWdldF9sb2NrZWRgIHBhdGgsIHRoZSBwYXRjaCBub3cgdXNlcyBgZmluZF9pbm9kZV9ub3dhaXRgIHdoZW4gdGhlIG5ldyBmbGFnIGlzIHNldC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gd2F0Y2gg4oCTIG5vbi1ibG9ja2luZyBpbm9kZSByZXRyaWV2YWwgaXMgYSBjbGFzc2ljIHBvaW50IG9mIGNvbnRlbnRpb24gaW4gZmlsZXN5c3RlbXMuIFRoZSBhZGRlZCBgZXh0NF9pZ2V0X21hdGNoYCBoZWxwZXIgaXMgbGlrZWx5IHBhcnQgb2YgbWFraW5nIHRoZSBub24tYmxvY2tpbmcgbG9va3VwIHNhZmUgYW5kIGVmZmljaWVudC4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCBlbnN1cmVzIGlub2RlIGludGVncml0eS4KCkFuZCBvZiBjb3Vyc2UsIHRoaXMgaXMgYWxsIHRpZWQgaW50byB4YXR0ciBoYW5kbGluZyDigJMgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYEVYVDRfSUdFVF9OT1dBSVRgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgeGF0dHJzIGFyZSBvZnRlbiBhIGJpdCBvZiBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suIEFueSBjaGFuZ2UgdG8gdGhlaXIgcmV0cmlldmFsIG1ldGhvZCB3YXJyYW50cyBzY3J1dGlueS4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggYWZmZWN0cyB4YXR0ciBoYW5kbGluZyBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21lIGludGVycGxheSB3aXRoIHNlY3VyaXR5IGZlYXR1cmVzLCB0b28uCgpHaXZlbiB0aGlzIGlzIHRvdWNoaW5nIGlub2RlIGZldGNoaW5nIGFuZCB4YXR0ciBsb2dpYywgdGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBfX2V4dDRfaWdldGAsIGBleHQ0X2lnZXRfbWF0Y2hgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAsIGFzIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLgoKTm93LCBhcyBmYXIgYXMgY29uZmlndXJhdGlvbiBnb2VzLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGVuYWJsZWQgdG8gdGVzdCB0aGlzIHByb3Blcmx5LiBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgSSYjMzk7bGwgYWxzbyBjaGVjayBpZiBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgYXJlIHJlbGV2YW50LiBMZXQgbWUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIHNwZWNpZmljIHRvIHhhdHRycywgc3VjaCBhcyBgRVhUNF9GU19YQVRUUmAuIFdoaWxlIGBFWFQ0X0ZTYCBtaWdodCBiZSBlbm91Z2ggdG8gZ2V0IHRoZSBiYXNlIGV4dDQgZmVhdHVyZXMgd29ya2luZywgSSBzaG91bGQgY2hlY2sgd2hldGhlciBtb3JlIGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSB0byB0aG9yb3VnaGx5IHRlc3QgdGhlIGNoYW5nZXMsIGVzcGVjaWFsbHkgdGhlIHhhdHRyIHBhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVYVDQgWEFUVFIgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBhbmQgdGhlIGBFWFQ0X0ZTX1hBVFRSYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpc24mIzM5O3QganVtcGluZyBvdXQgYXQgbWUuIE15IGludHVpdGlvbiwgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyBmaWxlIHN5c3RlbSwgdGVsbHMgbWUgdGhhdCBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCBpcyBlaXRoZXIgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgY29yZSBFWFQ0IGZ1bmN0aW9uYWxpdHksIG9yIGl0JiMzOTtzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHRoZSBFWFQ0IGZpbGVzeXN0ZW0gaXRzZWxmIGlzIGFjdGl2YXRlZC4gTm8gc3BlY2lmaWMgdG9nZ2xlLCBnb3QgaXQuCgpUaW1lIHRvIGNvbmZpcm0gdGhpcyBodW5jaCB3aXRoIGEgZGlyZWN0IGxvb2sgYXQgdGhlIHNvdXJjZS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0b3AuIFRoYXQgbWFrZWZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIGNvbmZpcm1pbmcgd2hldGhlciB4YXR0ciBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpbmNsdWRlZCBieSBkZWZhdWx0LCBvciBpZiBJJiMzOTttIGJhcmtpbmcgdXAgdGhlIHdyb25nIHRyZWUgZW50aXJlbHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkNvbmZpcm1pbmcgRVhUNCBEZXBlbmRlbmN5IGFuZCBGdW5jdGlvbiBTY29wZSoqCgpSaWdodCwgc28gYHhhdHRyLm9gIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGBFWFQ0X0ZTYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgYnV0IGl0JiMzOTtzIGdvb2QgdG8gaGF2ZSB0aGF0IGNvbmZpcm1lZCBhcyBhIGJhc2UgYXNzdW1wdGlvbi4gVGhhdCBtZWFucyBgRVhUNF9GU2AgaXMgZXNzZW50aWFsbHkgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgZmluZF9pbm9kZV9ub3dhaXRgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiBhcHBsaWNhYmxlIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsIG9yIGlmIGl0IGlzIHNwZWNpZmljYWxseSBpbXBsZW1lbnRlZCBmb3IgZXh0NC4gQSBxdWljayBjaGVjayBvZiBpdHMgbG9jYXRpb24gaW4gYGZzL2lub2RlLmNgIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgaXQgaXMgaW5kZWVkIGEgZ2VuZXJpYyBmdW5jdGlvbiwgbm90IHNwZWNpZmljIHRvIGV4dDQuIFRoYXQmIzM5O3MgZ29vZCBpbmZvcm1hdGlvbiwgYXMgaXQgYWZmZWN0cyB0aGUgcG9zc2liaWxpdGllcyBJIGFtIGNvbnNpZGVyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfaW5vZGVfbm93YWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz01Mjg3PXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUzMTUtXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfSUdFVF9OT1dBSVQpIHtcbmZzL2V4dDQvaW5vZGUuYzo1MzE2Olx0XHRpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBpbm8sIGV4dDRfaWdldF9tYXRjaCwgTlVMTCk7XG5mcy9leHQ0L2lub2RlLmMtNTMxNy1cdFx0aWYgKCFpbm9kZSlcbi0tXG5mcy9mMmZzL25vZGUuYz0yMDQ3PXN0YXRpYyBib29sIGZsdXNoX2RpcnR5X2lub2RlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZjJmcy9ub2RlLmMtMjA1Mi1cbmZzL2YyZnMvbm9kZS5jOjIwNTM6XHRpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiaS1cdTAwM2VzYiwgaW5vLCBmMmZzX21hdGNoX2lubywgTlVMTCk7XG5mcy9mMmZzL25vZGUuYy0yMDU0LVx0aWYgKCFpbm9kZSlcbi0tXG5mcy9pbm9kZS5jPTE3NTY9RVhQT1JUX1NZTUJPTChpbG9va3VwKTtcbi0tXG5mcy9pbm9kZS5jLTE3NTgtLyoqXG5mcy9pbm9kZS5jOjE3NTk6ICogZmluZF9pbm9kZV9ub3dhaXQgLSBmaW5kIGFuIGlub2RlIGluIHRoZSBpbm9kZSBjYWNoZVxuZnMvaW5vZGUuYy0xNzYwLSAqIEBzYjpcdFx0c3VwZXIgYmxvY2sgb2YgZmlsZSBzeXN0ZW0gdG8gc2VhcmNoXG4tLVxuZnMvaW5vZGUuYy0xNzgwLSAqL1xuZnMvaW5vZGUuYzoxNzgxOnN0cnVjdCBpbm9kZSAqZmluZF9pbm9kZV9ub3dhaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2lub2RlLmMtMTc4Mi1cdFx0XHRcdHU2NCBoYXNodmFsLFxuLS1cbmZzL2lub2RlLmMtMTgwNS19XG5mcy9pbm9kZS5jOjE4MDY6RVhQT1JUX1NZTUJPTChmaW5kX2lub2RlX25vd2FpdCk7XG5mcy9pbm9kZS5jLTE4MDctXG4tLVxuZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcbi0tXG5mcy9udGZzL21mdC5jLTcyMS0gKiBtZWFucyB0aGF0IHdlIGNhbiBzYWZlbHkgd3JpdGUgb3V0IGFueSBkaXJ0eSBtZnQgcmVjb3JkcyB0aGF0IGRvIG5vdCBoYXZlXG5mcy9udGZzL21mdC5jOjcyMjogKiB0aGVpciBpbm9kZXMgaW4gaWNhY2hlIGFzIGRldGVybWluZWQgYnkgZmluZF9pbm9kZV9ub3dhaXQoKS5cbmZzL250ZnMvbWZ0LmMtNzIzLSAqXG4tLVxuZnMvbnRmcy9tZnQuYz03NDc9c3RhdGljIGJvb2wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1mdF9ubyxcbi0tXG5mcy9udGZzL21mdC5jLTc4MC1cdFx0LypcbmZzL250ZnMvbWZ0LmM6NzgxOlx0XHQgKiBIYXZlIHRvIHVzZSBmaW5kX2lub2RlX25vd2FpdCgpIHNpbmNlIGlsb29rdXA1X25vd2FpdCgpXG5mcy9udGZzL21mdC5jLTc4Mi1cdFx0ICogd2FpdHMgZm9yIGlub2RlIHdpdGggSV9GUkVFSU5HLCB3aGljaCBjYXVzZXMgbnRmcyB0byBkZWFkbG9ja1xuLS1cbmZzL250ZnMvbWZ0LmMtNzg0LVx0XHQgKi9cbmZzL250ZnMvbWZ0LmM6Nzg1Olx0XHR2aSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBtZnRfbm8sIG50ZnNfdGVzdF9pbm9kZV93YiwgXHUwMDI2bmEpO1xuZnMvbnRmcy9tZnQuYy03ODYtXHRcdGlmIChuYS5zdGF0ZSA9PSBOSV9CZWluZ0RlbGV0ZWQgfHwgbmEuc3RhdGUgPT0gTklfQmVpbmdDcmVhdGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIGEgTW9kaWZpY2F0aW9uIHRvIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2hhbmdlIGZvY3VzZXMgb24gYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgYW5kIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VzIGBFWFQ0X0lHRVRfTk9XQUlUYC4gIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4dDQgZmlsZXN5c3RlbSwgdGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHRob3VnaHQgcHJvY2VzczogV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyAgV2UmIzM5O3JlIG1vZGlmeWluZyBob3cgdGhlIGlub2RlIGNhY2hlIGlzIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIFRoYXQgYEVYVDRfSUdFVF9OT1dBSVRgIGZsYWcgaXMgcHJldHR5IGtleS4gSXQgbWVhbnMgd2UmIzM5O3JlIGxpa2VseSBhaW1pbmcgZm9yIG5vbi1ibG9ja2luZyBpbm9kZSBsb29rdXBzIHdpdGhpbiB0aGUgeGF0dHIgY29udGV4dC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgbWF5YmUgYSBmaXggZm9yIGEgYmxvY2tpbmcgaXNzdWUsIHBlcmhhcHMgcmVsYXRlZCB0byBkZWFkbG9ja3MuCgpNeSBuZXh0IHN0ZXA/IERpdmUgaW50byBgZnMvZXh0NC94YXR0ci5jYCB3aGVyZSBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmZ1bGwqIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBhcm91bmQgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgdG8gc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGFmZmVjdGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIGlub2RlIG9wZXJhdGlvbnMsIGNhY2hlIG1hbmlwdWxhdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBhbHNvIGNhbGxlZD8gIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSwgc28gYSB3aWRlciB1bmRlcnN0YW5kaW5nIGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlICppbXBsaWNhdGlvbnMqIG9mIHRoaXMgY2hhbmdlIGJleW9uZCB0aGlzIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IGhvdyBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCBpcyBub3cgdXNpbmcgYEVYVDRfSUdFVF9OT1dBSVRgPyBJIG5lZWQgdG8gYnVpbGQgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGZsb3cgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0xNTI2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKlxuZnMvZXh0NC94YXR0ci5jOjE1Mjc6ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuZnMvZXh0NC94YXR0ci5jLTE1MjgtXHRcdFx0ICAgIHNpemVfdCB2YWx1ZV9sZW4sIHUzMiBoYXNoKVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTc4PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNTkwLVx0aGFzaCA9IGV4dDRfeGF0dHJfaW5vZGVfaGFzaChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLCB2YWx1ZSwgdmFsdWVfbGVuKTtcbmZzL2V4dDQveGF0dHIuYzoxNTkxOlx0ZWFfaW5vZGUgPSBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoaW5vZGUsIHZhbHVlLCB2YWx1ZV9sZW4sIGhhc2gpO1xuZnMvZXh0NC94YXR0ci5jLTE1OTItXHRpZiAoZWFfaW5vZGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6CgoqKkFuYWx5emluZyB0aGUgZXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgKFhBVFRSKSBDcmVhdGlvbiBQcm9jZXNzKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBpcyBjYWxsaW5nIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGF0IHVwc3RyZWFtIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgWEFUVFIgY3JlYXRpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4sIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLiBLbm93aW5nIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHdpbGwgdGVsbCBtZSB3aGF0IHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMgYXJlIGZvciB0aGlzIHNwZWNpZmljIFhBVFRSIGxvb2t1cCBhbmQgcG90ZW50aWFsIGlub2RlIGNyZWF0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSAmIzM0O3doeSYjMzQ7IGFuZCAmIzM0O3doZW4mIzM0OyBiZWhpbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBzY2hlbWUgb2YgZXh0NCBYQVRUUiBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTE1Mjc9ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNTc3LSAqL1xuZnMvZXh0NC94YXR0ci5jOjE1Nzg6c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L3hhdHRyLmMtMTU3OS1cdFx0c3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTkxOS1cbmZzL2V4dDQveGF0dHIuYzoxOTIwOlx0XHRlYV9pbm9kZSA9IGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTE5MjEtXHRcdFx0XHRcdGktXHUwMDNldmFsdWUsIGktXHUwMDNldmFsdWVfbGVuKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjI1ND1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI2OS1cbmZzL2V4dDQveGF0dHIuYzoyMjcwOlx0XHRlYV9pbm9kZSA9IGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTIyNzEtXHRcdFx0XHRcdGktXHUwMDNldmFsdWUsIGktXHUwMDNldmFsdWVfbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4MQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRXh0ZW5kZWQgQXR0cmlidXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGV4dDQgcGF0Y2ggcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLCBhbmQgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLiBFc3NlbnRpYWxseSwgdGhlIGNvcmUgZnVuY3Rpb25zIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgc2V0IG9wZXJhdGlvbnMgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGJvdGggY2FsbCBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBwcm9ibGVtLCBhIGRlYWRsb2NrIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHRoYXQgY2FuIG9jY3VyIHdoZW4gZmV0Y2hpbmcgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzLiBUaGUgc29sdXRpb24gaXMgdG8gdXNlIGBOT1dBSVRgLCBzcGVjaWZpY2FsbHkgYEVYVDRfSUdFVF9OT1dBSVRgLCBkdXJpbmcgdGhlIGlub2RlIGxvb2t1cCB0byBhdm9pZCBibG9ja2luZyB3aGlsZSB3YWl0aW5nIGZvciBpbm9kZXMgdG8gYmUgZnJlZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgbG9naWMuCgpNeSByZWFzb25pbmcgaXMgYmFzZWQgb24gaG93IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5vZGUgZmV0Y2hpbmcgcHJvY2VzcywgYWxsb3dpbmcgZm9yIGEgbm9uLWJsb2NraW5nIGxvb2t1cCAoYEVYVDRfSUdFVF9OT1dBSVRgKSB3aGVuIHdvcmtpbmcgd2l0aCBFQSBpbm9kZXMuIFRoaXMgYWltcyB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBiZWluZyBzdGFsbGVkIHdoaWxlIHRyeWluZyB0byBmcmVlIGlub2Rlcy4gU28sIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGFuIGlub2RlIHRvIGJlY29tZSBhdmFpbGFibGUsIGl0IHNpbXBseSBza2lwcyBpdC4KCkkmIzM5O3ZlIGFsc28gemVyb2VkIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgYF9fZXh0NF9pZ2V0YCwgYGV4dDRfaWdldF9tYXRjaGAsIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgLCBhbmQsIGNydWNpYWxseSwgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgaW5vZGUgcmV0cmlldmFsIGFuZCBtYW5hZ2VtZW50IHByb2Nlc3MsIGFuZCB0aGUgcGF0Y2ggaXMgY2xlYXJseSBpbXBhY3RpbmcgaG93IHRoZXkgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYE5PV0FJVGAuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gV2hpbGUgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGFjY2VzcyBjb250cm9sLCB0aGUgc3RhbmRhcmQgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMgKGxpa2UgdGhlIHVzZXIuKiBuYW1lc3BhY2UpIHdpbGwgd29yayB3aXRob3V0IHRoZW0uIFRoZXJlZm9yZSwgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSB0aGUgb25seSByZXF1aXJlZCBjb25maWcsIHdoaWNoIG1lYW5zIHRoZSBwYXRjaCBpc24mIzM5O3QgZXhjZXNzaXZlbHkgY29tcGxleCBmcm9tIGEgY29uZmlndXJhdGlvbiBwb2ludCBvZiB2aWV3LiBJIHRoaW5rIHRoaXMgd2lsbCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdXBkYXRlIGZvciB1cy4gTm93LCBsZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxMzo0My41MjQwMjYxMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTUzOTA2MzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2lnZXRcIixcbiAgICBcImV4dDRfaWdldF9tYXRjaFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjQzLjUyNDAzMzM2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4MTUwNzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjc1ZWYzYzA4NzQ1NTAwZDM0N2Y1MGRjNTYxOTFlMTAyMWRjZWMzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAwNjoxMzo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmM3NmRkMGJkZDNkODYwIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMzE0NCw3ICszMTQ0LDggQEAgdHlwZWRlZiBlbnVtIHtcXG4gXFx0RVhUNF9JR0VUX1NQRUNJQUwgPVxcdDB4MDAwMSwgLyogT0sgdG8gaWdldCBhIHN5c3RlbSBpbm9kZSAqL1xcbiBcXHRFWFQ0X0lHRVRfSEFORExFID0gXFx0MHgwMDAyLFxcdC8qIElub2RlICMgaXMgZnJvbSBhIGhhbmRsZSAqL1xcbiBcXHRFWFQ0X0lHRVRfQkFEID1cXHRcXHQweDAwMDQsIC8qIEFsbG93IHRvIGlnZXQgYSBiYWQgaW5vZGUgKi9cXG4tXFx0RVhUNF9JR0VUX0VBX0lOT0RFID1cXHQweDAwMDhcXHQvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqL1xcbitcXHRFWFQ0X0lHRVRfRUFfSU5PREUgPVxcdDB4MDAwOCxcXHQvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqL1xcbitcXHRFWFQ0X0lHRVRfTk9XQUlUID1cXHQweDAwMTBcXHQvKiBOb24tYmxvY2tpbmcgbG9va3VwIChza2lwIGlmIGZyZWVpbmcpICovXFxuIH0gZXh0NF9pZ2V0X2ZsYWdzO1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5hMDkxYTQzOTU5YTMzNCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtNTI3MCw2ICs1MjcwLDIwIEBAIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBtaW5fb3JkZXIsIG1heF9vcmRlcik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZXh0NF9pZ2V0X21hdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbm8sIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0aWYgKGlub2RlLVxcdTAwM2VpX2lubyAhPSBpbm8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRpZiAoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXFx1MDAyNiAoSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUgfCBJX0NSRUFUSU5HKSkge1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRfX2lnZXQoaW5vZGUpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbiBcXHRcXHRcXHQgIGV4dDRfaWdldF9mbGFncyBmbGFncywgY29uc3QgY2hhciAqZnVuY3Rpb24sXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGxpbmUpXFxuQEAgLTUyOTgsOSArNTMxMiwyNCBAQCBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4gXFx0fVxcbiBcXG4tXFx0aW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTtcXG4tXFx0aWYgKCFpbm9kZSlcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfSUdFVF9OT1dBSVQpIHtcXG4rXFx0XFx0aW5vZGUgPSBmaW5kX2lub2RlX25vd2FpdChzYiwgaW5vLCBleHQ0X2lnZXRfbWF0Y2gsIE5VTEwpO1xcbitcXHRcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdFxcdGlmIChpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ORVcpXFxuK1xcdFxcdFxcdHdhaXRfb25fbmV3X2lub2RlKGlub2RlKTtcXG4rXFxuK1xcdFxcdGlmICh1bmxpa2VseShpbm9kZV91bmhhc2hlZChpbm9kZSkpKSB7XFxuK1xcdFxcdFxcdGlwdXQoaW5vZGUpO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xcbitcXHRcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfTkVXKSkge1xcbiBcXHRcXHRyZXQgPSBjaGVja19pZ290X2lub2RlKGlub2RlLCBmbGFncywgZnVuY3Rpb24sIGxpbmUpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMTU1MCw3ICsxNTUwLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXG4gXFx0d2hpbGUgKGNlKSB7XFxuIFxcdFxcdGVhX2lub2RlID0gZXh0NF9pZ2V0KGlub2RlLVxcdTAwM2VpX3NiLCBjZS1cXHUwMDNlZV92YWx1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBFWFQ0X0lHRVRfRUFfSU5PREUpO1xcbitcXHRcXHRcXHRcXHQgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSB8IEVYVDRfSUdFVF9OT1dBSVQpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcXG4gXFx0XFx0XFx0Z290byBuZXh0X2VudHJ5O1xcbiBcXHRcXHRleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhlYV9pbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjQ0LjA2MjgxOTc5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMDAyNTkwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZXh0NF9pZ2V0XCIsXG4gICAgXCJleHQ0X2lnZXRfbWF0Y2hcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5vbi1ibG9ja2luZyBpbm9kZSBsb29rdXAgZmxhZyAoRVhUNF9JR0VUX05PV0FJVCkgaW4gZXh0NCBhbmQgdXNlcyBpdCBkdXJpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGUgY2FjaGUgbG9va3VwcyB0byBhdm9pZCB3YWl0aW5nIG9uIGlub2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGZldGNoaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3NWVmM2MwODc0NTUwMGQzNDdmNTBkYzU2MTkxZTEwMjFkY2VjMzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwNjoxMzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi5jNzZkZDBiZGQzZDg2MCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTMxNDQsNyArMzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7XG4gXHRFWFQ0X0lHRVRfU1BFQ0lBTCA9XHQweDAwMDEsIC8qIE9LIHRvIGlnZXQgYSBzeXN0ZW0gaW5vZGUgKi9cbiBcdEVYVDRfSUdFVF9IQU5ETEUgPSBcdDB4MDAwMixcdC8qIElub2RlICMgaXMgZnJvbSBhIGhhbmRsZSAqL1xuIFx0RVhUNF9JR0VUX0JBRCA9XHRcdDB4MDAwNCwgLyogQWxsb3cgdG8gaWdldCBhIGJhZCBpbm9kZSAqL1xuLVx0RVhUNF9JR0VUX0VBX0lOT0RFID1cdDB4MDAwOFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbitcdEVYVDRfSUdFVF9FQV9JTk9ERSA9XHQweDAwMDgsXHQvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqL1xuK1x0RVhUNF9JR0VUX05PV0FJVCA9XHQweDAwMTBcdC8qIE5vbi1ibG9ja2luZyBsb29rdXAgKHNraXAgaWYgZnJlZWluZykgKi9cbiB9IGV4dDRfaWdldF9mbGFncztcbiBcbiBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5hMDkxYTQzOTU5YTMzNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNTI3MCw2ICs1MjcwLDIwIEBAIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBtaW5fb3JkZXIsIG1heF9vcmRlcik7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZXh0NF9pZ2V0X21hdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbm8sIHZvaWQgKmRhdGEpXG4re1xuK1x0aWYgKGlub2RlLVx1MDAzZWlfaW5vICE9IGlubylcbitcdFx0cmV0dXJuIDA7XG4rXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9DUkVBVElORykpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0X19pZ2V0KGlub2RlKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdFx0XHQgIGV4dDRfaWdldF9mbGFncyBmbGFncywgY29uc3QgY2hhciAqZnVuY3Rpb24sXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgbGluZSlcbkBAIC01Mjk4LDkgKzUzMTIsMjQgQEAgc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gXHR9XG4gXG4tXHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfSUdFVF9OT1dBSVQpIHtcbitcdFx0aW5vZGUgPSBmaW5kX2lub2RlX25vd2FpdChzYiwgaW5vLCBleHQ0X2lnZXRfbWF0Y2gsIE5VTEwpO1xuK1x0XHRpZiAoIWlub2RlKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0XHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpXG4rXHRcdFx0d2FpdF9vbl9uZXdfaW5vZGUoaW5vZGUpO1xuK1xuK1x0XHRpZiAodW5saWtlbHkoaW5vZGVfdW5oYXNoZWQoaW5vZGUpKSkge1xuK1x0XHRcdGlwdXQoaW5vZGUpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xuK1x0XHRpZiAoIWlub2RlKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuIFx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKSB7XG4gXHRcdHJldCA9IGNoZWNrX2lnb3RfaW5vZGUoaW5vZGUsIGZsYWdzLCBmdW5jdGlvbiwgbGluZSk7XG4gXHRcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTU1MCw3ICsxNTUwLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFxuIFx0d2hpbGUgKGNlKSB7XG4gXHRcdGVhX2lub2RlID0gZXh0NF9pZ2V0KGlub2RlLVx1MDAzZWlfc2IsIGNlLVx1MDAzZWVfdmFsdWUsXG4tXHRcdFx0XHQgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSk7XG4rXHRcdFx0XHQgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSB8IEVYVDRfSUdFVF9OT1dBSVQpO1xuIFx0XHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcbiBcdFx0XHRnb3RvIG5leHRfZW50cnk7XG4gXHRcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKGVhX2lub2RlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjQ0LjA2MjgyMTk0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjQ0NDQ5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IFBvdGVudGlhbCBJbXBhY3Qgb24gZXh0NCBGaWxlc3lzdGVtKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBzb21lIGNvcmUgZXh0NCBjb2RlOiBgZXh0NC5oYCwgYGlub2RlLmNgLCBhbmQgYHhhdHRyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBgRVhUNF9JR0VUX05PV0FJVGAgZmxhZywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgYSBub24tYmxvY2tpbmcgaW5vZGUgZmV0Y2gsIHdoaWNoICpjb3VsZCogbGVhZCB0byBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLCBvciwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgbWF5YmUgaW50cm9kdWNlIHNvbWUgcmFjZSBjb25kaXRpb25zIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBgX19leHQ0X2lnZXRgLiBJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBgaWdldF9sb2NrZWRgIHBhdGgsIHRoZSBwYXRjaCBub3cgdXNlcyBgZmluZF9pbm9kZV9ub3dhaXRgIHdoZW4gdGhlIG5ldyBmbGFnIGlzIHNldC4gVGhhdCdzIGEga2V5IGRldGFpbCB0byB3YXRjaCDigJMgbm9uLWJsb2NraW5nIGlub2RlIHJldHJpZXZhbCBpcyBhIGNsYXNzaWMgcG9pbnQgb2YgY29udGVudGlvbiBpbiBmaWxlc3lzdGVtcy4gVGhlIGFkZGVkIGBleHQ0X2lnZXRfbWF0Y2hgIGhlbHBlciBpcyBsaWtlbHkgcGFydCBvZiBtYWtpbmcgdGhlIG5vbi1ibG9ja2luZyBsb29rdXAgc2FmZSBhbmQgZWZmaWNpZW50LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGVuc3VyZXMgaW5vZGUgaW50ZWdyaXR5LlxuXG5BbmQgb2YgY291cnNlLCB0aGlzIGlzIGFsbCB0aWVkIGludG8geGF0dHIgaGFuZGxpbmcg4oCTIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGBFWFQ0X0lHRVRfTk9XQUlUYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIHhhdHRycyBhcmUgb2Z0ZW4gYSBiaXQgb2YgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBBbnkgY2hhbmdlIHRvIHRoZWlyIHJldHJpZXZhbCBtZXRob2Qgd2FycmFudHMgc2NydXRpbnkuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFmZmVjdHMgeGF0dHIgaGFuZGxpbmcgbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcnBsYXkgd2l0aCBzZWN1cml0eSBmZWF0dXJlcywgdG9vLlxuXG5HaXZlbiB0aGlzIGlzIHRvdWNoaW5nIGlub2RlIGZldGNoaW5nIGFuZCB4YXR0ciBsb2dpYywgdGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdsbCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYF9fZXh0NF9pZ2V0YCwgYGV4dDRfaWdldF9tYXRjaGAsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCwgYXMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZXMuXG5cbk5vdywgYXMgZmFyIGFzIGNvbmZpZ3VyYXRpb24gZ29lcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGVuYWJsZWQgdG8gdGVzdCB0aGlzIHByb3Blcmx5LiBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgSSdsbCBhbHNvIGNoZWNrIGlmIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgcmVsZXZhbnQuIExldCBtZSBjaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBzcGVjaWZpYyB0byB4YXR0cnMsIHN1Y2ggYXMgYEVYVDRfRlNfWEFUVFJgLiBXaGlsZSBgRVhUNF9GU2AgbWlnaHQgYmUgZW5vdWdoIHRvIGdldCB0aGUgYmFzZSBleHQ0IGZlYXR1cmVzIHdvcmtpbmcsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgbW9yZSBjb25maWdzIGFyZSBuZWNlc3NhcnkgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHRoZSB4YXR0ciBwYXJ0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjUwLjkyNzI3MDAyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjgwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjUxLjAzNzE0NTQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjY0MjkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRVhUNCBYQVRUUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBhbmQgdGhlIGBFWFQ0X0ZTX1hBVFRSYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpc24ndCBqdW1waW5nIG91dCBhdCBtZS4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGZpbGUgc3lzdGVtLCB0ZWxscyBtZSB0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGlzIGVpdGhlciBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIEVYVDQgZnVuY3Rpb25hbGl0eSwgb3IgaXQncyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGl0c2VsZiBpcyBhY3RpdmF0ZWQuIE5vIHNwZWNpZmljIHRvZ2dsZSwgZ290IGl0LlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpcyBodW5jaCB3aXRoIGEgZGlyZWN0IGxvb2sgYXQgdGhlIHNvdXJjZS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0b3AuIFRoYXQgbWFrZWZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIGNvbmZpcm1pbmcgd2hldGhlciB4YXR0ciBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpbmNsdWRlZCBieSBkZWZhdWx0LCBvciBpZiBJJ20gYmFya2luZyB1cCB0aGUgd3JvbmcgdHJlZSBlbnRpcmVseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTM6NTQuMDI5NzkwNDgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzI4Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjU0LjEwMjUyODI0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA5NDU5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipDb25maXJtaW5nIEVYVDQgRGVwZW5kZW5jeSBhbmQgRnVuY3Rpb24gU2NvcGUqKlxuXG5SaWdodCwgc28gYHhhdHRyLm9gIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGBFWFQ0X0ZTYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLCBidXQgaXQncyBnb29kIHRvIGhhdmUgdGhhdCBjb25maXJtZWQgYXMgYSBiYXNlIGFzc3VtcHRpb24uIFRoYXQgbWVhbnMgYEVYVDRfRlNgIGlzIGVzc2VudGlhbGx5IHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgZmluZF9pbm9kZV9ub3dhaXRgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiBhcHBsaWNhYmxlIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsIG9yIGlmIGl0IGlzIHNwZWNpZmljYWxseSBpbXBsZW1lbnRlZCBmb3IgZXh0NC4gQSBxdWljayBjaGVjayBvZiBpdHMgbG9jYXRpb24gaW4gYGZzL2lub2RlLmNgIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgaXQgaXMgaW5kZWVkIGEgZ2VuZXJpYyBmdW5jdGlvbiwgbm90IHNwZWNpZmljIHRvIGV4dDQuIFRoYXQncyBnb29kIGluZm9ybWF0aW9uLCBhcyBpdCBhZmZlY3RzIHRoZSBwb3NzaWJpbGl0aWVzIEkgYW0gY29uc2lkZXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxMzo1Ny41NDM0Nzc3OTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDkxNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfaW5vZGVfbm93YWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NTI4Nz1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUzMTUtXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9JR0VUX05PV0FJVCkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MzE2OlxcdFxcdGlub2RlID0gZmluZF9pbm9kZV9ub3dhaXQoc2IsIGlubywgZXh0NF9pZ2V0X21hdGNoLCBOVUxMKTtcXG5mcy9leHQ0L2lub2RlLmMtNTMxNy1cXHRcXHRpZiAoIWlub2RlKVxcbi0tXFxuZnMvZjJmcy9ub2RlLmM9MjA0Nz1zdGF0aWMgYm9vbCBmbHVzaF9kaXJ0eV9pbm9kZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZjJmcy9ub2RlLmMtMjA1Mi1cXG5mcy9mMmZzL25vZGUuYzoyMDUzOlxcdGlub2RlID0gZmluZF9pbm9kZV9ub3dhaXQoc2JpLVxcdTAwM2VzYiwgaW5vLCBmMmZzX21hdGNoX2lubywgTlVMTCk7XFxuZnMvZjJmcy9ub2RlLmMtMjA1NC1cXHRpZiAoIWlub2RlKVxcbi0tXFxuZnMvaW5vZGUuYz0xNzU2PUVYUE9SVF9TWU1CT0woaWxvb2t1cCk7XFxuLS1cXG5mcy9pbm9kZS5jLTE3NTgtLyoqXFxuZnMvaW5vZGUuYzoxNzU5OiAqIGZpbmRfaW5vZGVfbm93YWl0IC0gZmluZCBhbiBpbm9kZSBpbiB0aGUgaW5vZGUgY2FjaGVcXG5mcy9pbm9kZS5jLTE3NjAtICogQHNiOlxcdFxcdHN1cGVyIGJsb2NrIG9mIGZpbGUgc3lzdGVtIHRvIHNlYXJjaFxcbi0tXFxuZnMvaW5vZGUuYy0xNzgwLSAqL1xcbmZzL2lub2RlLmM6MTc4MTpzdHJ1Y3QgaW5vZGUgKmZpbmRfaW5vZGVfbm93YWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaW5vZGUuYy0xNzgyLVxcdFxcdFxcdFxcdHU2NCBoYXNodmFsLFxcbi0tXFxuZnMvaW5vZGUuYy0xODA1LX1cXG5mcy9pbm9kZS5jOjE4MDY6RVhQT1JUX1NZTUJPTChmaW5kX2lub2RlX25vd2FpdCk7XFxuZnMvaW5vZGUuYy0xODA3LVxcbi0tXFxuZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcXG4tLVxcbmZzL250ZnMvbWZ0LmMtNzIxLSAqIG1lYW5zIHRoYXQgd2UgY2FuIHNhZmVseSB3cml0ZSBvdXQgYW55IGRpcnR5IG1mdCByZWNvcmRzIHRoYXQgZG8gbm90IGhhdmVcXG5mcy9udGZzL21mdC5jOjcyMjogKiB0aGVpciBpbm9kZXMgaW4gaWNhY2hlIGFzIGRldGVybWluZWQgYnkgZmluZF9pbm9kZV9ub3dhaXQoKS5cXG5mcy9udGZzL21mdC5jLTcyMy0gKlxcbi0tXFxuZnMvbnRmcy9tZnQuYz03NDc9c3RhdGljIGJvb2wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1mdF9ubyxcXG4tLVxcbmZzL250ZnMvbWZ0LmMtNzgwLVxcdFxcdC8qXFxuZnMvbnRmcy9tZnQuYzo3ODE6XFx0XFx0ICogSGF2ZSB0byB1c2UgZmluZF9pbm9kZV9ub3dhaXQoKSBzaW5jZSBpbG9va3VwNV9ub3dhaXQoKVxcbmZzL250ZnMvbWZ0LmMtNzgyLVxcdFxcdCAqIHdhaXRzIGZvciBpbm9kZSB3aXRoIElfRlJFRUlORywgd2hpY2ggY2F1c2VzIG50ZnMgdG8gZGVhZGxvY2tcXG4tLVxcbmZzL250ZnMvbWZ0LmMtNzg0LVxcdFxcdCAqL1xcbmZzL250ZnMvbWZ0LmM6Nzg1OlxcdFxcdHZpID0gZmluZF9pbm9kZV9ub3dhaXQoc2IsIG1mdF9ubywgbnRmc190ZXN0X2lub2RlX3diLCBcXHUwMDI2bmEpO1xcbmZzL250ZnMvbWZ0LmMtNzg2LVxcdFxcdGlmIChuYS5zdGF0ZSA9PSBOSV9CZWluZ0RlbGV0ZWQgfHwgbmEuc3RhdGUgPT0gTklfQmVpbmdDcmVhdGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxMzo1Ny42NTA5NzY3NDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcwNDU2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIGEgTW9kaWZpY2F0aW9uIHRvIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCBhbmQgc3BlY2lmaWNhbGx5IGludHJvZHVjZXMgYEVYVDRfSUdFVF9OT1dBSVRgLiAgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtLCB0aGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgdGhvdWdodCBwcm9jZXNzOiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gIFdlJ3JlIG1vZGlmeWluZyBob3cgdGhlIGlub2RlIGNhY2hlIGlzIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIFRoYXQgYEVYVDRfSUdFVF9OT1dBSVRgIGZsYWcgaXMgcHJldHR5IGtleS4gSXQgbWVhbnMgd2UncmUgbGlrZWx5IGFpbWluZyBmb3Igbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cHMgd2l0aGluIHRoZSB4YXR0ciBjb250ZXh0LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBtYXliZSBhIGZpeCBmb3IgYSBibG9ja2luZyBpc3N1ZSwgcGVyaGFwcyByZWxhdGVkIHRvIGRlYWRsb2Nrcy5cblxuTXkgbmV4dCBzdGVwPyBEaXZlIGludG8gYGZzL2V4dDQveGF0dHIuY2Agd2hlcmUgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpmdWxsKiBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBhcm91bmQgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgdG8gc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGFmZmVjdGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIGlub2RlIG9wZXJhdGlvbnMsIGNhY2hlIG1hbmlwdWxhdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBhbHNvIGNhbGxlZD8gIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSwgc28gYSB3aWRlciB1bmRlcnN0YW5kaW5nIGlzIHBhcmFtb3VudC4gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgKmltcGxpY2F0aW9ucyogb2YgdGhpcyBjaGFuZ2UgYmV5b25kIHRoaXMgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgaG93IGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGlzIG5vdyB1c2luZyBgRVhUNF9JR0VUX05PV0FJVGA/IEkgbmVlZCB0byBidWlsZCBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgZmxvdyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTQ6MDEuOTIxNDM2ODU4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTUzNzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xNTI2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKlxcbmZzL2V4dDQveGF0dHIuYzoxNTI3OmV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTUyOC1cXHRcXHRcXHQgICAgc2l6ZV90IHZhbHVlX2xlbiwgdTMyIGhhc2gpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTU3OD1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNTkwLVxcdGhhc2ggPSBleHQ0X3hhdHRyX2lub2RlX2hhc2goRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiksIHZhbHVlLCB2YWx1ZV9sZW4pO1xcbmZzL2V4dDQveGF0dHIuYzoxNTkxOlxcdGVhX2lub2RlID0gZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKGlub2RlLCB2YWx1ZSwgdmFsdWVfbGVuLCBoYXNoKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTU5Mi1cXHRpZiAoZWFfaW5vZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTQ6MDIuMDEyOTgyNDc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDI1NjY0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6XG5cbioqQW5hbHl6aW5nIHRoZSBleHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSAoWEFUVFIpIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBpcyBjYWxsaW5nIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGF0IHVwc3RyZWFtIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgWEFUVFIgY3JlYXRpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLCBsb29raW5nIGZvciB0aGUgY2FsbCBzaXRlcyBvZiBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYC4gS25vd2luZyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHdpbGwgdGVsbCBtZSB3aGF0IHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMgYXJlIGZvciB0aGlzIHNwZWNpZmljIFhBVFRSIGxvb2t1cCBhbmQgcG90ZW50aWFsIGlub2RlIGNyZWF0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiBiZWhpbmQgdGhpcyBmdW5jdGlvbidzIGV4ZWN1dGlvbiB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiBleHQ0IFhBVFRSIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxNDowNi4wMTU1NTIzNDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzc0NTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xNTI3PWV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNTc3LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoxNTc4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQveGF0dHIuYy0xNTc5LVxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xOTE5LVxcbmZzL2V4dDQveGF0dHIuYzoxOTIwOlxcdFxcdGVhX2lub2RlID0gZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5MjEtXFx0XFx0XFx0XFx0XFx0aS1cXHUwMDNldmFsdWUsIGktXFx1MDAzZXZhbHVlX2xlbik7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjI1ND1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjY5LVxcbmZzL2V4dDQveGF0dHIuYzoyMjcwOlxcdFxcdGVhX2lub2RlID0gZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTIyNzEtXFx0XFx0XFx0XFx0XFx0aS1cXHUwMDNldmFsdWUsIGktXFx1MDAzZXZhbHVlX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjE0OjA2LjEzMzMwNTMyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQzNDk0NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgZXh0NCBwYXRjaCByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGFuZCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZy4gRXNzZW50aWFsbHksIHRoZSBjb3JlIGZ1bmN0aW9ucyBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIHNldCBvcGVyYXRpb25zIGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzLCBib3RoIGNhbGwgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgcHJvYmxlbSwgYSBkZWFkbG9jayBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCB0aGF0IGNhbiBvY2N1ciB3aGVuIGZldGNoaW5nIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2Rlcy4gVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSBgTk9XQUlUYCwgc3BlY2lmaWNhbGx5IGBFWFQ0X0lHRVRfTk9XQUlUYCwgZHVyaW5nIHRoZSBpbm9kZSBsb29rdXAgdG8gYXZvaWQgYmxvY2tpbmcgd2hpbGUgd2FpdGluZyBmb3IgaW5vZGVzIHRvIGJlIGZyZWVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGxvZ2ljLlxuXG5NeSByZWFzb25pbmcgaXMgYmFzZWQgb24gaG93IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5vZGUgZmV0Y2hpbmcgcHJvY2VzcywgYWxsb3dpbmcgZm9yIGEgbm9uLWJsb2NraW5nIGxvb2t1cCAoYEVYVDRfSUdFVF9OT1dBSVRgKSB3aGVuIHdvcmtpbmcgd2l0aCBFQSBpbm9kZXMuIFRoaXMgYWltcyB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBiZWluZyBzdGFsbGVkIHdoaWxlIHRyeWluZyB0byBmcmVlIGlub2Rlcy4gU28sIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGFuIGlub2RlIHRvIGJlY29tZSBhdmFpbGFibGUsIGl0IHNpbXBseSBza2lwcyBpdC5cblxuSSd2ZSBhbHNvIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEkgc2VlIHRoZSBpbXBvcnRhbmNlIG9mIGBfX2V4dDRfaWdldGAsIGBleHQ0X2lnZXRfbWF0Y2hgLCBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCwgYW5kLCBjcnVjaWFsbHksIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGlub2RlIHJldHJpZXZhbCBhbmQgbWFuYWdlbWVudCBwcm9jZXNzLCBhbmQgdGhlIHBhdGNoIGlzIGNsZWFybHkgaW1wYWN0aW5nIGhvdyB0aGV5IGludGVyYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBOT1dBSVRgLlxuXG5GaW5hbGx5LCBJJ3ZlIGNoZWNrZWQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBXaGlsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgYXJlIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgYWNjZXNzIGNvbnRyb2wsIHRoZSBzdGFuZGFyZCBleHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucyAobGlrZSB0aGUgdXNlci4qIG5hbWVzcGFjZSkgd2lsbCB3b3JrIHdpdGhvdXQgdGhlbS4gVGhlcmVmb3JlLCBgRVhUNF9GU2AgYWxvbmUgc2hvdWxkIGJlIHRoZSBvbmx5IHJlcXVpcmVkIGNvbmZpZywgd2hpY2ggbWVhbnMgdGhlIHBhdGNoIGlzbid0IGV4Y2Vzc2l2ZWx5IGNvbXBsZXggZnJvbSBhIGNvbmZpZ3VyYXRpb24gcG9pbnQgb2Ygdmlldy4gSSB0aGluayB0aGlzIHdpbGwgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHVwZGF0ZSBmb3IgdXMuIE5vdywgbGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4MSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTQ6MTIuNzc2ODAzODk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MjY5NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2lnZXRcIixcbiAgICBcImV4dDRfaWdldF9tYXRjaFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZXh0NF9pZ2V0XCIsXG4gICAgXCJleHQ0X2lnZXRfbWF0Y2hcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5vbi1ibG9ja2luZyBpbm9kZSBsb29rdXAgZmxhZyAoRVhUNF9JR0VUX05PV0FJVCkgaW4gZXh0NCBhbmQgdXNlcyBpdCBkdXJpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGUgY2FjaGUgbG9va3VwcyB0byBhdm9pZCB3YWl0aW5nIG9uIGlub2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGZldGNoaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowcp8n8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 06:04:53 +0000 UTC FinishedAt: 2026-06-26 06:14:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4edcdefd4083ae04b1a5656f4be6cd83ae919ef4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "719d8451-ce6d-4149-9e09-3fb9b81f9c67" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__ext4_iget", "ext4_iget_match", "ext4_xattr_inode_cache_find", "ext4_xattr_inode_lookup_create" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmNzVlZjNjMDg3NDU1MDBkMzQ3ZjUwZGM1NjE5MWUxMDIxZGNlYzM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMDY6MTM6NDIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmM3NmRkMGJkZDNkODYwIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMzE0NCw3ICYjNDM7MzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7XG4gXHRFWFQ0X0lHRVRfU1BFQ0lBTCA9XHQweDAwMDEsIC8qIE9LIHRvIGlnZXQgYSBzeXN0ZW0gaW5vZGUgKi9cbiBcdEVYVDRfSUdFVF9IQU5ETEUgPSBcdDB4MDAwMixcdC8qIElub2RlICMgaXMgZnJvbSBhIGhhbmRsZSAqL1xuIFx0RVhUNF9JR0VUX0JBRCA9XHRcdDB4MDAwNCwgLyogQWxsb3cgdG8gaWdldCBhIGJhZCBpbm9kZSAqL1xuLVx0RVhUNF9JR0VUX0VBX0lOT0RFID1cdDB4MDAwOFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbiYjNDM7XHRFWFQ0X0lHRVRfRUFfSU5PREUgPVx0MHgwMDA4LFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbiYjNDM7XHRFWFQ0X0lHRVRfTk9XQUlUID1cdDB4MDAxMFx0LyogTm9uLWJsb2NraW5nIGxvb2t1cCAoc2tpcCBpZiBmcmVlaW5nKSAqL1xuIH0gZXh0NF9pZ2V0X2ZsYWdzO1xuIFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xuaW5kZXggY2U5OTgwN2M1ZjViMmMuLmEwOTFhNDM5NTlhMzM0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9pbm9kZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmNcbkBAIC01MjcwLDYgJiM0Mzs1MjcwLDIwIEBAIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBtaW5fb3JkZXIsIG1heF9vcmRlcik7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGV4dDRfaWdldF9tYXRjaChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgaW5vLCB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlub2RlLVx1MDAzZWlfaW5vICE9IGlubylcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuJiM0MztcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9DUkVBVElORykpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1x0fVxuJiM0MztcdF9faWdldChpbm9kZSk7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxuIFx0XHRcdCAgZXh0NF9pZ2V0X2ZsYWdzIGZsYWdzLCBjb25zdCBjaGFyICpmdW5jdGlvbixcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBsaW5lKVxuQEAgLTUyOTgsOSAmIzQzOzUzMTIsMjQgQEAgc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gXHR9XG4gXG4tXHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0lHRVRfTk9XQUlUKSB7XG4mIzQzO1x0XHRpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBpbm8sIGV4dDRfaWdldF9tYXRjaCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAoIWlub2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpXG4mIzQzO1x0XHRcdHdhaXRfb25fbmV3X2lub2RlKGlub2RlKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoaW5vZGVfdW5oYXNoZWQoaW5vZGUpKSkge1xuJiM0MztcdFx0XHRpcHV0KGlub2RlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7XG4mIzQzO1x0XHRpZiAoIWlub2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKSB7XG4gXHRcdHJldCA9IGNoZWNrX2lnb3RfaW5vZGUoaW5vZGUsIGZsYWdzLCBmdW5jdGlvbiwgbGluZSk7XG4gXHRcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTU1MCw3ICYjNDM7MTU1MCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcbiBcdHdoaWxlIChjZSkge1xuIFx0XHRlYV9pbm9kZSA9IGV4dDRfaWdldChpbm9kZS1cdTAwM2VpX3NiLCBjZS1cdTAwM2VlX3ZhbHVlLFxuLVx0XHRcdFx0ICAgICBFWFQ0X0lHRVRfRUFfSU5PREUpO1xuJiM0MztcdFx0XHRcdCAgICAgRVhUNF9JR0VUX0VBX0lOT0RFIHwgRVhUNF9JR0VUX05PV0FJVCk7XG4gXHRcdGlmIChJU19FUlIoZWFfaW5vZGUpKVxuIFx0XHRcdGdvdG8gbmV4dF9lbnRyeTtcbiBcdFx0ZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3MoZWFfaW5vZGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY3NWVmM2MwODc0NTUwMGQzNDdmNTBkYzU2MTkxZTEwMjFkY2VjMzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAwNjoxMzo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmM3NmRkMGJkZDNkODYwIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMzE0NCw3ICYjNDM7MzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7CiAJRVhUNF9JR0VUX1NQRUNJQUwgPQkweDAwMDEsIC8qIE9LIHRvIGlnZXQgYSBzeXN0ZW0gaW5vZGUgKi8KIAlFWFQ0X0lHRVRfSEFORExFID0gCTB4MDAwMiwJLyogSW5vZGUgIyBpcyBmcm9tIGEgaGFuZGxlICovCiAJRVhUNF9JR0VUX0JBRCA9CQkweDAwMDQsIC8qIEFsbG93IHRvIGlnZXQgYSBiYWQgaW5vZGUgKi8KLQlFWFQ0X0lHRVRfRUFfSU5PREUgPQkweDAwMDgJLyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi8KJiM0MzsJRVhUNF9JR0VUX0VBX0lOT0RFID0JMHgwMDA4LAkvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqLwomIzQzOwlFWFQ0X0lHRVRfTk9XQUlUID0JMHgwMDEwCS8qIE5vbi1ibG9ja2luZyBsb29rdXAgKHNraXAgaWYgZnJlZWluZykgKi8KIH0gZXh0NF9pZ2V0X2ZsYWdzOwogCiBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uYTA5MWE0Mzk1OWEzMzQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTUyNzAsNiAmIzQzOzUyNzAsMjAgQEAgdm9pZCBleHQ0X3NldF9pbm9kZV9tYXBwaW5nX29yZGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJbWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtJmd0O2lfbWFwcGluZywgbWluX29yZGVyLCBtYXhfb3JkZXIpOwogfQogCiYjNDM7c3RhdGljIGludCBleHQ0X2lnZXRfbWF0Y2goc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGlubywgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CWlmIChpbm9kZS0mZ3Q7aV9pbm8gIT0gaW5vKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwlpZiAoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgJmFtcDsgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9DUkVBVElORykpIHsKJiM0MzsJCXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CQlyZXR1cm4gLTE7CiYjNDM7CX0KJiM0MzsJX19pZ2V0KGlub2RlKTsKJiM0MzsJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOwogc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubywKIAkJCSAgZXh0NF9pZ2V0X2ZsYWdzIGZsYWdzLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKIAkJCSAgdW5zaWduZWQgaW50IGxpbmUpCkBAIC01Mjk4LDkgJiM0Mzs1MzEyLDI0IEBAIHN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sCiAJCXJldHVybiBFUlJfUFRSKC1FRlNDT1JSVVBURUQpOwogCX0KIAotCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBFWFQ0X0lHRVRfTk9XQUlUKSB7CiYjNDM7CQlpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBpbm8sIGV4dDRfaWdldF9tYXRjaCwgTlVMTCk7CiYjNDM7CQlpZiAoIWlub2RlKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwomIzQzOwkJaWYgKGlub2RlX3N0YXRlX3JlYWRfb25jZShpbm9kZSkgJmFtcDsgSV9ORVcpCiYjNDM7CQkJd2FpdF9vbl9uZXdfaW5vZGUoaW5vZGUpOwomIzQzOwomIzQzOwkJaWYgKHVubGlrZWx5KGlub2RlX3VuaGFzaGVkKGlub2RlKSkpIHsKJiM0MzsJCQlpcHV0KGlub2RlKTsKJiM0MzsJCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIGlubyk7CiYjNDM7CQlpZiAoIWlub2RlKQomIzQzOwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwomIzQzOwl9CiYjNDM7CiAJaWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSAmYW1wOyBJX05FVykpIHsKIAkJcmV0ID0gY2hlY2tfaWdvdF9pbm9kZShpbm9kZSwgZmxhZ3MsIGZ1bmN0aW9uLCBsaW5lKTsKIAkJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jCmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMTU1MCw3ICYjNDM7MTU1MCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAogCXdoaWxlIChjZSkgewogCQllYV9pbm9kZSA9IGV4dDRfaWdldChpbm9kZS0mZ3Q7aV9zYiwgY2UtJmd0O2VfdmFsdWUsCi0JCQkJICAgICBFWFQ0X0lHRVRfRUFfSU5PREUpOwomIzQzOwkJCQkgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSB8IEVYVDRfSUdFVF9OT1dBSVQpOwogCQlpZiAoSVNfRVJSKGVhX2lub2RlKSkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAkJZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3MoZWFfaW5vZGUpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBQb3RlbnRpYWwgSW1wYWN0IG9uIGV4dDQgRmlsZXN5c3RlbSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjb3JlIGV4dDQgY29kZTogYGV4dDQuaGAsIGBpbm9kZS5jYCwgYW5kIGB4YXR0ci5jYC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiB0aHJ1c3QgaXMgaW50cm9kdWNpbmcgdGhpcyBuZXcgYEVYVDRfSUdFVF9OT1dBSVRgIGZsYWcsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGlzIG1lYW5zIGEgbm9uLWJsb2NraW5nIGlub2RlIGZldGNoLCB3aGljaCAqY291bGQqIGxlYWQgdG8gc29tZSBwZXJmb3JtYW5jZSBnYWlucywgb3IsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIG1heWJlIGludHJvZHVjZSBzb21lIHJhY2UgY29uZGl0aW9ucyBpZiBub3QgaGFuZGxlZCBjYXJlZnVsbHkuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyBgX19leHQ0X2lnZXRgLiBJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBgaWdldF9sb2NrZWRgIHBhdGgsIHRoZSBwYXRjaCBub3cgdXNlcyBgZmluZF9pbm9kZV9ub3dhaXRgIHdoZW4gdGhlIG5ldyBmbGFnIGlzIHNldC4gVGhhdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gd2F0Y2gg4oCTIG5vbi1ibG9ja2luZyBpbm9kZSByZXRyaWV2YWwgaXMgYSBjbGFzc2ljIHBvaW50IG9mIGNvbnRlbnRpb24gaW4gZmlsZXN5c3RlbXMuIFRoZSBhZGRlZCBgZXh0NF9pZ2V0X21hdGNoYCBoZWxwZXIgaXMgbGlrZWx5IHBhcnQgb2YgbWFraW5nIHRoZSBub24tYmxvY2tpbmcgbG9va3VwIHNhZmUgYW5kIGVmZmljaWVudC4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCBlbnN1cmVzIGlub2RlIGludGVncml0eS4KCkFuZCBvZiBjb3Vyc2UsIHRoaXMgaXMgYWxsIHRpZWQgaW50byB4YXR0ciBoYW5kbGluZyDigJMgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgaXMgYmVpbmcgdXBkYXRlZCB0byB1c2UgYEVYVDRfSUdFVF9OT1dBSVRgLiBUaGlzIGlzIHdoZXJlIGl0IGdldHMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGJlY2F1c2UgeGF0dHJzIGFyZSBvZnRlbiBhIGJpdCBvZiBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2suIEFueSBjaGFuZ2UgdG8gdGhlaXIgcmV0cmlldmFsIG1ldGhvZCB3YXJyYW50cyBzY3J1dGlueS4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggYWZmZWN0cyB4YXR0ciBoYW5kbGluZyBtYWtlcyBtZSB0aGluayB0aGVyZSBtaWdodCBiZSBzb21lIGludGVycGxheSB3aXRoIHNlY3VyaXR5IGZlYXR1cmVzLCB0b28uCgpHaXZlbiB0aGlzIGlzIHRvdWNoaW5nIGlub2RlIGZldGNoaW5nIGFuZCB4YXR0ciBsb2dpYywgdGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSYjMzk7bGwgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGBfX2V4dDRfaWdldGAsIGBleHQ0X2lnZXRfbWF0Y2hgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAsIGFzIHRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGRpcmVjdGx5IGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2VzLgoKTm93LCBhcyBmYXIgYXMgY29uZmlndXJhdGlvbiBnb2VzLCBJJiMzOTtsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGVuYWJsZWQgdG8gdGVzdCB0aGlzIHByb3Blcmx5LiBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgSSYjMzk7bGwgYWxzbyBjaGVjayBpZiBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgYXJlIHJlbGV2YW50LiBMZXQgbWUgY2hlY2sgYGZzL2V4dDQvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueXRoaW5nIHNwZWNpZmljIHRvIHhhdHRycywgc3VjaCBhcyBgRVhUNF9GU19YQVRUUmAuIFdoaWxlIGBFWFQ0X0ZTYCBtaWdodCBiZSBlbm91Z2ggdG8gZ2V0IHRoZSBiYXNlIGV4dDQgZmVhdHVyZXMgd29ya2luZywgSSBzaG91bGQgY2hlY2sgd2hldGhlciBtb3JlIGNvbmZpZ3MgYXJlIG5lY2Vzc2FyeSB0byB0aG9yb3VnaGx5IHRlc3QgdGhlIGNoYW5nZXMsIGVzcGVjaWFsbHkgdGhlIHhhdHRyIHBhcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBFWFQ0X0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvZXh0NC9LY29uZmlnOjI6Y29uZmlnIEVYVDRfRlNcbmZzL2V4dDQvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7VGhlIEV4dGVuZGVkIDQgKGV4dDQpIGZpbGVzeXN0ZW1cJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWc9MzU9Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXG4tLVxuZnMvZXh0NC9LY29uZmlnLTQ1LVxuZnMvZXh0NC9LY29uZmlnOjQ2OmNvbmZpZyBFWFQ0X0ZTX1BPU0lYX0FDTFxuZnMvZXh0NC9LY29uZmlnLTQ3LVx0Ym9vbCBcJiMzNDtFeHQ0IFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTU1LVxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXG5mcy9leHQ0L0tjb25maWctNTctXHRib29sIFwmIzM0O0V4dDQgU2VjdXJpdHkgTGFiZWxzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk0MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVYVDQgWEFUVFIgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBhbmQgdGhlIGBFWFQ0X0ZTX1hBVFRSYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpc24mIzM5O3QganVtcGluZyBvdXQgYXQgbWUuIE15IGludHVpdGlvbiwgYmFzZWQgb24gcGFzdCBleHBlcmllbmNlIHdpdGggdGhpcyBmaWxlIHN5c3RlbSwgdGVsbHMgbWUgdGhhdCBleHRlbmRlZCBhdHRyaWJ1dGUgc3VwcG9ydCBpcyBlaXRoZXIgY29tcGlsZWQgZGlyZWN0bHkgaW50byB0aGUgY29yZSBFWFQ0IGZ1bmN0aW9uYWxpdHksIG9yIGl0JiMzOTtzIGltcGxpY2l0bHkgZW5hYmxlZCB3aGVuIHRoZSBFWFQ0IGZpbGVzeXN0ZW0gaXRzZWxmIGlzIGFjdGl2YXRlZC4gTm8gc3BlY2lmaWMgdG9nZ2xlLCBnb3QgaXQuCgpUaW1lIHRvIGNvbmZpcm0gdGhpcyBodW5jaCB3aXRoIGEgZGlyZWN0IGxvb2sgYXQgdGhlIHNvdXJjZS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0b3AuIFRoYXQgbWFrZWZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIGNvbmZpcm1pbmcgd2hldGhlciB4YXR0ciBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpbmNsdWRlZCBieSBkZWZhdWx0LCBvciBpZiBJJiMzOTttIGJhcmtpbmcgdXAgdGhlIHdyb25nIHRyZWUgZW50aXJlbHkuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYnVpbGQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyByZXZlYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGF0dHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGU9OD1leHQ0LXlcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXG4tLVxuZnMvZXh0NC9NYWtlZmlsZS0xMS1cdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlx0XHRzdXBlci5vIHN5bWxpbmsubyBzeXNmcy5vIHhhdHRyLm8geGF0dHJfaHVyZC5vIHhhdHRyX3RydXN0ZWQubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMzpcdFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cbmZzL2V4dDQvTWFrZWZpbGUtMTQtXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXHQmIzQzOz0gYWNsLm9cbmZzL2V4dDQvTWFrZWZpbGU6MTY6ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVx0XHQmIzQzOz0geGF0dHJfc2VjdXJpdHkub1xuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkNvbmZpcm1pbmcgRVhUNCBEZXBlbmRlbmN5IGFuZCBGdW5jdGlvbiBTY29wZSoqCgpSaWdodCwgc28gYHhhdHRyLm9gIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGBFWFQ0X0ZTYC4gVGhhdCYjMzk7cyBub3Qgc3VycHJpc2luZywgYnV0IGl0JiMzOTtzIGdvb2QgdG8gaGF2ZSB0aGF0IGNvbmZpcm1lZCBhcyBhIGJhc2UgYXNzdW1wdGlvbi4gVGhhdCBtZWFucyBgRVhUNF9GU2AgaXMgZXNzZW50aWFsbHkgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgZmluZF9pbm9kZV9ub3dhaXRgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiBhcHBsaWNhYmxlIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsIG9yIGlmIGl0IGlzIHNwZWNpZmljYWxseSBpbXBsZW1lbnRlZCBmb3IgZXh0NC4gQSBxdWljayBjaGVjayBvZiBpdHMgbG9jYXRpb24gaW4gYGZzL2lub2RlLmNgIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgaXQgaXMgaW5kZWVkIGEgZ2VuZXJpYyBmdW5jdGlvbiwgbm90IHNwZWNpZmljIHRvIGV4dDQuIFRoYXQmIzM5O3MgZ29vZCBpbmZvcm1hdGlvbiwgYXMgaXQgYWZmZWN0cyB0aGUgcG9zc2liaWxpdGllcyBJIGFtIGNvbnNpZGVyaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbmRfaW5vZGVfbm93YWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvaW5vZGUuYz01Mjg3PXN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUzMTUtXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfSUdFVF9OT1dBSVQpIHtcbmZzL2V4dDQvaW5vZGUuYzo1MzE2Olx0XHRpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBpbm8sIGV4dDRfaWdldF9tYXRjaCwgTlVMTCk7XG5mcy9leHQ0L2lub2RlLmMtNTMxNy1cdFx0aWYgKCFpbm9kZSlcbi0tXG5mcy9mMmZzL25vZGUuYz0yMDQ3PXN0YXRpYyBib29sIGZsdXNoX2RpcnR5X2lub2RlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuZnMvZjJmcy9ub2RlLmMtMjA1Mi1cbmZzL2YyZnMvbm9kZS5jOjIwNTM6XHRpbm9kZSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiaS1cdTAwM2VzYiwgaW5vLCBmMmZzX21hdGNoX2lubywgTlVMTCk7XG5mcy9mMmZzL25vZGUuYy0yMDU0LVx0aWYgKCFpbm9kZSlcbi0tXG5mcy9pbm9kZS5jPTE3NTY9RVhQT1JUX1NZTUJPTChpbG9va3VwKTtcbi0tXG5mcy9pbm9kZS5jLTE3NTgtLyoqXG5mcy9pbm9kZS5jOjE3NTk6ICogZmluZF9pbm9kZV9ub3dhaXQgLSBmaW5kIGFuIGlub2RlIGluIHRoZSBpbm9kZSBjYWNoZVxuZnMvaW5vZGUuYy0xNzYwLSAqIEBzYjpcdFx0c3VwZXIgYmxvY2sgb2YgZmlsZSBzeXN0ZW0gdG8gc2VhcmNoXG4tLVxuZnMvaW5vZGUuYy0xNzgwLSAqL1xuZnMvaW5vZGUuYzoxNzgxOnN0cnVjdCBpbm9kZSAqZmluZF9pbm9kZV9ub3dhaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2lub2RlLmMtMTc4Mi1cdFx0XHRcdHU2NCBoYXNodmFsLFxuLS1cbmZzL2lub2RlLmMtMTgwNS19XG5mcy9pbm9kZS5jOjE4MDY6RVhQT1JUX1NZTUJPTChmaW5kX2lub2RlX25vd2FpdCk7XG5mcy9pbm9kZS5jLTE4MDctXG4tLVxuZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcbi0tXG5mcy9udGZzL21mdC5jLTcyMS0gKiBtZWFucyB0aGF0IHdlIGNhbiBzYWZlbHkgd3JpdGUgb3V0IGFueSBkaXJ0eSBtZnQgcmVjb3JkcyB0aGF0IGRvIG5vdCBoYXZlXG5mcy9udGZzL21mdC5jOjcyMjogKiB0aGVpciBpbm9kZXMgaW4gaWNhY2hlIGFzIGRldGVybWluZWQgYnkgZmluZF9pbm9kZV9ub3dhaXQoKS5cbmZzL250ZnMvbWZ0LmMtNzIzLSAqXG4tLVxuZnMvbnRmcy9tZnQuYz03NDc9c3RhdGljIGJvb2wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1mdF9ubyxcbi0tXG5mcy9udGZzL21mdC5jLTc4MC1cdFx0LypcbmZzL250ZnMvbWZ0LmM6NzgxOlx0XHQgKiBIYXZlIHRvIHVzZSBmaW5kX2lub2RlX25vd2FpdCgpIHNpbmNlIGlsb29rdXA1X25vd2FpdCgpXG5mcy9udGZzL21mdC5jLTc4Mi1cdFx0ICogd2FpdHMgZm9yIGlub2RlIHdpdGggSV9GUkVFSU5HLCB3aGljaCBjYXVzZXMgbnRmcyB0byBkZWFkbG9ja1xuLS1cbmZzL250ZnMvbWZ0LmMtNzg0LVx0XHQgKi9cbmZzL250ZnMvbWZ0LmM6Nzg1Olx0XHR2aSA9IGZpbmRfaW5vZGVfbm93YWl0KHNiLCBtZnRfbm8sIG50ZnNfdGVzdF9pbm9kZV93YiwgXHUwMDI2bmEpO1xuZnMvbnRmcy9tZnQuYy03ODYtXHRcdGlmIChuYS5zdGF0ZSA9PSBOSV9CZWluZ0RlbGV0ZWQgfHwgbmEuc3RhdGUgPT0gTklfQmVpbmdDcmVhdGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDA2OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1NTQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIGEgTW9kaWZpY2F0aW9uIHRvIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2hhbmdlIGZvY3VzZXMgb24gYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgYW5kIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VzIGBFWFQ0X0lHRVRfTk9XQUlUYC4gIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGV4dDQgZmlsZXN5c3RlbSwgdGhpcyBpbW1lZGlhdGVseSB0cmlnZ2VycyBhIHRob3VnaHQgcHJvY2VzczogV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyAgV2UmIzM5O3JlIG1vZGlmeWluZyBob3cgdGhlIGlub2RlIGNhY2hlIGlzIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIFRoYXQgYEVYVDRfSUdFVF9OT1dBSVRgIGZsYWcgaXMgcHJldHR5IGtleS4gSXQgbWVhbnMgd2UmIzM5O3JlIGxpa2VseSBhaW1pbmcgZm9yIG5vbi1ibG9ja2luZyBpbm9kZSBsb29rdXBzIHdpdGhpbiB0aGUgeGF0dHIgY29udGV4dC4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb3IgbWF5YmUgYSBmaXggZm9yIGEgYmxvY2tpbmcgaXNzdWUsIHBlcmhhcHMgcmVsYXRlZCB0byBkZWFkbG9ja3MuCgpNeSBuZXh0IHN0ZXA/IERpdmUgaW50byBgZnMvZXh0NC94YXR0ci5jYCB3aGVyZSBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKmZ1bGwqIHBpY3R1cmUuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBhcm91bmQgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgdG8gc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGFmZmVjdGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIGlub2RlIG9wZXJhdGlvbnMsIGNhY2hlIG1hbmlwdWxhdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBhbHNvIGNhbGxlZD8gIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSwgc28gYSB3aWRlciB1bmRlcnN0YW5kaW5nIGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgdGhlICppbXBsaWNhdGlvbnMqIG9mIHRoaXMgY2hhbmdlIGJleW9uZCB0aGlzIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBXaGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGFmZmVjdGVkIGJ5IGhvdyBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCBpcyBub3cgdXNpbmcgYEVYVDRfSUdFVF9OT1dBSVRgPyBJIG5lZWQgdG8gYnVpbGQgYSBob2xpc3RpYyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIGZsb3cgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQveGF0dHIuYz0xNTI2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKlxuZnMvZXh0NC94YXR0ci5jOjE1Mjc6ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuZnMvZXh0NC94YXR0ci5jLTE1MjgtXHRcdFx0ICAgIHNpemVfdCB2YWx1ZV9sZW4sIHUzMiBoYXNoKVxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTc4PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNTkwLVx0aGFzaCA9IGV4dDRfeGF0dHJfaW5vZGVfaGFzaChFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLCB2YWx1ZSwgdmFsdWVfbGVuKTtcbmZzL2V4dDQveGF0dHIuYzoxNTkxOlx0ZWFfaW5vZGUgPSBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoaW5vZGUsIHZhbHVlLCB2YWx1ZV9sZW4sIGhhc2gpO1xuZnMvZXh0NC94YXR0ci5jLTE1OTItXHRpZiAoZWFfaW5vZGUpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI3MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6CgoqKkFuYWx5emluZyB0aGUgZXh0NCBFeHRlbmRlZCBBdHRyaWJ1dGUgKFhBVFRSKSBDcmVhdGlvbiBQcm9jZXNzKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBpcyBjYWxsaW5nIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGF0IHVwc3RyZWFtIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgWEFUVFIgY3JlYXRpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4sIGxvb2tpbmcgZm9yIHRoZSBjYWxsIHNpdGVzIG9mIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLiBLbm93aW5nIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIHdpbGwgdGVsbCBtZSB3aGF0IHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMgYXJlIGZvciB0aGlzIHNwZWNpZmljIFhBVFRSIGxvb2t1cCBhbmQgcG90ZW50aWFsIGlub2RlIGNyZWF0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSAmIzM0O3doeSYjMzQ7IGFuZCAmIzM0O3doZW4mIzM0OyBiZWhpbmQgdGhpcyBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24gdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBzY2hlbWUgb2YgZXh0NCBYQVRUUiBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAwNjoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTE1Mjc9ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNTc3LSAqL1xuZnMvZXh0NC94YXR0ci5jOjE1Nzg6c3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L3hhdHRyLmMtMTU3OS1cdFx0c3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTkxOS1cbmZzL2V4dDQveGF0dHIuYzoxOTIwOlx0XHRlYV9pbm9kZSA9IGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTE5MjEtXHRcdFx0XHRcdGktXHUwMDNldmFsdWUsIGktXHUwMDNldmFsdWVfbGVuKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MjI1ND1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjI2OS1cbmZzL2V4dDQveGF0dHIuYzoyMjcwOlx0XHRlYV9pbm9kZSA9IGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTIyNzEtXHRcdFx0XHRcdGktXHUwMDNldmFsdWUsIGktXHUwMDNldmFsdWVfbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk4MQoJCQkJCQkJb3V0cHV0OiAxNDYKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgRXh0ZW5kZWQgQXR0cmlidXRlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGV4dDQgcGF0Y2ggcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLCBhbmQgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLiBFc3NlbnRpYWxseSwgdGhlIGNvcmUgZnVuY3Rpb25zIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgc2V0IG9wZXJhdGlvbnMgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGJvdGggY2FsbCBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYC4gVGhlIHBhdGNoIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBwcm9ibGVtLCBhIGRlYWRsb2NrIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHRoYXQgY2FuIG9jY3VyIHdoZW4gZmV0Y2hpbmcgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzLiBUaGUgc29sdXRpb24gaXMgdG8gdXNlIGBOT1dBSVRgLCBzcGVjaWZpY2FsbHkgYEVYVDRfSUdFVF9OT1dBSVRgLCBkdXJpbmcgdGhlIGlub2RlIGxvb2t1cCB0byBhdm9pZCBibG9ja2luZyB3aGlsZSB3YWl0aW5nIGZvciBpbm9kZXMgdG8gYmUgZnJlZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIGV4dDQgbG9naWMuCgpNeSByZWFzb25pbmcgaXMgYmFzZWQgb24gaG93IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5vZGUgZmV0Y2hpbmcgcHJvY2VzcywgYWxsb3dpbmcgZm9yIGEgbm9uLWJsb2NraW5nIGxvb2t1cCAoYEVYVDRfSUdFVF9OT1dBSVRgKSB3aGVuIHdvcmtpbmcgd2l0aCBFQSBpbm9kZXMuIFRoaXMgYWltcyB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBiZWluZyBzdGFsbGVkIHdoaWxlIHRyeWluZyB0byBmcmVlIGlub2Rlcy4gU28sIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGFuIGlub2RlIHRvIGJlY29tZSBhdmFpbGFibGUsIGl0IHNpbXBseSBza2lwcyBpdC4KCkkmIzM5O3ZlIGFsc28gemVyb2VkIGluIG9uIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSBzZWUgdGhlIGltcG9ydGFuY2Ugb2YgYF9fZXh0NF9pZ2V0YCwgYGV4dDRfaWdldF9tYXRjaGAsIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgLCBhbmQsIGNydWNpYWxseSwgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY2VudHJhbCB0byB0aGUgaW5vZGUgcmV0cmlldmFsIGFuZCBtYW5hZ2VtZW50IHByb2Nlc3MsIGFuZCB0aGUgcGF0Y2ggaXMgY2xlYXJseSBpbXBhY3RpbmcgaG93IHRoZXkgaW50ZXJhY3QsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYE5PV0FJVGAuCgpGaW5hbGx5LCBJJiMzOTt2ZSBjaGVja2VkIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gV2hpbGUgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYW5kIGFjY2VzcyBjb250cm9sLCB0aGUgc3RhbmRhcmQgZXh0ZW5kZWQgYXR0cmlidXRlIG9wZXJhdGlvbnMgKGxpa2UgdGhlIHVzZXIuKiBuYW1lc3BhY2UpIHdpbGwgd29yayB3aXRob3V0IHRoZW0uIFRoZXJlZm9yZSwgYEVYVDRfRlNgIGFsb25lIHNob3VsZCBiZSB0aGUgb25seSByZXF1aXJlZCBjb25maWcsIHdoaWNoIG1lYW5zIHRoZSBwYXRjaCBpc24mIzM5O3QgZXhjZXNzaXZlbHkgY29tcGxleCBmcm9tIGEgY29uZmlndXJhdGlvbiBwb2ludCBvZiB2aWV3LiBJIHRoaW5rIHRoaXMgd2lsbCBiZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgdXBkYXRlIGZvciB1cy4gTm93LCBsZXQmIzM5O3MgY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMDY6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX2V4dDRfaWdldCYjMzQ7LAogICAgJiMzNDtleHQ0X2lnZXRfbWF0Y2gmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxMzo0My41MjQwMjYxMTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTUzOTA2MzMxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2lnZXRcIixcbiAgICBcImV4dDRfaWdldF9tYXRjaFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjQzLjUyNDAzMzM2NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4MTUwNzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjc1ZWYzYzA4NzQ1NTAwZDM0N2Y1MGRjNTYxOTFlMTAyMWRjZWMzNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAwNjoxMzo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmM3NmRkMGJkZDNkODYwIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMzE0NCw3ICszMTQ0LDggQEAgdHlwZWRlZiBlbnVtIHtcXG4gXFx0RVhUNF9JR0VUX1NQRUNJQUwgPVxcdDB4MDAwMSwgLyogT0sgdG8gaWdldCBhIHN5c3RlbSBpbm9kZSAqL1xcbiBcXHRFWFQ0X0lHRVRfSEFORExFID0gXFx0MHgwMDAyLFxcdC8qIElub2RlICMgaXMgZnJvbSBhIGhhbmRsZSAqL1xcbiBcXHRFWFQ0X0lHRVRfQkFEID1cXHRcXHQweDAwMDQsIC8qIEFsbG93IHRvIGlnZXQgYSBiYWQgaW5vZGUgKi9cXG4tXFx0RVhUNF9JR0VUX0VBX0lOT0RFID1cXHQweDAwMDhcXHQvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqL1xcbitcXHRFWFQ0X0lHRVRfRUFfSU5PREUgPVxcdDB4MDAwOCxcXHQvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqL1xcbitcXHRFWFQ0X0lHRVRfTk9XQUlUID1cXHQweDAwMTBcXHQvKiBOb24tYmxvY2tpbmcgbG9va3VwIChza2lwIGlmIGZyZWVpbmcpICovXFxuIH0gZXh0NF9pZ2V0X2ZsYWdzO1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqX19leHQ0X2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBpbm8sXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5hMDkxYTQzOTU5YTMzNCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtNTI3MCw2ICs1MjcwLDIwIEBAIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRtYXBwaW5nX3NldF9mb2xpb19vcmRlcl9yYW5nZShpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBtaW5fb3JkZXIsIG1heF9vcmRlcik7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZXh0NF9pZ2V0X21hdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbm8sIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0aWYgKGlub2RlLVxcdTAwM2VpX2lubyAhPSBpbm8pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRpZiAoaW5vZGVfc3RhdGVfcmVhZChpbm9kZSkgXFx1MDAyNiAoSV9GUkVFSU5HIHwgSV9XSUxMX0ZSRUUgfCBJX0NSRUFUSU5HKSkge1xcbitcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFx0fVxcbitcXHRfX2lnZXQoaW5vZGUpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuK1xcdHJldHVybiAxO1xcbit9XFxuK1xcbiBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbiBcXHRcXHRcXHQgIGV4dDRfaWdldF9mbGFncyBmbGFncywgY29uc3QgY2hhciAqZnVuY3Rpb24sXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGxpbmUpXFxuQEAgLTUyOTgsOSArNTMxMiwyNCBAQCBzdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUZTQ09SUlVQVEVEKTtcXG4gXFx0fVxcbiBcXG4tXFx0aW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTtcXG4tXFx0aWYgKCFpbm9kZSlcXG4tXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfSUdFVF9OT1dBSVQpIHtcXG4rXFx0XFx0aW5vZGUgPSBmaW5kX2lub2RlX25vd2FpdChzYiwgaW5vLCBleHQ0X2lnZXRfbWF0Y2gsIE5VTEwpO1xcbitcXHRcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFxuK1xcdFxcdGlmIChpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgSV9ORVcpXFxuK1xcdFxcdFxcdHdhaXRfb25fbmV3X2lub2RlKGlub2RlKTtcXG4rXFxuK1xcdFxcdGlmICh1bmxpa2VseShpbm9kZV91bmhhc2hlZChpbm9kZSkpKSB7XFxuK1xcdFxcdFxcdGlwdXQoaW5vZGUpO1xcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xcbitcXHRcXHRpZiAoIWlub2RlKVxcbitcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IElfTkVXKSkge1xcbiBcXHRcXHRyZXQgPSBjaGVja19pZ290X2lub2RlKGlub2RlLCBmbGFncywgZnVuY3Rpb24sIGxpbmUpO1xcbiBcXHRcXHRpZiAocmV0KSB7XFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMTU1MCw3ICsxNTUwLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXG4gXFx0d2hpbGUgKGNlKSB7XFxuIFxcdFxcdGVhX2lub2RlID0gZXh0NF9pZ2V0KGlub2RlLVxcdTAwM2VpX3NiLCBjZS1cXHUwMDNlZV92YWx1ZSxcXG4tXFx0XFx0XFx0XFx0ICAgICBFWFQ0X0lHRVRfRUFfSU5PREUpO1xcbitcXHRcXHRcXHRcXHQgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSB8IEVYVDRfSUdFVF9OT1dBSVQpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcXG4gXFx0XFx0XFx0Z290byBuZXh0X2VudHJ5O1xcbiBcXHRcXHRleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhlYV9pbm9kZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjQ0LjA2MjgxOTc5MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjkwMDAyNTkwNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZXh0NF9pZ2V0XCIsXG4gICAgXCJleHQ0X2lnZXRfbWF0Y2hcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5vbi1ibG9ja2luZyBpbm9kZSBsb29rdXAgZmxhZyAoRVhUNF9JR0VUX05PV0FJVCkgaW4gZXh0NCBhbmQgdXNlcyBpdCBkdXJpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGUgY2FjaGUgbG9va3VwcyB0byBhdm9pZCB3YWl0aW5nIG9uIGlub2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGZldGNoaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY3NWVmM2MwODc0NTUwMGQzNDdmNTBkYzU2MTkxZTEwMjFkY2VjMzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1biAyNiAwNjoxMzo0MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi5jNzZkZDBiZGQzZDg2MCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTMxNDQsNyArMzE0NCw4IEBAIHR5cGVkZWYgZW51bSB7XG4gXHRFWFQ0X0lHRVRfU1BFQ0lBTCA9XHQweDAwMDEsIC8qIE9LIHRvIGlnZXQgYSBzeXN0ZW0gaW5vZGUgKi9cbiBcdEVYVDRfSUdFVF9IQU5ETEUgPSBcdDB4MDAwMixcdC8qIElub2RlICMgaXMgZnJvbSBhIGhhbmRsZSAqL1xuIFx0RVhUNF9JR0VUX0JBRCA9XHRcdDB4MDAwNCwgLyogQWxsb3cgdG8gaWdldCBhIGJhZCBpbm9kZSAqL1xuLVx0RVhUNF9JR0VUX0VBX0lOT0RFID1cdDB4MDAwOFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbitcdEVYVDRfSUdFVF9FQV9JTk9ERSA9XHQweDAwMDgsXHQvKiBJbm9kZSBzaG91bGQgY29udGFpbiBhbiBFQSB2YWx1ZSAqL1xuK1x0RVhUNF9JR0VUX05PV0FJVCA9XHQweDAwMTBcdC8qIE5vbi1ibG9ja2luZyBsb29rdXAgKHNraXAgaWYgZnJlZWluZykgKi9cbiB9IGV4dDRfaWdldF9mbGFncztcbiBcbiBleHRlcm4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi5hMDkxYTQzOTU5YTMzNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtNTI3MCw2ICs1MjcwLDIwIEBAIHZvaWQgZXh0NF9zZXRfaW5vZGVfbWFwcGluZ19vcmRlcihzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0bWFwcGluZ19zZXRfZm9saW9fb3JkZXJfcmFuZ2UoaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBtaW5fb3JkZXIsIG1heF9vcmRlcik7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZXh0NF9pZ2V0X21hdGNoKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBpbm8sIHZvaWQgKmRhdGEpXG4re1xuK1x0aWYgKGlub2RlLVx1MDAzZWlfaW5vICE9IGlubylcbitcdFx0cmV0dXJuIDA7XG4rXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdGlmIChpbm9kZV9zdGF0ZV9yZWFkKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9DUkVBVElORykpIHtcbitcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbitcdFx0cmV0dXJuIC0xO1xuK1x0fVxuK1x0X19pZ2V0KGlub2RlKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRyZXR1cm4gMTtcbit9XG4rXG4gc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdFx0XHQgIGV4dDRfaWdldF9mbGFncyBmbGFncywgY29uc3QgY2hhciAqZnVuY3Rpb24sXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgbGluZSlcbkBAIC01Mjk4LDkgKzUzMTIsMjQgQEAgc3RydWN0IGlub2RlICpfX2V4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubyxcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVGU0NPUlJVUFRFRCk7XG4gXHR9XG4gXG4tXHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xuLVx0aWYgKCFpbm9kZSlcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IEVYVDRfSUdFVF9OT1dBSVQpIHtcbitcdFx0aW5vZGUgPSBmaW5kX2lub2RlX25vd2FpdChzYiwgaW5vLCBleHQ0X2lnZXRfbWF0Y2gsIE5VTEwpO1xuK1x0XHRpZiAoIWlub2RlKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0XHRpZiAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpXG4rXHRcdFx0d2FpdF9vbl9uZXdfaW5vZGUoaW5vZGUpO1xuK1xuK1x0XHRpZiAodW5saWtlbHkoaW5vZGVfdW5oYXNoZWQoaW5vZGUpKSkge1xuK1x0XHRcdGlwdXQoaW5vZGUpO1xuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pO1xuK1x0XHRpZiAoIWlub2RlKVxuK1x0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuK1x0fVxuK1xuIFx0aWYgKCEoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgSV9ORVcpKSB7XG4gXHRcdHJldCA9IGNoZWNrX2lnb3RfaW5vZGUoaW5vZGUsIGZsYWdzLCBmdW5jdGlvbiwgbGluZSk7XG4gXHRcdGlmIChyZXQpIHtcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi4yMWI1NjcwZDg1MDNjYSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuKysrIGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTU1MCw3ICsxNTUwLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFxuIFx0d2hpbGUgKGNlKSB7XG4gXHRcdGVhX2lub2RlID0gZXh0NF9pZ2V0KGlub2RlLVx1MDAzZWlfc2IsIGNlLVx1MDAzZWVfdmFsdWUsXG4tXHRcdFx0XHQgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSk7XG4rXHRcdFx0XHQgICAgIEVYVDRfSUdFVF9FQV9JTk9ERSB8IEVYVDRfSUdFVF9OT1dBSVQpO1xuIFx0XHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcbiBcdFx0XHRnb3RvIG5leHRfZW50cnk7XG4gXHRcdGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKGVhX2lub2RlKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjQ0LjA2MjgyMTk0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NjQ0NDQ5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IFBvdGVudGlhbCBJbXBhY3Qgb24gZXh0NCBGaWxlc3lzdGVtKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQncyB0b3VjaGluZyBzb21lIGNvcmUgZXh0NCBjb2RlOiBgZXh0NC5oYCwgYGlub2RlLmNgLCBhbmQgYHhhdHRyLmNgLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIHRocnVzdCBpcyBpbnRyb2R1Y2luZyB0aGlzIG5ldyBgRVhUNF9JR0VUX05PV0FJVGAgZmxhZywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoaXMgbWVhbnMgYSBub24tYmxvY2tpbmcgaW5vZGUgZmV0Y2gsIHdoaWNoICpjb3VsZCogbGVhZCB0byBzb21lIHBlcmZvcm1hbmNlIGdhaW5zLCBvciwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgbWF5YmUgaW50cm9kdWNlIHNvbWUgcmFjZSBjb25kaXRpb25zIGlmIG5vdCBoYW5kbGVkIGNhcmVmdWxseS5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIG1vZGlmeWluZyBgX19leHQ0X2lnZXRgLiBJbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCBgaWdldF9sb2NrZWRgIHBhdGgsIHRoZSBwYXRjaCBub3cgdXNlcyBgZmluZF9pbm9kZV9ub3dhaXRgIHdoZW4gdGhlIG5ldyBmbGFnIGlzIHNldC4gVGhhdCdzIGEga2V5IGRldGFpbCB0byB3YXRjaCDigJMgbm9uLWJsb2NraW5nIGlub2RlIHJldHJpZXZhbCBpcyBhIGNsYXNzaWMgcG9pbnQgb2YgY29udGVudGlvbiBpbiBmaWxlc3lzdGVtcy4gVGhlIGFkZGVkIGBleHQ0X2lnZXRfbWF0Y2hgIGhlbHBlciBpcyBsaWtlbHkgcGFydCBvZiBtYWtpbmcgdGhlIG5vbi1ibG9ja2luZyBsb29rdXAgc2FmZSBhbmQgZWZmaWNpZW50LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IGl0IGVuc3VyZXMgaW5vZGUgaW50ZWdyaXR5LlxuXG5BbmQgb2YgY291cnNlLCB0aGlzIGlzIGFsbCB0aWVkIGludG8geGF0dHIgaGFuZGxpbmcg4oCTIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gdXNlIGBFWFQ0X0lHRVRfTk9XQUlUYC4gVGhpcyBpcyB3aGVyZSBpdCBnZXRzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZyBiZWNhdXNlIHhhdHRycyBhcmUgb2Z0ZW4gYSBiaXQgb2YgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLiBBbnkgY2hhbmdlIHRvIHRoZWlyIHJldHJpZXZhbCBtZXRob2Qgd2FycmFudHMgc2NydXRpbnkuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGFmZmVjdHMgeGF0dHIgaGFuZGxpbmcgbWFrZXMgbWUgdGhpbmsgdGhlcmUgbWlnaHQgYmUgc29tZSBpbnRlcnBsYXkgd2l0aCBzZWN1cml0eSBmZWF0dXJlcywgdG9vLlxuXG5HaXZlbiB0aGlzIGlzIHRvdWNoaW5nIGlub2RlIGZldGNoaW5nIGFuZCB4YXR0ciBsb2dpYywgdGhpcyBwYXRjaCBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gSSdsbCBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gYF9fZXh0NF9pZ2V0YCwgYGV4dDRfaWdldF9tYXRjaGAsIGFuZCBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCwgYXMgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZGlyZWN0bHkgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZXMuXG5cbk5vdywgYXMgZmFyIGFzIGNvbmZpZ3VyYXRpb24gZ29lcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGtlcm5lbCBjb25maWdzIGVuYWJsZWQgdG8gdGVzdCB0aGlzIHByb3Blcmx5LiBgRVhUNF9GU2AgaXMgdGhlIG9idmlvdXMgb25lLCBidXQgSSdsbCBhbHNvIGNoZWNrIGlmIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgcmVsZXZhbnQuIExldCBtZSBjaGVjayBgZnMvZXh0NC9LY29uZmlnYCB0byBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBzcGVjaWZpYyB0byB4YXR0cnMsIHN1Y2ggYXMgYEVYVDRfRlNfWEFUVFJgLiBXaGlsZSBgRVhUNF9GU2AgbWlnaHQgYmUgZW5vdWdoIHRvIGdldCB0aGUgYmFzZSBleHQ0IGZlYXR1cmVzIHdvcmtpbmcsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgbW9yZSBjb25maWdzIGFyZSBuZWNlc3NhcnkgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHRoZSB4YXR0ciBwYXJ0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjUwLjkyNzI3MDAyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjgwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVYVDRfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjUxLjAzNzE0NTQ5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5MjY0MjkxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRVhUNCBYQVRUUiBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBhbmQgdGhlIGBFWFQ0X0ZTX1hBVFRSYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpc24ndCBqdW1waW5nIG91dCBhdCBtZS4gTXkgaW50dWl0aW9uLCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGlzIGZpbGUgc3lzdGVtLCB0ZWxscyBtZSB0aGF0IGV4dGVuZGVkIGF0dHJpYnV0ZSBzdXBwb3J0IGlzIGVpdGhlciBjb21waWxlZCBkaXJlY3RseSBpbnRvIHRoZSBjb3JlIEVYVDQgZnVuY3Rpb25hbGl0eSwgb3IgaXQncyBpbXBsaWNpdGx5IGVuYWJsZWQgd2hlbiB0aGUgRVhUNCBmaWxlc3lzdGVtIGl0c2VsZiBpcyBhY3RpdmF0ZWQuIE5vIHNwZWNpZmljIHRvZ2dsZSwgZ290IGl0LlxuXG5UaW1lIHRvIGNvbmZpcm0gdGhpcyBodW5jaCB3aXRoIGEgZGlyZWN0IGxvb2sgYXQgdGhlIHNvdXJjZS4gVGhlIGBmcy9leHQ0L01ha2VmaWxlYCBpcyB0aGUgbG9naWNhbCBuZXh0IHN0b3AuIFRoYXQgbWFrZWZpbGUgd2lsbCBiZSB0aGUga2V5IHRvIGNvbmZpcm1pbmcgd2hldGhlciB4YXR0ciBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBpbmNsdWRlZCBieSBkZWZhdWx0LCBvciBpZiBJJ20gYmFya2luZyB1cCB0aGUgd3JvbmcgdHJlZSBlbnRpcmVseS4gTGV0J3Mgc2VlIHdoYXQgdGhlIGJ1aWxkIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTQxLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTM6NTQuMDI5NzkwNDgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNzI4Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjEzOjU0LjEwMjUyODI0MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NDA5NDU5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipDb25maXJtaW5nIEVYVDQgRGVwZW5kZW5jeSBhbmQgRnVuY3Rpb24gU2NvcGUqKlxuXG5SaWdodCwgc28gYHhhdHRyLm9gIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGBFWFQ0X0ZTYC4gVGhhdCdzIG5vdCBzdXJwcmlzaW5nLCBidXQgaXQncyBnb29kIHRvIGhhdmUgdGhhdCBjb25maXJtZWQgYXMgYSBiYXNlIGFzc3VtcHRpb24uIFRoYXQgbWVhbnMgYEVYVDRfRlNgIGlzIGVzc2VudGlhbGx5IHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUsIHdoaWNoIG1ha2VzIHNlbnNlIGdpdmVuIHRoZSBjb250ZXh0LlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiBgZmluZF9pbm9kZV9ub3dhaXRgLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGEgZ2VuZXJpYyBmdW5jdGlvbiBhcHBsaWNhYmxlIGFjcm9zcyBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsIG9yIGlmIGl0IGlzIHNwZWNpZmljYWxseSBpbXBsZW1lbnRlZCBmb3IgZXh0NC4gQSBxdWljayBjaGVjayBvZiBpdHMgbG9jYXRpb24gaW4gYGZzL2lub2RlLmNgIHRlbGxzIG1lIGltbWVkaWF0ZWx5IHRoYXQgaXQgaXMgaW5kZWVkIGEgZ2VuZXJpYyBmdW5jdGlvbiwgbm90IHNwZWNpZmljIHRvIGV4dDQuIFRoYXQncyBnb29kIGluZm9ybWF0aW9uLCBhcyBpdCBhZmZlY3RzIHRoZSBwb3NzaWJpbGl0aWVzIEkgYW0gY29uc2lkZXJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0NjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxMzo1Ny41NDM0Nzc3OTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDkxNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfaW5vZGVfbm93YWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2lub2RlLmM9NTI4Nz1zdHJ1Y3QgaW5vZGUgKl9fZXh0NF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vLFxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUzMTUtXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9JR0VUX05PV0FJVCkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MzE2OlxcdFxcdGlub2RlID0gZmluZF9pbm9kZV9ub3dhaXQoc2IsIGlubywgZXh0NF9pZ2V0X21hdGNoLCBOVUxMKTtcXG5mcy9leHQ0L2lub2RlLmMtNTMxNy1cXHRcXHRpZiAoIWlub2RlKVxcbi0tXFxuZnMvZjJmcy9ub2RlLmM9MjA0Nz1zdGF0aWMgYm9vbCBmbHVzaF9kaXJ0eV9pbm9kZShzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvZjJmcy9ub2RlLmMtMjA1Mi1cXG5mcy9mMmZzL25vZGUuYzoyMDUzOlxcdGlub2RlID0gZmluZF9pbm9kZV9ub3dhaXQoc2JpLVxcdTAwM2VzYiwgaW5vLCBmMmZzX21hdGNoX2lubywgTlVMTCk7XFxuZnMvZjJmcy9ub2RlLmMtMjA1NC1cXHRpZiAoIWlub2RlKVxcbi0tXFxuZnMvaW5vZGUuYz0xNzU2PUVYUE9SVF9TWU1CT0woaWxvb2t1cCk7XFxuLS1cXG5mcy9pbm9kZS5jLTE3NTgtLyoqXFxuZnMvaW5vZGUuYzoxNzU5OiAqIGZpbmRfaW5vZGVfbm93YWl0IC0gZmluZCBhbiBpbm9kZSBpbiB0aGUgaW5vZGUgY2FjaGVcXG5mcy9pbm9kZS5jLTE3NjAtICogQHNiOlxcdFxcdHN1cGVyIGJsb2NrIG9mIGZpbGUgc3lzdGVtIHRvIHNlYXJjaFxcbi0tXFxuZnMvaW5vZGUuYy0xNzgwLSAqL1xcbmZzL2lub2RlLmM6MTc4MTpzdHJ1Y3QgaW5vZGUgKmZpbmRfaW5vZGVfbm93YWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuZnMvaW5vZGUuYy0xNzgyLVxcdFxcdFxcdFxcdHU2NCBoYXNodmFsLFxcbi0tXFxuZnMvaW5vZGUuYy0xODA1LX1cXG5mcy9pbm9kZS5jOjE4MDY6RVhQT1JUX1NZTUJPTChmaW5kX2lub2RlX25vd2FpdCk7XFxuZnMvaW5vZGUuYy0xODA3LVxcbi0tXFxuZnMvbnRmcy9tZnQuYz02NjU9c3RhdGljIGludCBudGZzX3Rlc3RfaW5vZGVfd2Ioc3RydWN0IGlub2RlICp2aSwgdTY0IGlubywgdm9pZCAqZGF0YSlcXG4tLVxcbmZzL250ZnMvbWZ0LmMtNzIxLSAqIG1lYW5zIHRoYXQgd2UgY2FuIHNhZmVseSB3cml0ZSBvdXQgYW55IGRpcnR5IG1mdCByZWNvcmRzIHRoYXQgZG8gbm90IGhhdmVcXG5mcy9udGZzL21mdC5jOjcyMjogKiB0aGVpciBpbm9kZXMgaW4gaWNhY2hlIGFzIGRldGVybWluZWQgYnkgZmluZF9pbm9kZV9ub3dhaXQoKS5cXG5mcy9udGZzL21mdC5jLTcyMy0gKlxcbi0tXFxuZnMvbnRmcy9tZnQuYz03NDc9c3RhdGljIGJvb2wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChzdHJ1Y3QgbnRmc192b2x1bWUgKnZvbCwgY29uc3QgdTY0IG1mdF9ubyxcXG4tLVxcbmZzL250ZnMvbWZ0LmMtNzgwLVxcdFxcdC8qXFxuZnMvbnRmcy9tZnQuYzo3ODE6XFx0XFx0ICogSGF2ZSB0byB1c2UgZmluZF9pbm9kZV9ub3dhaXQoKSBzaW5jZSBpbG9va3VwNV9ub3dhaXQoKVxcbmZzL250ZnMvbWZ0LmMtNzgyLVxcdFxcdCAqIHdhaXRzIGZvciBpbm9kZSB3aXRoIElfRlJFRUlORywgd2hpY2ggY2F1c2VzIG50ZnMgdG8gZGVhZGxvY2tcXG4tLVxcbmZzL250ZnMvbWZ0LmMtNzg0LVxcdFxcdCAqL1xcbmZzL250ZnMvbWZ0LmM6Nzg1OlxcdFxcdHZpID0gZmluZF9pbm9kZV9ub3dhaXQoc2IsIG1mdF9ubywgbnRmc190ZXN0X2lub2RlX3diLCBcXHUwMDI2bmEpO1xcbmZzL250ZnMvbWZ0LmMtNzg2LVxcdFxcdGlmIChuYS5zdGF0ZSA9PSBOSV9CZWluZ0RlbGV0ZWQgfHwgbmEuc3RhdGUgPT0gTklfQmVpbmdDcmVhdGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxMzo1Ny42NTA5NzY3NDlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcwNDU2NTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIGEgTW9kaWZpY2F0aW9uIHRvIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZCoqXG5cbkFscmlnaHQsIHNvIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCBhbmQgc3BlY2lmaWNhbGx5IGludHJvZHVjZXMgYEVYVDRfSUdFVF9OT1dBSVRgLiAgR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZXh0NCBmaWxlc3lzdGVtLCB0aGlzIGltbWVkaWF0ZWx5IHRyaWdnZXJzIGEgdGhvdWdodCBwcm9jZXNzOiBXaGF0J3MgdGhlIGNvbnRleHQgaGVyZT8gIFdlJ3JlIG1vZGlmeWluZyBob3cgdGhlIGlub2RlIGNhY2hlIGlzIGFjY2Vzc2VkIHdpdGhpbiB0aGUgZXh0ZW5kZWQgYXR0cmlidXRlICh4YXR0cikgaGFuZGxpbmcuIFRoYXQgYEVYVDRfSUdFVF9OT1dBSVRgIGZsYWcgaXMgcHJldHR5IGtleS4gSXQgbWVhbnMgd2UncmUgbGlrZWx5IGFpbWluZyBmb3Igbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cHMgd2l0aGluIHRoZSB4YXR0ciBjb250ZXh0LiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvciBtYXliZSBhIGZpeCBmb3IgYSBibG9ja2luZyBpc3N1ZSwgcGVyaGFwcyByZWxhdGVkIHRvIGRlYWRsb2Nrcy5cblxuTXkgbmV4dCBzdGVwPyBEaXZlIGludG8gYGZzL2V4dDQveGF0dHIuY2Agd2hlcmUgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpmdWxsKiBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSBhcm91bmQgYGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZGAgdG8gc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHVzZWQgYW5kIGFmZmVjdGVkLiBBcmUgdGhlcmUgYW55IG90aGVyIGlub2RlIG9wZXJhdGlvbnMsIGNhY2hlIG1hbmlwdWxhdGlvbnMsIG9yIGxvY2tpbmcgbWVjaGFuaXNtcyB0aGF0IGFyZSBhbHNvIGNhbGxlZD8gIFRoaXMgaXMgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSwgc28gYSB3aWRlciB1bmRlcnN0YW5kaW5nIGlzIHBhcmFtb3VudC4gSSdsbCBuZWVkIHRvIGFzc2VzcyB0aGUgKmltcGxpY2F0aW9ucyogb2YgdGhpcyBjaGFuZ2UgYmV5b25kIHRoaXMgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIFdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgYWZmZWN0ZWQgYnkgaG93IGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgIGlzIG5vdyB1c2luZyBgRVhUNF9JR0VUX05PV0FJVGA/IEkgbmVlZCB0byBidWlsZCBhIGhvbGlzdGljIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvZGUgZmxvdyBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTU0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTQ6MDEuOTIxNDM2ODU4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTUzNzQ5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xNTI2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKlxcbmZzL2V4dDQveGF0dHIuYzoxNTI3OmV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTUyOC1cXHRcXHRcXHQgICAgc2l6ZV90IHZhbHVlX2xlbiwgdTMyIGhhc2gpXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTU3OD1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNTkwLVxcdGhhc2ggPSBleHQ0X3hhdHRyX2lub2RlX2hhc2goRVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiksIHZhbHVlLCB2YWx1ZV9sZW4pO1xcbmZzL2V4dDQveGF0dHIuYzoxNTkxOlxcdGVhX2lub2RlID0gZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKGlub2RlLCB2YWx1ZSwgdmFsdWVfbGVuLCBoYXNoKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTU5Mi1cXHRpZiAoZWFfaW5vZGUpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTQ6MDIuMDEyOTgyNDc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMDI1NjY0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhlIGNvbnRleHQgaXMgY2xlYXI6XG5cbioqQW5hbHl6aW5nIHRoZSBleHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSAoWEFUVFIpIENyZWF0aW9uIFByb2Nlc3MqKlxuXG5BbHJpZ2h0LCBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGguIFRoaXMgZnVuY3Rpb24sIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLCBpcyBjYWxsaW5nIGBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmRgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAgaXRzZWxmIGlzIGJlaW5nIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGF0IHVwc3RyZWFtIGNvbnRleHQgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgWEFUVFIgY3JlYXRpb24gd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIFRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLCBsb29raW5nIGZvciB0aGUgY2FsbCBzaXRlcyBvZiBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYC4gS25vd2luZyB3aGVyZSBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHdpbGwgdGVsbCBtZSB3aGF0IHRoZSB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMgYXJlIGZvciB0aGlzIHNwZWNpZmljIFhBVFRSIGxvb2t1cCBhbmQgcG90ZW50aWFsIGlub2RlIGNyZWF0aW9uLiBJIG5lZWQgdG8gc2VlIHRoZSBcIndoeVwiIGFuZCBcIndoZW5cIiBiZWhpbmQgdGhpcyBmdW5jdGlvbidzIGV4ZWN1dGlvbiB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoZSBncmVhdGVyIHNjaGVtZSBvZiBleHQ0IFhBVFRSIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyNzIsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQwNjoxNDowNi4wMTU1NTIzNDJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzc0NTk3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC94YXR0ci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQveGF0dHIuYz0xNTI3PWV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNTc3LSAqL1xcbmZzL2V4dDQveGF0dHIuYzoxNTc4OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQveGF0dHIuYy0xNTc5LVxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3QgdmFsdWVfbGVuKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4OTk9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xOTE5LVxcbmZzL2V4dDQveGF0dHIuYzoxOTIwOlxcdFxcdGVhX2lub2RlID0gZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTE5MjEtXFx0XFx0XFx0XFx0XFx0aS1cXHUwMDNldmFsdWUsIGktXFx1MDAzZXZhbHVlX2xlbik7XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MjI1ND1pbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yMjY5LVxcbmZzL2V4dDQveGF0dHIuYzoyMjcwOlxcdFxcdGVhX2lub2RlID0gZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZSwgaW5vZGUsXFxuZnMvZXh0NC94YXR0ci5jLTIyNzEtXFx0XFx0XFx0XFx0XFx0aS1cXHUwMDNldmFsdWUsIGktXFx1MDAzZXZhbHVlX2xlbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDA2OjE0OjA2LjEzMzMwNTMyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjQzNDk0NzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBFeHQ0IEV4dGVuZGVkIEF0dHJpYnV0ZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgZXh0NCBwYXRjaCByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIGFuZCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZy4gRXNzZW50aWFsbHksIHRoZSBjb3JlIGZ1bmN0aW9ucyBgZXh0NF94YXR0cl9ibG9ja19zZXRgIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIHNldCBvcGVyYXRpb25zIGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzLCBib3RoIGNhbGwgYGV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZWAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgcHJvYmxlbSwgYSBkZWFkbG9jayBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCB0aGF0IGNhbiBvY2N1ciB3aGVuIGZldGNoaW5nIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2Rlcy4gVGhlIHNvbHV0aW9uIGlzIHRvIHVzZSBgTk9XQUlUYCwgc3BlY2lmaWNhbGx5IGBFWFQ0X0lHRVRfTk9XQUlUYCwgZHVyaW5nIHRoZSBpbm9kZSBsb29rdXAgdG8gYXZvaWQgYmxvY2tpbmcgd2hpbGUgd2FpdGluZyBmb3IgaW5vZGVzIHRvIGJlIGZyZWVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBleHQ0IGxvZ2ljLlxuXG5NeSByZWFzb25pbmcgaXMgYmFzZWQgb24gaG93IHRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW5vZGUgZmV0Y2hpbmcgcHJvY2VzcywgYWxsb3dpbmcgZm9yIGEgbm9uLWJsb2NraW5nIGxvb2t1cCAoYEVYVDRfSUdFVF9OT1dBSVRgKSB3aGVuIHdvcmtpbmcgd2l0aCBFQSBpbm9kZXMuIFRoaXMgYWltcyB0byBwcmV2ZW50IHRoZSBzeXN0ZW0gZnJvbSBiZWluZyBzdGFsbGVkIHdoaWxlIHRyeWluZyB0byBmcmVlIGlub2Rlcy4gU28sIHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIGFuIGlub2RlIHRvIGJlY29tZSBhdmFpbGFibGUsIGl0IHNpbXBseSBza2lwcyBpdC5cblxuSSd2ZSBhbHNvIHplcm9lZCBpbiBvbiB0aGUga2V5IHN5bWJvbHMgaW52b2x2ZWQuIEkgc2VlIHRoZSBpbXBvcnRhbmNlIG9mIGBfX2V4dDRfaWdldGAsIGBleHQ0X2lnZXRfbWF0Y2hgLCBgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kYCwgYW5kLCBjcnVjaWFsbHksIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8gdGhlIGlub2RlIHJldHJpZXZhbCBhbmQgbWFuYWdlbWVudCBwcm9jZXNzLCBhbmQgdGhlIHBhdGNoIGlzIGNsZWFybHkgaW1wYWN0aW5nIGhvdyB0aGV5IGludGVyYWN0LCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGBOT1dBSVRgLlxuXG5GaW5hbGx5LCBJJ3ZlIGNoZWNrZWQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBXaGlsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgYXJlIHJlbGF0ZWQgdG8gZXh0ZW5kZWQgYXR0cmlidXRlcyBhbmQgYWNjZXNzIGNvbnRyb2wsIHRoZSBzdGFuZGFyZCBleHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucyAobGlrZSB0aGUgdXNlci4qIG5hbWVzcGFjZSkgd2lsbCB3b3JrIHdpdGhvdXQgdGhlbS4gVGhlcmVmb3JlLCBgRVhUNF9GU2AgYWxvbmUgc2hvdWxkIGJlIHRoZSBvbmx5IHJlcXVpcmVkIGNvbmZpZywgd2hpY2ggbWVhbnMgdGhlIHBhdGNoIGlzbid0IGV4Y2Vzc2l2ZWx5IGNvbXBsZXggZnJvbSBhIGNvbmZpZ3VyYXRpb24gcG9pbnQgb2Ygdmlldy4gSSB0aGluayB0aGlzIHdpbGwgYmUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIHVwZGF0ZSBmb3IgdXMuIE5vdywgbGV0J3MgY2FsbCBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk4MSwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMDY6MTQ6MTIuNzc2ODAzODk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg2MjY5NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19leHQ0X2lnZXRcIixcbiAgICBcImV4dDRfaWdldF9tYXRjaFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbm9uLWJsb2NraW5nIGlub2RlIGxvb2t1cCBmbGFnIChFWFQ0X0lHRVRfTk9XQUlUKSBpbiBleHQ0IGFuZCB1c2VzIGl0IGR1cmluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKEVBKSBpbm9kZSBjYWNoZSBsb29rdXBzIHRvIGF2b2lkIHdhaXRpbmcgb24gaW5vZGVzIHRoYXQgYXJlIGN1cnJlbnRseSBiZWluZyBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZmV0Y2hpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZXh0NF9pZ2V0XCIsXG4gICAgXCJleHQ0X2lnZXRfbWF0Y2hcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZFwiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5vbi1ibG9ja2luZyBpbm9kZSBsb29rdXAgZmxhZyAoRVhUNF9JR0VUX05PV0FJVCkgaW4gZXh0NCBhbmQgdXNlcyBpdCBkdXJpbmcgZXh0ZW5kZWQgYXR0cmlidXRlIChFQSkgaW5vZGUgY2FjaGUgbG9va3VwcyB0byBhdm9pZCB3YWl0aW5nIG9uIGlub2RlcyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGZldGNoaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowcp8n8[1] Phase: Succeeded StartedAt: 2026-06-26 06:15:05 +0000 UTC FinishedAt: 2026-06-26 06:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 06:15:05 +0000 UTC FinishedAt: 2026-06-26 06:15:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2] Phase: Succeeded StartedAt: 2026-06-26 06:15:05 +0000 UTC FinishedAt: 2026-06-26 10:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-26 06:15:05 +0000 UTC FinishedAt: 2026-06-26 10:11:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-26 06:15:05 +0000 UTC FinishedAt: 2026-06-26 06:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-26 06:15:05 +0000 UTC FinishedAt: 2026-06-26 06:15:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcp8n8/series-workflowcp8n8-convert-artifact-3806186090/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-26 06:15:15 +0000 UTC FinishedAt: 2026-06-26 06:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-26 06:15:15 +0000 UTC FinishedAt: 2026-06-26 06:38:57 +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:*30624343-3e16-4a63-bb4e-ac862c19f2ad,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-workflowcp8n8/series-workflowcp8n8-convert-artifact-3806186090/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": "d745dd04-0137-48e8-8db4-afef08172ea2", "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-workflowcp8n8/series-workflowcp8n8-build-action-2516353240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-26 06:15:15 +0000 UTC FinishedAt: 2026-06-26 06:38:47 +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:*30624343-3e16-4a63-bb4e-ac862c19f2ad,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-workflowcp8n8/series-workflowcp8n8-convert-artifact-3806186090/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": "d745dd04-0137-48e8-8db4-afef08172ea2", "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-workflowcp8n8/series-workflowcp8n8-build-action-2516353240/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-26 06:38:57 +0000 UTC FinishedAt: 2026-06-26 06:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-26 06:38:57 +0000 UTC FinishedAt: 2026-06-26 06:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-26 06:38:57 +0000 UTC FinishedAt: 2026-06-26 06:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-26 06:38:57 +0000 UTC FinishedAt: 2026-06-26 06:39:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcp8n8/series-workflowcp8n8-convert-artifact-3293618565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-26 06:39:07 +0000 UTC FinishedAt: 2026-06-26 06:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-26 06:39:07 +0000 UTC FinishedAt: 2026-06-26 06:41:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d745dd04-0137-48e8-8db4-afef08172ea2,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-workflowcp8n8/series-workflowcp8n8-build-action-2516353240/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-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-26 06:41:15 +0000 UTC FinishedAt: 2026-06-26 06:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-26 06:41:15 +0000 UTC FinishedAt: 2026-06-26 06:41:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-26 06:41:15 +0000 UTC FinishedAt: 2026-06-26 07:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-26 06:41:15 +0000 UTC FinishedAt: 2026-06-26 07:02:33 +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:*30624343-3e16-4a63-bb4e-ac862c19f2ad,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-workflowcp8n8/series-workflowcp8n8-convert-artifact-3293618565/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": "4387b270-cc12-460d-bf67-50e10bcbe21c", "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-workflowcp8n8/series-workflowcp8n8-build-action-360531153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-26 06:41:15 +0000 UTC FinishedAt: 2026-06-26 07:02:23 +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:*30624343-3e16-4a63-bb4e-ac862c19f2ad,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-workflowcp8n8/series-workflowcp8n8-convert-artifact-3293618565/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": "4387b270-cc12-460d-bf67-50e10bcbe21c", "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-workflowcp8n8/series-workflowcp8n8-build-action-360531153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-26 07:02:33 +0000 UTC FinishedAt: 2026-06-26 07:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-26 07:02:33 +0000 UTC FinishedAt: 2026-06-26 07:02:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-26 07:02:33 +0000 UTC FinishedAt: 2026-06-26 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-26 07:02:33 +0000 UTC FinishedAt: 2026-06-26 07:04:21 +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:*4387b270-cc12-460d-bf67-50e10bcbe21c,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-workflowcp8n8/series-workflowcp8n8-build-action-360531153/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-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 10:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 10:11:01 +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":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"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:*d745dd04-0137-48e8-8db4-afef08172ea2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4387b270-cc12-460d-bf67-50e10bcbe21c,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-workflowcp8n8/series-workflowcp8n8-build-action-2516353240/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-workflowcp8n8/series-workflowcp8n8-build-action-360531153/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 07:04:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 07:04:35 +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":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"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-workflowcp8n8/series-workflowcp8n8-convert-artifact-222401802/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-26 07:04:31 +0000 UTC FinishedAt: 2026-06-26 07:04:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-26 07:04:41 +0000 UTC FinishedAt: 2026-06-26 10:11:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcp8n8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__ext4_iget","ext4_iget_match","ext4_xattr_inode_cache_find","ext4_xattr_inode_lookup_create"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4edcdefd4083ae04b1a5656f4be6cd83ae919ef4","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"719d8451-ce6d-4149-9e09-3fb9b81f9c67","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-26 07:04:41 +0000 UTC FinishedAt: 2026-06-26 10:10:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d745dd04-0137-48e8-8db4-afef08172ea2,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4387b270-cc12-460d-bf67-50e10bcbe21c,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-workflowcp8n8/series-workflowcp8n8-build-action-2516353240/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-workflowcp8n8/series-workflowcp8n8-build-action-360531153/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-workflowcp8n8/series-workflowcp8n8-convert-artifact-222401802/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,}