Name: series-workflow85lhd Phase: Succeeded StartedAt: 2026-07-21 10:47:43 +0000 UTC FinishedAt: 2026-07-21 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[0] Phase: Succeeded StartedAt: 2026-07-21 10:47:43 +0000 UTC FinishedAt: 2026-07-21 11:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 10:47:43 +0000 UTC FinishedAt: 2026-07-21 11:05:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_mknod", "ocfs2_acl_init_prepare", "ocfs2_init_acl", "ocfs2_calc_xattr_init", "ocfs2_init_security_and_acl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfbWtub2QmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGViMjEyMTI1ODA5YjhiMmRiZTMzMzRmN2QxMmQ2ZTVmOWRmMzU5YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxMTowMjozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMWM0NTk5M2UzNGIwMDUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCAmIzQzOzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gb2NmczJfYWNsO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0ICAgICAgaW50IHR5cGUsXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcbiB7XG4gXHRpbnQgbmFtZV9pbmRleDtcbkBAIC0zNDksNjMgJiM0MzszNDgsOTggQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cbiAgKi9cbi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4mIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZW1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4mIzQzO1x0XHRcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbiYjNDM7XHRcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiBcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuIFx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4tXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXG4tXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuJiM0MztcdFx0XHRcdFx0ICAgIGRhdGFfYWMpO1xuIFx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWxvZ19lcnJubyhyZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuJiM0MztcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSAmIzQzOzIwLDIwIEBAIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2lvcF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBib29sIHJjdSk7XG4gaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XG4tZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUge1xuJiM0MztcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuJiM0MztcdHN0cnVjdCBwb3NpeF9hY2wgKmFjbDtcbiYjNDM7XHR1bW9kZV90IG1vZGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbiBcbiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xuaW5kZXggMTI3NzY2NmM3N2NkMmQuLjFkNDkyZjM1OTFiZWJlIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvbmFtZWkuY1xuQEAgLTI1Niw2ICYjNDM7MjU2LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHNpZ3NldF90IG9sZHNldDtcbiBcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBsZWF2ZTtcbiYjNDM7XG4gXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbi1cdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsIFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiBcdFx0Z290byBsZWF2ZTtcbkBAIC00MTEsOCAmIzQzOzQxNSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuJiM0MztcdFx0XHRcdFx1MDAyNmFjbF9zdGF0ZSk7XG4gXG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbiYjNDM7XHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1xuIFx0b2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdChcdTAwMjZsb29rdXApO1xuIFxuIFx0aWYgKGlub2RlX2FjKVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkZC4uMjVlNTI2MzNjZWEyODcgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jXG5AQCAtNjExLDEzICYjNDM7NjExLDEwIEBAIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUsXG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuJiM0MztcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuJiM0MztcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwmIzM0O1wmIzM0OywgTlVMTCwgMCk7XG4tXHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGlmIChhY2xfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuLVx0XHRcdGlmIChTX0lTRElSKG1vZGUpKVxuLVx0XHRcdFx0YV9zaXplIFx1MDAzY1x1MDAzYz0gMTtcbi1cdFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXHUwMDI2XHUwMDI2IGFjbF9sZW4gIT0gLUVOT0RBVEEpIHtcbi1cdFx0XHRyZXQgPSBhY2xfbGVuO1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTY4MywxNCAmIzQzOzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiBcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4tXHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuLVx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXG4mIzQzO1x0XHRcdFx0XHRkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcbiYjNDM7XHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXG4mIzQzO1x0XHRcdFx0XHRkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcbiYjNDM7XHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtNzI1Nyw2ICYjNDM7NzI2NSw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGU7XG4gXG4gXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjY5LDEwICYjNDM7NzI3OCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuJiM0MztcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7dW5sb2NrOlxuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjc4OWM1NTAwYTA2ZDkxIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgJiM0Mzs1NSwxMSBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcbiBcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4gXHRcdFx0ICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTtcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4tXHRcdFx0ICBpbnQgKiwgaW50ICosIGludCAqKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHVtb2RlX3QsXG4mIzQzO1x0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwgaW50ICosIGludCAqLFxuJiM0MztcdFx0XHQgIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICopO1xuIFxuIC8qXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9ta25vZCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFDTCBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBPQ0ZTMiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKGUuZy4sIG1rZGlyLCBta25vZCwgY3JlYXRlLCBhbmQgcmVmbGluaykuIEl0IGludHJvZHVjZXMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIHRvIGZldGNoIGFuZCBwcmVwYXJlIEFDTHMgYmVmb3JlIGNhbGN1bGF0aW5nIHhhdHRyIGNyZWRpdHMsIGFsdGVyaW5nIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCBsb2NrIG9yZGVyaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBuZXcgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYjIxMjEyNTgwOWI4YjJkYmUzMzM0ZjdkMTJkNmU1ZjlkZjM1OWE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTE6MDI6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGFmMWUyY2VkYjIxN2YxLi4xYzQ1OTkzZTM0YjAwNSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gb2NmczJfYWNsOwogfQogCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICAgaW50IHR5cGUsCiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewogCWludCBuYW1lX2luZGV4OwpAQCAtMzQ5LDYzICYjNDM7MzQ4LDk4IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLAogICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLgogICovCi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwKLQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCi0JCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQl1bW9kZV90IG1vZGU7Ci0KLQlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDttb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKJiM0MzsKJiM0MzsJaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPQomIzQzOwkJCW9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlpZiAoSVNfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWlmICghYWNsKSB7Ci0JCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyB+Y3VycmVudF91bWFzaygpOwotCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7Ci0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJaWYgKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkgewomIzQzOwkJCXN0YXRlLSZndDthY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJaWYgKCFzdGF0ZS0mZ3Q7YWNsKQomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDtzdGF0ZS0mZ3Q7YWNsLCBHRlBfTk9GUywKJiM0MzsJCQkJCQkgJmFtcDtzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiAJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0YXRlLSZndDttb2RlICZhbXA7PSB+Y3VycmVudF91bWFzaygpOwogCQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdGF0ZS0mZ3Q7bW9kZSAmYW1wOz0gfmN1cnJlbnRfdW1hc2soKTsKIAl9Ci0JaWYgKChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgJmFtcDsmYW1wOyBhY2wpIHsKLQkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpIHsKIAkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCi0JCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsCi0JCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULAomIzQzOwkJCQkJICAgIHN0YXRlLSZndDtkZWZhdWx0X2FjbCwgbWV0YV9hYywKJiM0MzsJCQkJCSAgICBkYXRhX2FjKTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlOwotCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDthY2wsIEdGUF9OT0ZTLCAmYW1wO21vZGUpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCQlyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJaWYgKHJldDIpIHsKLQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCWlmIChyZXQgJmd0OyAwKSB7Ci0JCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsCi0JCQkJCSAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1sb2dfZXJybm8ocmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS0mZ3Q7YWNsLAomIzQzOwkJCQkJICAgIG1ldGFfYWMsIGRhdGFfYWMpOwogCQl9CiAJfQotY2xlYW51cDoKLQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmgKQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpOwogaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgewomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwomIzQzOwl1bW9kZV90IG1vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKJiM0MzsJCQkgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwogCiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xZDQ5MmYzNTkxYmViZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yNTYsNiAmIzQzOzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJc2lnc2V0X3Qgb2xkc2V0OwogCWludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlOwogCiAJdHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiwgZGVudHJ5LSZndDtkX25hbWUubmFtZSwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktJmd0O2lwX2Jsa25vLApAQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCX0KIAl9CiAKJiM0MzsJc3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsICZhbXA7YWNsX3N0YXRlKTsKJiM0MzsJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQlnb3RvIGxlYXZlOwomIzQzOwogCS8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqLwotCXN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSwKLQkJCQkgICAgICAgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAotCQkJCSAgICAgICAmYW1wO3hhdHRyX2NyZWRpdHMsICZhbXA7d2FudF9tZXRhKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAomIzQzOwkJCQkgICAgICAgJmFtcDt4YXR0cl9jcmVkaXRzLCAmYW1wO3dhbnRfbWV0YSwgJmFtcDthY2xfc3RhdGUpOwogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQxMSw4ICYjNDM7NDE1LDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLAomIzQzOwkJCQkmYW1wO2FjbF9zdGF0ZSk7CiAKIAlpZiAoc3RhdHVzICZsdDsgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAJa2ZyZWUoc2kudmFsdWUpOwogCiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwomIzQzOwogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmFtcDtsb29rdXApOwogCiAJaWYgKGlub2RlX2FjKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggZmNkZGQzYzEzYWNkZGQuLjI1ZTUyNjMzY2VhMjg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDI5IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoCiYjNDM7CQkJCQlkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwomIzQzOwkJCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKAomIzQzOwkJCQkJZGlyLSZndDtpX3NiLCBuZXdfY2x1c3RlcnMpOwomIzQzOwkJCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2FjbC0mZ3Q7YV9jb3VudCAqCiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpOwomIzQzOwkJCWlmIChhY2xfbGVuICZndDsgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKJiM0MzsJCQkJbmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKAomIzQzOwkJCQkJZGlyLSZndDtpX3NiLCBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcygKJiM0MzsJCQkJCWRpci0mZ3Q7aV9zYiwgbmV3X2NsdXN0ZXJzKTsKJiM0MzsJCQkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTcyNTcsNiAmIzQzOzcyNjUsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDsKJiM0MzsJc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGU7CiAKIAlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTsKIAlpZiAocmV0KSB7CkBAIC03MjY5LDEwICYjNDM7NzI3OCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gbGVhdmU7CiAJfQotCXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCAmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsICZhbXA7YWNsX3N0YXRlKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKJiM0MzsJb2NmczJfYWNsX2luaXRfcmVsZWFzZSgmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7dW5sb2NrOgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwogCWJyZWxzZShkaXJfYmgpOwogbGVhdmU6CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCA2NWU5YWE3NDM5MTk5ZS4uNzg5YzU1MDBhMDZkOTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaApAQCAtNTUsOSAmIzQzOzU1LDExIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwKIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCiAJCQkgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopOwotaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCi0JCQkgIGludCAqLCBpbnQgKiwgaW50ICopOwomIzQzOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7CiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCwKJiM0MzsJCQkgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosIGludCAqLCBpbnQgKiwKJiM0MzsJCQkgIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICopOwogCiAvKgogICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg2MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24gUmVmaW5lbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGhvdyBBQ0xzIGFyZSBoYW5kbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbiDigJMgZnVuY3Rpb25zIGxpa2UgYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgYXJlIHRoZSB0YXJnZXRzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGluZGljYXRlcyBhIHNoaWZ0IHRvd2FyZHMgcHJlcGFyaW5nIEFDTHMgdXBmcm9udC4gVGhlIGludGVudCBpcyBwcmV0dHkgY2xlYXI6IHRvIGdldCB0aG9zZSBBQ0xzIHJlYWR5ICpiZWZvcmUqIGFueSBsb2NraW5nIG9yIHBvdGVudGlhbGx5IGNvc3RseSBjYWxjdWxhdGlvbnMga2ljayBpbi4gVGhpcyBpcyBsaWtlbHkgYWltZWQgYXQgYXZvaWRpbmcgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIG1heWJlIGV2ZW4gZW5zdXJpbmcgdGhhdCB0aGUgY2FsY3VsYXRpb25zIGFyZSBhY2N1cmF0ZSB3aXRoIHByZS1pbml0aWFsaXplZCB2YWx1ZXMuCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBmaWd1cmUgb3V0IGlmIE9DRlMyIGlzIGV2ZW4gYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU2luY2UgaXQmIzM5O3MgYSBmaWxlc3lzdGVtLCBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIHRocm91Z2ggbG9vcCBkZXZpY2VzIG9yIHNpbWlsYXIgc2V0dXBzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gQW5kIGdpdmVuIHRoYXQgaXQmIzM5O3MgZnJlcXVlbnRseSBlbmFibGVkIGluIHN0YW5kYXJkIGZ1enppbmcgY29uZmlndXJhdGlvbnMsIEkmIzM5O2Qgc2F5IHRoYXQmIzM5O3MgYSBjaGVjay4gVG8gYmUgc3VyZSBhYm91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBzeW1ib2xzLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gcGluIGRvd24gdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyBiZWluZyB1c2VkIChgQ09ORklHX09DRlMyX0ZTYCwgYENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0xgKS4gVGhpcyYjMzk7bGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqQ2hlY2tpbmcgdGhlIFBPU0lYIEFDTCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0IChBQ0wpIGNvbmZpZ3VyYXRpb24gaXMgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgY2FuJiMzOTt0IGV2ZW4gKmJlZ2luKiB0byBhc3Nlc3MgdGhlIGlzc3VlIGF0IGhhbmQsIG9yIHRyb3VibGVzaG9vdCwgaWYgdGhlIGZvdW5kYXRpb24gcmVnYXJkaW5nIGFjY2VzcyBjb250cm9sIGlzbiYjMzk7dCBzb3VuZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgQUNMIHNldHVwOyB2ZXJpZnkgdGhlIHVuZGVybHlpbmcgbGlicmFyaWVzLCBpZiBhcHByb3ByaWF0ZTsgYW5kIHF1aWNrbHkgY2hlY2sgdGhlIGN1cnJlbnQgZGVmYXVsdCBBQ0xzLiBBcmUgdGhleSBzZXQ/IEFyZSB0aGV5IGJlaGF2aW5nIGFzIHRoZXkgc2hvdWxkPyBBbnkgbWlzY29uZmlndXJhdGlvbnMgaGVyZSwgYW5kIG15IGRlYnVnZ2luZyBlZmZvcnRzIHdpbGwgYmUgZW50aXJlbHkgbWlzZGlyZWN0ZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hlY2ssIHJlYWxseS4gSXQmIzM5O3MgYWxtb3N0IGF1dG9tYXRpYyBhdCB0aGlzIHBvaW50LCBidXQgY3JpdGljYWwgbm9uZXRoZWxlc3MuIExldCBtZSBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPQ0ZTMl9GU19QT1NJWF9BQ0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkNoZWNraW5nIHRoZSBPQ0ZTMiBQT1NJWCBBQ0wgQ29uZmlndXJhdGlvbioqCgpIbW0sIEkgc3VzcGVjdCBJIG1pZ2h0IGJlIGZvY3VzaW5nIG9uIHRoZSB3cm9uZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSW5zdGVhZCBvZiB0aGUgb25lIEkgd2FzIGluaXRpYWxseSBsb29raW5nIGF0LCBwZXJoYXBzIGl0JiMzOTtzIGFjdHVhbGx5IHRpZWQgdG8gYENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0xgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gYGZzL29jZnMyL0tjb25maWdgIGFuZCBzZWUgaWYgYFBPU0lYX0FDTGAgaXMgZGVmaW5lZCBvciByZWZlcmVuY2VkIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgY29ubmVjdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BPU0lYX0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9DRlMyIEFDTCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBzZWxlY3RpbmcgYEZTX1BPU0lYX0FDTGAsIGFuZCB0aGF0IGltcGxpZXMgYE9DRlMyX0ZTYCBpcyBzdWZmaWNpZW50IHRvIG1hbmFnZSB0aGUgZnVuY3Rpb25hbGl0eS4gR29vZC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIHNlZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX21rbm9kYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBmb3IgaW5vZGUgY3JlYXRpb24gd2l0aGluIE9DRlMyLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgpNeSBpbW1lZGlhdGUgZnV6emluZyBmb2N1cywgZ2l2ZW4gdGhlc2UgY2hhbmdlcywgaGFzIHRvIGJlIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBQ0wgaW5pdGlhbGl6YXRpb24gYW5kIGlub2RlIGNyZWF0aW9uIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3RpbmcsIGFuZCB3aGVyZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZS4gQmVmb3JlIEkgZ28gdG9vIGRlZXAsIHRob3VnaCwgbGV0JiMzOTtzIGFsc28gaW52ZXN0aWdhdGUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBvY2ZzMl9pbml0X2FjbGAgb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQuIFdlIGNhbiYjMzk7dCBsZXQgYW55dGhpbmcgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3M7IGEgY2hhbmdlIGluIG9uZSBwbGFjZSBjb3VsZCBoYXZlIHJpcHBsaW5nIGVmZmVjdHMgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTMzOC1cdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xuZnMvb2NmczIvbmFtZWkuYzozMzk6XHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbmZzL29jZnMyL25hbWVpLmMtMzQwLVx0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSwgXHUwMDI2YWNsX3N0YXRlKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTU3Nj1pbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjEzLVxuZnMvb2NmczIveGF0dHIuYzo2MTQ6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuZnMvb2NmczIveGF0dHIuYy02MTUtXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4tLVxuZnMvb2NmczIveGF0dHIuaD01OT1zdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xuZnMvb2NmczIveGF0dHIuaDo2MDppbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LFxuZnMvb2NmczIveGF0dHIuaC02MS1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosIGludCAqLCBpbnQgKixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBBQ0wgSW5pdGlhbGl6YXRpb24gaW4gT0NGUzIqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlz4oCmIHRoZSBjb2RlJiMzOTtzIGdvdCBtZSB0aGlua2luZyBhYm91dCBBQ0wgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBgb2NmczJfaW5pdF9hY2xgLiBXaGF0IGV4YWN0bHkgaXMgaGFwcGVuaW5nIGR1cmluZyB0aGF0IHN0YWdlPyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHBvaW50cyBvZiBob3cgT0NGUzIgc2V0cyB1cCBpdHMgQWNjZXNzIENvbnRyb2wgTGlzdHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3VidGxldGllcyB3aXRoaW4gYG9jZnMyX2luaXRfYWNsYCB0aGF0IEkgc2hvdWxkIGJlIGtlZXBpbmcgaW4gbWluZCBhbmQgcmV2aXNpdGluZy4gQXJlIHRoZXJlIHBhcnRpY3VsYXIgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZSB0aGF0IGRlc2VydmUgZnVydGhlciBzY3J1dGlueT8gSSBzaG91bGQgcHJvYmFibHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIGNhbGwgdG8gc2VlIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBPQ0ZTMiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXMgaXQgYmVpbmcgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lIGluIHRoZSBmaWxlc3lzdGVt4oCZcyBzZXR1cD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24/IEkgYWxzbyB3b25kZXIgaG93IHRoZSBpbml0aWFsaXphdGlvbiBtaWdodCBkaWZmZXIgYmFzZWQgb24gdGhlIHR5cGUgb2YgQUNMcyBjb25maWd1cmVkLCBhbmQgd2hldGhlciBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIEFDTCBzcGVjIGFyZSBwcm9wZXJseSBoYW5kbGVkLiBHb3R0YSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBhc3Nlc3MgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgd2hldGhlciBpdCB0aWVzIGJhY2sgdG8gdGhlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9NDAxPXZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbi0tXG5mcy9vY2ZzMi9hY2wuYy00MDYtXG5mcy9vY2ZzMi9hY2wuYzo0MDc6aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi9hY2wuYy00MDgtXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tLVxuZnMvb2NmczIvYWNsLmg9MzI9dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbmZzL29jZnMyL2FjbC5oOjMzOmludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvb2NmczIvYWNsLmgtMzQtXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cbmZzL29jZnMyL25hbWVpLmM6NDE4Olx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuZnMvb2NmczIvbmFtZWkuYy00MTktXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzI2Mj1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI4NS1cbmZzL29jZnMyL3hhdHRyLmM6NzI4NjpcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuZnMvb2NmczIveGF0dHIuYy03Mjg3LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBTZWN1cml0eSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVyZSBleGFjdGx5IGRvZXMgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgZ2V0IGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgd2hhdCYjMzk7cyBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgaXQuIEtub3dpbmcgdGhlIGNhbGxlciBmdW5jdGlvbiBpcyBrZXkgdG8gZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2VjdXJpdHkgZmVhdHVyZXMgYXJlIGludGVncmF0ZWQuIFJpZ2h0IG5vdywgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJJiMzOTttIGFmdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XHRcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTcxODA9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI2MS0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzI2MjppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIveGF0dHIuYy03MjYzLVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTgyPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTg2LVx0XHRcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcbmZzL29jZnMyL3hhdHRyLmg6ODc6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmgtODgtXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6CgoqKkRpZ2dpbmcgaW50byBPQ0ZTMiBJbnRlcm5hbHM6IFJlZmxpbmsgYW5kIE1rbm9kIENhbGxzKioKClJpZ2h0LCBzbyBgb2NmczJfcmVmbGlua2AgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIgaGVyZSwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyB3YXJyYW50cyBhIGRlZXBlciBkaXZlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIHdoZXJlIGVsc2UgYG9jZnMyX21rbm9kYCBpcyB1c2VkLiBUaGlua2luZyBhYm91dCB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgSSYjMzk7ZCB3YWdlciBpdCYjMzk7cyBoZWF2aWx5IGludm9sdmVkIGluIHRoZSBjb3JlIGNyZWF0aW9uIHJvdXRpbmVzIC0gdGhpbmdzIGxpa2UgYG1rZGlyYCwgZmlsZSBgY3JlYXRlYCwgYW5kIGBzeW1saW5rYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIHN0YXJ0IG15IGludmVzdGlnYXRpb24sIGFuZCB3aGVyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyBhcmUgbGlrZWx5IHRvIGxpZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfbWtub2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MzIxPWludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNDgtICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG5mcy9vY2ZzMi9hY2wuYzozNDk6ICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuZnMvb2NmczIvYWNsLmMtMzUwLSAqL1xuLS1cbmZzL29jZnMyL2Rpci5jPTIyMTI9c3RhdGljIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKm9jZnMyX2ZpbGxfaW5pdGlhbF9kaXJlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvZGlyLmMtMjIzNi0vKlxuZnMvb2NmczIvZGlyLmM6MjIzNzogKiBUaGlzIHdvcmtzIHRvZ2V0aGVyIHdpdGggY29kZSBpbiBvY2ZzMl9ta25vZF9sb2NrZWQoKSB3aGljaCBzZXRzXG5mcy9vY2ZzMi9kaXIuYy0yMjM4LSAqIHRoZSBpbmxpbmUtZGF0YSBmbGFnIGFuZCBpbml0aWFsaXplcyB0aGUgaW5saW5lLWRhdGEgc2VjdGlvbi5cbi0tXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxuLS1cbmZzL29jZnMyL2lub2RlLmMtMzg3LVx0ICogVGhlc2UgaGF2ZSBhbGwgYmVlbiBjaGVja2VkIGJ5IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soKSBvciBzZXRcbmZzL29jZnMyL2lub2RlLmM6Mzg4Olx0ICogYnkgb2NmczJfbWtub2RfbG9ja2VkKCksIHNvIGEgZmFpbHVyZSBpcyBhIGNvZGUgYnVnLlxuZnMvb2NmczIvaW5vZGUuYy0zODktXHQgKi9cbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmg9NDEzPXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL29jZnMyL2pvdXJuYWwuaC00MjMtICogYmxvY2tzICYjNDM7IHF1b3RhIHVwZGF0ZSAqL1xuZnMvb2NmczIvam91cm5hbC5oOjQyNDpzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ta25vZF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpc19kaXIsXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDI1LVx0XHRcdFx0ICAgICAgaW50IHhhdHRyX2NyZWRpdHMpXG4tLVxuZnMvb2NmczIvam91cm5hbC5oPTU0OT1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvb2NmczIvam91cm5hbC5oLTU1MC17XG5mcy9vY2ZzMi9qb3VybmFsLmg6NTUxOlx0aW50IGJsb2NrcyA9IG9jZnMyX21rbm9kX2NyZWRpdHMoc2IsIDAsIDApO1xuZnMvb2NmczIvam91cm5hbC5oLTU1Mi1cbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTU1LVxuZnMvb2NmczIvbmFtZWkuYzo1NjpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL25hbWVpLmMtNTctXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yMTU9c3RhdGljIHZvaWQgb2NmczJfY2xlYW51cF9hZGRfZW50cnlfZmFpbHVyZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTIyOS1cbmZzL29jZnMyL25hbWVpLmM6MjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9vY2ZzMi9uYW1laS5jLTIzMS1cdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjYwLVxuZnMvb2NmczIvbmFtZWkuYzoyNjE6XHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbmZzL29jZnMyL25hbWVpLmMtMjYyLVx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zNjgtXG5mcy9vY2ZzMi9uYW1laS5jOjM2OTpcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXHUwMDNlc2IsXG5mcy9vY2ZzMi9uYW1laS5jLTM3MC1cdFx0XHRcdFx0XHRcdCAgICBTX0lTRElSKG1vZGUpLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMzg4LVx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXG5mcy9vY2ZzMi9uYW1laS5jOjM4OTpcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRldixcbmZzL29jZnMyL25hbWVpLmMtMzkwLVx0XHRcdFx0ICAgIFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy01MTYtXG5mcy9vY2ZzMi9uYW1laS5jOjUxNzpzdGF0aWMgaW50IF9fb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIvbmFtZWkuYy01MTgtXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjI4LVxuZnMvb2NmczIvbmFtZWkuYzo2Mjk6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG5mcy9vY2ZzMi9uYW1laS5jLTYzMC1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTY1MS1cbmZzL29jZnMyL25hbWVpLmM6NjUyOlx0cmV0dXJuIF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsIGRldiwgbmV3X2ZlX2JoLFxuZnMvb2NmczIvbmFtZWkuYy02NTMtXHRcdFx0XHQgICAgaGFuZGxlLCBpbm9kZV9hYywgZmVfYmxrbm8sXG4tLVxuZnMvb2NmczIvbmFtZWkuYz02NTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjY1LVx0XHRcdCAgT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbmZzL29jZnMyL25hbWVpLmM6NjY2Olx0cmV0ID0gb2NmczJfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGRElSLCAwKTtcbmZzL29jZnMyL25hbWVpLmMtNjY3LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTY3Mz1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTY4Mi1cdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubywgbW9kZSk7XG5mcy9vY2ZzMi9uYW1laS5jOjY4MzpcdHJldCA9IG9jZnMyX21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9vY2ZzMi9uYW1laS5jLTY4NC1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0xODEzPXN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTUtXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTY6XHRzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLFxuZnMvb2NmczIvbmFtZWkuYy0xOTU3LVx0XHRcdFx0ICAgIDAsIFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yNTIwPWludCBvY2ZzMl9jcmVhdGVfaW5vZGVfaW5fb3JwaGFuKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjU2MC1cbmZzL29jZnMyL25hbWVpLmM6MjU2MTpcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXHUwMDNlc2IsIDAsIDApKTtcbmZzL29jZnMyL25hbWVpLmMtMjU2Mi1cdGlmIChJU19FUlIoaGFuZGxlKSkge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjU4My1cdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xuZnMvb2NmczIvbmFtZWkuYzoyNTg0Olx0c3RhdHVzID0gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSxcbmZzL29jZnMyL25hbWVpLmMtMjU4NS1cdFx0XHRcdCAgICAgIDAsIFx1MDAyNm5ld19kaV9iaCwgaGFuZGxlLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9MjkzMj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI5MzktXHQubWtkaXJcdFx0PSBvY2ZzMl9ta2RpcixcbmZzL29jZnMyL25hbWVpLmM6Mjk0MDpcdC5ta25vZFx0XHQ9IG9jZnMyX21rbm9kLFxuZnMvb2NmczIvbmFtZWkuYy0yOTQxLVx0LnJlbmFtZVx0XHQ9IG9jZnMyX3JlbmFtZSxcbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIxOTc9REVGSU5FX09DRlMyX1BPSU5URVJfRVZFTlQob2NmczJfbG9va3VwX3JldCk7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTgtXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjIxOTk6VFJBQ0VfRVZFTlQob2NmczJfbWtub2QsXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIyMDAtXHRUUF9QUk9UTyh2b2lkICpkaXIsIHZvaWQgKmRlbnRyeSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICpuYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBOb2RlIENyZWF0aW9uIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRpZmZlcmVudCB0eXBlcyBvZiBub2RlcyBhcmUgY3JlYXRlZC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgb2NmczJfbWtub2RgIHdhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB1c2VkIGFjcm9zcyB0aGUgYm9hcmQgZm9yIGNyZWF0aW5nIHZhcmlvdXMgbm9kZXMsIGNvdmVyaW5nIHRoaW5ncyBsaWtlIHJlZ3VsYXIgZmlsZXMgdGhyb3VnaCBgbWtub2RgLCBkaXJlY3RvcmllcyB3aXRoIGBta2RpcmAsIGFuZCBnZW5lcmFsIGZpbGUgY3JlYXRpb24gY2FsbHMuIE15IG1lbnRhbCBtb2RlbCBsaW5rZWQgaXQgZGlyZWN0bHkgdG8gdGhlc2Ugb3BlcmF0aW9ucy4gSG93ZXZlciwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5bWxpbmtzIHByZXNlbnQgYSBzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2guCgpUaGVuIEkgcGF1c2VkLiBUaGVyZeKAmXMgc29tZXRoaW5n4oCmIG9mZi4gSSAqdGhvdWdodCogYG9jZnMyX3N5bWxpbmtgIHV0aWxpemVkIGBvY2ZzMl9ta25vZF9sb2NrZWRgLCBidXQgbm93IEkmIzM5O20gcXVlc3Rpb25pbmcgdGhhdC4gSSBuZWVkIHRvIGJlIHN1cmUuIERvZXMgaXQgdXNlIGBvY2ZzMl9ta25vZGAgYXQgYWxsPyBPciBwZXJoYXBzIGl0IGxldmVyYWdlcyBhIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gbGlrZSBgb2NmczJfaW5pdF9hY2xgPyBNZW1vcnkgaXMgZ2V0dGluZyBmdXp6eSBoZXJlLiBUaGUgbnVhbmNlcyBvZiB0aGUgQUNMIGhhbmRsaW5nIGFuZCBvdGhlciBtZXRhZGF0YSBpbml0aWFsaXphdGlvbiBhcmUgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uCgpUaGUgb25seSB3YXkgdG8gZGVmaW5pdGl2ZWx5IGFuc3dlciB0aGlzIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBgb2NmczJfc3ltbGlua2AgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBmcy9vY2ZzMi9uYW1laS5jYCB0byBzZWUgaG93IHN5bWxpbmsgY3JlYXRpb24gaXMgYWN0dWFsbHkgaGFuZGxlZC4gVGltZSB0byBhbmFseXplIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cbmZzL29jZnMyL25hbWVpLmM6NDE4Olx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuZnMvb2NmczIvbmFtZWkuYy00MTktXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYG9jZnMyX3N5bWxpbmtgICpkb2VzbiYjMzk7dCogdXNlIGBvY2ZzMl9pbml0X2FjbGAsIHdoaWNoIGlzIGEgYml0IG9mIGEgZGV0YWlsIEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkIGJlZm9yZS4gQnV0IHRoZSBtYWluIHRoaW5nIGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgb2NmczJfbWtub2RgLiBSaWdodCwgYG9jZnMyX21rbm9kYCBpcyB0aGUgd29ya2hvcnNlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyAqZXZlcnl0aGluZyog4oCTIGZpbGVzLCBkaXJlY3Rvcmllcywgc3BlY2lhbCBmaWxlcywgeW91IG5hbWUgaXQuCgpTbywgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb3JkZXIuIEl0JiMzOTtzIGNhbGxpbmcgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgICpiZWZvcmUqIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIHdpdGhpbiBgb2NmczJfbWtub2RgLiBBbmQgdGhlbiwgYG9jZnMyX2luaXRfYWNsYCBpcyBjYWxsZWQgbGF0ZXIuIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgbGlrZSBpdCBtb2RpZmllcyBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgd2hpY2ggaXMgdXNlZCBpbiBgb2NmczJfcmVmbGlua2AuCgpUaGlzIGlzIHNpZ25pZmljYW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpbm9kZXMgYXJlIGNyZWF0ZWQgYW5kIGhvdyBBQ0xzIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgc2hvdWxkIGFic29sdXRlbHkgYmUgdHJlYXRlZCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uOiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJlYWNoYWJpbGl0eSBuYWlsZWQgZG93bi4gYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGlzIHJlYWNoYWJsZSAtIHdlIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBzbyB0aGF0IGxvb2tzIGdvb2QuIEFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfcmVmbGlua194YXR0cnNgIGFuZCBgb2NmczJfcmVmbGlua2AuCgpOb3csIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE9idmlvdXNseSwgd2UgbmVlZCBgT0NGUzJfRlNgIGVuYWJsZWQuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCYjMzk7cyBpbmRpcmVjdGx5IHJlcXVpcmVkPyBMZXQgbWUgZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGBmcy9vY2ZzMi9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTI4PWNvbmZpZyBPQ0ZTMl9GU19PMkNCXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjMwOlx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zMS1cdGRlZmF1bHQgeVxuLS1cbmZzL29jZnMyL0tjb25maWc9NDI9Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFx1MDAyNlx1MDAyNiBETE1cbmZzL29jZnMyL0tjb25maWctNDUtXHRkZWZhdWx0IHlcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTU0PWNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuZnMvb2NmczIvS2NvbmZpZzo1NjpcdGRlcGVuZHMgb24gT0NGUzJfRlMgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTU3LVx0ZGVmYXVsdCB5XG4tLVxuZnMvb2NmczIvS2NvbmZpZz02Mj1jb25maWcgT0NGUzJfREVCVUdfTUFTS0xPR1xuZnMvb2NmczIvS2NvbmZpZy02My1cdGJvb2wgXCYjMzQ7T0NGUzIgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjY0Olx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy02NS1cdGRlZmF1bHQgeVxuLS1cbmZzL29jZnMyL0tjb25maWc9NzI9Y29uZmlnIE9DRlMyX0RFQlVHX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTczLVx0Ym9vbCBcJiMzNDtPQ0ZTMiBleHBlbnNpdmUgY2hlY2tzXCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjc0Olx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy03NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk5NgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiA5NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIEFuYWx5c2lzIGFuZCBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE9DRlMyIHBhdGNoLiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGlub2RlIGNyZWF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdmFyaW91cyBvcGVyYXRpb25zIGxpa2UgYG1rZGlyYCwgYG1rbm9kYCwgYGNyZWF0ZWAsIGFuZCByZWZsaW5rLiBJIHNlZSB0aGF0IGBPQ0ZTMl9GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gU2luY2UgaXQgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZC4gSSBzdGFydGVkIHdpdGggYE9DRlMyX0ZTYCBhcyB0aGUgb3ZlcmFyY2hpbmcgY29uZmlnIHRvIGNvbnNpZGVyLiBUaGVuIEkgbW92ZWQgdG8gcGlucG9pbnRpbmcgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIGBvY2ZzMl9ta25vZGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCYjMzk7cyB0aGUgVkZTIGVudHJ5IHBvaW50IGZvciBgbWtub2RgLiBPdGhlciByZWxldmFudCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBgb2NmczJfbWtub2RgLCBsaWtlIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIHdoaWNoIGNhbiBhbHNvIGxlYWQgdG8gQUNMIG9wZXJhdGlvbnMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBpbXBhY3RzIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGFuZCBgb2NmczJfY3JlYXRlYCB2aWEgdGhlIFZGUyBpbnRlcmZhY2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIG9uIHRoZSBjb21tb24gZW50cnkgcG9pbnQsIGBvY2ZzMl9ta25vZGAuCgpGcm9tIHRoZXJlLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgd2FudGVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmVuJiMzOTt0IHN0YXRpYy4gYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGlzbiYjMzk7dCBzdGF0aWMsIGl0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlIGFuZCBleHBvc2VkLCB3aGljaCBpcyBwZXJmZWN0LiBUaGUgcmVzdCBvZiB0aGVtLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggZnVydGhlciBjb25maXJtcyB0aGVpciBzaWduaWZpY2FuY2UuIEV2ZW4gdGhvdWdoIGBvY2ZzMl9ta25vZGAgaXMgc3RhdGljIHdpdGhpbiB0aGUgZmlsZSwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBWRlMgb3BlcmF0aW9uIHNvIHRoaXMgaXMgcGVyZmVjdGx5IGZpbmUgYXMgd2VsbC4KCkJhc2VkIG9uIHRoZSBjb2RlLCB0aGVzZSBmdW5jdGlvbnMgdG9nZXRoZXIgd2l0aCB0aGUgYG1rbm9kYCwgYG1rZGlyYCBhbmQgYGNyZWF0ZWAgcGF0aCwgYXJlIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBwYXRjaC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBmdW5jdGlvbiB0byBwcmVwYXJlIEFDTHMgYmVmb3JlIHNwZWNpZmljIGxvY2sgYWNxdWlzaXRpb24gb3IgY2FsY3VsYXRpb25zIG9jY3VyLiBUaGlzIHN1Z2dlc3RzIGEgY2hhbmdlIGluIHRoZSBjcml0aWNhbCBwYXRoIGFuZCBsaWtlbHkgYSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGZpeGluZyBsb2NrIG9yZGVyaW5nIG9yIGRlYWRsb2NrIGlzc3VlcyB0aGF0IGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgaW5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZywgYW5kIHdvcnRoIGxvb2tpbmcgaW50byBmb3IgcmVncmVzc2lvbnMgYW5kIG5ldyBkZWFkbG9ja3MuIFNvLCBJIHdpbGwgbWFyayB0aGlzIGNoYW5nZSBhcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIHJlb3JkZXJpbmcgaXMgY29ycmVjdCBhbmQgdGhhdCB0aGUgQUNMcyBhcmUgc3RpbGwgaGFuZGxlZCBwcm9wZXJseSBpbiBhbGwgY2FzZXMsIGVzcGVjaWFsbHkgdW5kZXIgY29uY3VycmVudCBhY2Nlc3MgYW5kIHdpdGggdmFyeWluZyBjb25maWd1cmF0aW9ucy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX21rbm9kJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgbWtkaXIsIG1rbm9kLCBjcmVhdGUsIGFuZCByZWZsaW5rKS4gSXQgaW50cm9kdWNlcyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgdG8gZmV0Y2ggYW5kIHByZXBhcmUgQUNMcyBiZWZvcmUgY2FsY3VsYXRpbmcgeGF0dHIgY3JlZGl0cywgYWx0ZXJpbmcgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG5ldyBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfbWtub2QmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjQwLjk4NDYwOTkxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjU0OTI4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfbWtub2RcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDAuOTg0NjE4MjI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMwMDY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlYjIxMjEyNTgwOWI4YjJkYmUzMzM0ZjdkMTJkNmU1ZjlkZjM1OWE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDExOjAyOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMWM0NTk5M2UzNGIwMDUgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvYWNsLmNcXG4rKysgYi9mcy9vY2ZzMi9hY2wuY1xcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcXG4gXFx0cmV0dXJuIG9jZnMyX2FjbDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCB0eXBlLFxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXFxuIHtcXG4gXFx0aW50IG5hbWVfaW5kZXg7XFxuQEAgLTM0OSw2MyArMzQ4LDk4IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cXG4gICovXFxuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbi1cXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDAsIHJldDI7XFxuLVxcdHVtb2RlX3QgbW9kZTtcXG4tXFxuLVxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi1cXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0c3RhdGUtXFx1MDAzZW1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9XFxuK1xcdFxcdFxcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghYWNsKSB7XFxuLVxcdFxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VhY2wpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VhY2wsIEdGUF9OT0ZTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN0YXRlLVxcdTAwM2Vtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cXHUwMDNlYWNsKTtcXG4rXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWFjbCA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdFxcdFxcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RhdGUtXFx1MDAzZW1vZGUgXFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcXG4gXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlbW9kZSBcXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xcbiBcXHR9XFxuLVxcdGlmICgob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgXFx1MDAyNlxcdTAwMjYgYWNsKSB7XFxuLVxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbit9XFxuK1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4gXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfREVGQVVMVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCwgbWV0YV9hYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGFfYWMpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuLVxcdFxcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcXHUwMDI2YWNsLCBHRlBfTk9GUywgXFx1MDAyNm1vZGUpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XFxuLVxcdFxcdGlmIChyZXQyKSB7XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0Mik7XFxuLVxcdFxcdFxcdHJldCA9IHJldDI7XFxuLVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cXHUwMDNlbW9kZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cXHUwMDNlYWNsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1jbGVhbnVwOlxcbi1cXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXFxuKysrIGIvZnMvb2NmczIvYWNsLmhcXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcXG4gaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSB7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XFxuK1xcdHVtb2RlX3QgbW9kZTtcXG4rfTtcXG4rXFxuK2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuIFxcbiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uMWQ0OTJmMzU5MWJlYmUgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHNpZ3NldF90IG9sZHNldDtcXG4gXFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcXG4gXFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlO1xcbiBcXG4gXFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG4gXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuQEAgLTMzMCwxMCArMzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBsZWF2ZTtcXG4rXFxuIFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbi1cXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTUsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgxLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi4yNWU1MjYzM2NlYTI4NyAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSxcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxcbi1cXHRcXHRcXHQgIGludCAqd2FudF9tZXRhKVxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gXFxuIFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJcXFwiLCBOVUxMLCAwKTtcXG4tXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbi1cXHRcXHRcXHRpZiAoU19JU0RJUihtb2RlKSlcXG4tXFx0XFx0XFx0XFx0YV9zaXplIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcXHUwMDI2XFx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XFxuLVxcdFxcdFxcdHJldCA9IGFjbF9sZW47XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC02ODMsMTQgKzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiBcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIFxcdH1cXG4tXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbi1cXHRcXHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXFxuLVxcdFxcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcXG4tXFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuLVxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuLVxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhcXG4rXFx0XFx0XFx0XFx0XFx0ZGlyLVxcdTAwM2VpX3NiLCBhY2xfbGVuKTtcXG4rXFx0XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKFxcbitcXHRcXHRcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2IsIG5ld19jbHVzdGVycyk7XFxuK1xcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbitcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXFxuK1xcdFxcdFxcdFxcdFxcdGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcXG4rXFx0XFx0XFx0XFx0XFx0ZGlyLVxcdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC03MjU3LDYgKzcyNjUsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlO1xcbiBcXG4gXFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtNzI2OSwxMCArNzI3OCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuIFxcdH1cXG4tXFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcXHUwMDI2YWNsX3N0YXRlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK3VubG9jazpcXG4gXFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XFxuIFxcdGJyZWxzZShkaXJfYmgpO1xcbiBsZWF2ZTpcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmhcXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNzg5YzU1MDBhMDZkOTEgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmhcXG5AQCAtNTUsOSArNTUsMTEgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuIFxcdFxcdFxcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XFxuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuLVxcdFxcdFxcdCAgaW50ICosIGludCAqLCBpbnQgKik7XFxuK1xcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosIGludCAqLCBpbnQgKixcXG4rXFx0XFx0XFx0ICBpbnQgKiwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqKTtcXG4gXFxuIC8qXFxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjQxLjQ4ODQxMTU5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxNzUxMTE2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfbWtub2RcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYjIxMjEyNTgwOWI4YjJkYmUzMzM0ZjdkMTJkNmU1ZjlkZjM1OWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTE6MDI6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMWM0NTk5M2UzNGIwMDUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICszNDgsOTggQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cbiAgKi9cbi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4rXHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpXG4rXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2c3RhdGUtXHUwMDNlYWNsLCBHRlBfTk9GUyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0aWYgKHJldCA9PSAwKSB7XG4rXHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuK1x0XHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbitcdFx0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiBcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0fVxuLVx0aWYgKChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgXHUwMDI2XHUwMDI2IGFjbCkge1xuLVx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbitcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4rfVxuK1xuK2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4gXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbi1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcbi1cdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbitcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuK1x0XHRcdFx0XHQgICAgZGF0YV9hYyk7XG4gXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbi1cdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNmFjbCwgR0ZQX05PRlMsIFx1MDAyNm1vZGUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bWxvZ19lcnJubyhyZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cdTAwM2VhY2wsXG4rXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcdFx0fVxuIFx0fVxuLWNsZWFudXA6XG4tXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbisrKyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuK1x0dW1vZGVfdCBtb2RlO1xuK307XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uMWQ0OTJmMzU5MWJlYmUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4rKysgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICszMzEsMTMgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4rXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGxlYXZlO1xuK1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbitcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIFx0XHRnb3RvIGxlYXZlO1xuQEAgLTQxMSw4ICs0MTUsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuK1x0XHRcdFx0XHUwMDI2YWNsX3N0YXRlKTtcbiBcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuQEAgLTQ3Nyw2ICs0ODEsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4rXG4gXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFx1MDAyNmxvb2t1cCk7XG4gXG4gXHRpZiAoaW5vZGVfYWMpXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmNcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi4yNWU1MjYzM2NlYTI4NyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwiXCIsIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuK1x0XHR9XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICs2NzYsMjkgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKFxuK1x0XHRcdFx0XHRkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoXG4rXHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xuK1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXG4rXHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBhY2xfbGVuKTtcbitcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcbitcdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2IsIG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyNTcsNiArNzI2NSw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyNzgsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbit1bmxvY2s6XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNzg5YzU1MDBhMDZkOTEgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSArNTUsMTEgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxuIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuIFx0XHRcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuLVx0XHRcdCAgaW50ICosIGludCAqLCBpbnQgKik7XG4rXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LFxuK1x0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwgaW50ICosIGludCAqLFxuK1x0XHRcdCAgaW50ICosIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKik7XG4gXG4gLypcbiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDEuNDg4NDEzNDQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzOTEyNDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24gUmVmaW5lbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQncyB0d2Vha2luZyBob3cgQUNMcyBhcmUgaGFuZGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIGZ1bmN0aW9ucyBsaWtlIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSB0aGUgdGFyZ2V0cy4gVGhlIGludHJvZHVjdGlvbiBvZiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBpbmRpY2F0ZXMgYSBzaGlmdCB0b3dhcmRzIHByZXBhcmluZyBBQ0xzIHVwZnJvbnQuIFRoZSBpbnRlbnQgaXMgcHJldHR5IGNsZWFyOiB0byBnZXQgdGhvc2UgQUNMcyByZWFkeSAqYmVmb3JlKiBhbnkgbG9ja2luZyBvciBwb3RlbnRpYWxseSBjb3N0bHkgY2FsY3VsYXRpb25zIGtpY2sgaW4uIFRoaXMgaXMgbGlrZWx5IGFpbWVkIGF0IGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBtYXliZSBldmVuIGVuc3VyaW5nIHRoYXQgdGhlIGNhbGN1bGF0aW9ucyBhcmUgYWNjdXJhdGUgd2l0aCBwcmUtaW5pdGlhbGl6ZWQgdmFsdWVzLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBmaWd1cmUgb3V0IGlmIE9DRlMyIGlzIGV2ZW4gYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU2luY2UgaXQncyBhIGZpbGVzeXN0ZW0sIGl0IHNob3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCBsb29wIGRldmljZXMgb3Igc2ltaWxhciBzZXR1cHMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBBbmQgZ2l2ZW4gdGhhdCBpdCdzIGZyZXF1ZW50bHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLCBJJ2Qgc2F5IHRoYXQncyBhIGNoZWNrLiBUbyBiZSBzdXJlIGFib3V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBmcy9vY2ZzMi9LY29uZmlnYCB0byBwaW4gZG93biB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIGJlaW5nIHVzZWQgKGBDT05GSUdfT0NGUzJfRlNgLCBgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTGApLiBUaGlzJ2xsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODYyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDcuNDI3NTQxMTcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzY1Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPQ0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDcuNDkyOTM0Mzk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MjI4NzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqQ2hlY2tpbmcgdGhlIFBPU0lYIEFDTCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3QgKEFDTCkgY29uZmlndXJhdGlvbiBpcyB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBjYW4ndCBldmVuICpiZWdpbiogdG8gYXNzZXNzIHRoZSBpc3N1ZSBhdCBoYW5kLCBvciB0cm91Ymxlc2hvb3QsIGlmIHRoZSBmb3VuZGF0aW9uIHJlZ2FyZGluZyBhY2Nlc3MgY29udHJvbCBpc24ndCBzb3VuZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBBQ0wgc2V0dXA7IHZlcmlmeSB0aGUgdW5kZXJseWluZyBsaWJyYXJpZXMsIGlmIGFwcHJvcHJpYXRlOyBhbmQgcXVpY2tseSBjaGVjayB0aGUgY3VycmVudCBkZWZhdWx0IEFDTHMuIEFyZSB0aGV5IHNldD8gQXJlIHRoZXkgYmVoYXZpbmcgYXMgdGhleSBzaG91bGQ/IEFueSBtaXNjb25maWd1cmF0aW9ucyBoZXJlLCBhbmQgbXkgZGVidWdnaW5nIGVmZm9ydHMgd2lsbCBiZSBlbnRpcmVseSBtaXNkaXJlY3RlZC4gSXQncyBhIGZ1bmRhbWVudGFsIGNoZWNrLCByZWFsbHkuIEl0J3MgYWxtb3N0IGF1dG9tYXRpYyBhdCB0aGlzIHBvaW50LCBidXQgY3JpdGljYWwgbm9uZXRoZWxlc3MuIExldCBtZSBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjUwLjYzNTIyNDgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODM3NDc5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTX1BPU0lYX0FDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMjo1MC45ODM2MDg3OTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4MTYzMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkNoZWNraW5nIHRoZSBPQ0ZTMiBQT1NJWCBBQ0wgQ29uZmlndXJhdGlvbioqXG5cbkhtbSwgSSBzdXNwZWN0IEkgbWlnaHQgYmUgZm9jdXNpbmcgb24gdGhlIHdyb25nIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJbnN0ZWFkIG9mIHRoZSBvbmUgSSB3YXMgaW5pdGlhbGx5IGxvb2tpbmcgYXQsIHBlcmhhcHMgaXQncyBhY3R1YWxseSB0aWVkIHRvIGBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBxdWlja2x5IG5hdmlnYXRlIHRvIGBmcy9vY2ZzMi9LY29uZmlnYCBhbmQgc2VlIGlmIGBQT1NJWF9BQ0xgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGNvbm5lY3Rpb24gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjU0LjEwMTc3NDU2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU4NDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQT1NJWF9BQ0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTktXFx0c2VsZWN0IFFVT1RBX1RSRUVcXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5mcy9vY2ZzMi9LY29uZmlnLTExLVxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjU0LjE2OTM2OTI1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODE5MTcwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIHNlbGVjdGluZyBgRlNfUE9TSVhfQUNMYCwgYW5kIHRoYXQgaW1wbGllcyBgT0NGUzJfRlNgIGlzIHN1ZmZpY2llbnQgdG8gbWFuYWdlIHRoZSBmdW5jdGlvbmFsaXR5LiBHb29kLiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIHNlZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX21rbm9kYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBmb3IgaW5vZGUgY3JlYXRpb24gd2l0aGluIE9DRlMyLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay5cblxuTXkgaW1tZWRpYXRlIGZ1enppbmcgZm9jdXMsIGdpdmVuIHRoZXNlIGNoYW5nZXMsIGhhcyB0byBiZSBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQUNMIGluaXRpYWxpemF0aW9uIGFuZCBpbm9kZSBjcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGludGVyYWN0aW5nLCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgYmUuIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCB0aG91Z2gsIGxldCdzIGFsc28gaW52ZXN0aWdhdGUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBvY2ZzMl9pbml0X2FjbGAgb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQuIFdlIGNhbid0IGxldCBhbnl0aGluZyBzbGlwIHRocm91Z2ggdGhlIGNyYWNrczsgYSBjaGFuZ2UgaW4gb25lIHBsYWNlIGNvdWxkIGhhdmUgcmlwcGxpbmcgZWZmZWN0cyBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NTguNjUxMjg5MzE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDczNTQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTMzOC1cXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cXG5mcy9vY2ZzMi9uYW1laS5jOjMzOTpcXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbmZzL29jZnMyL25hbWVpLmMtMzQwLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTU3Nj1pbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02MTMtXFxuZnMvb2NmczIveGF0dHIuYzo2MTQ6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbmZzL29jZnMyL3hhdHRyLmMtNjE1LVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaD01OT1zdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xcbmZzL29jZnMyL3hhdHRyLmg6NjA6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCxcXG5mcy9vY2ZzMi94YXR0ci5oLTYxLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwgaW50ICosIGludCAqLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMjo1OC43MTYwMzE2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyOTc5MzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQUNMIEluaXRpYWxpemF0aW9uIGluIE9DRlMyKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXPigKYgdGhlIGNvZGUncyBnb3QgbWUgdGhpbmtpbmcgYWJvdXQgQUNMIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgYG9jZnMyX2luaXRfYWNsYC4gV2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBkdXJpbmcgdGhhdCBzdGFnZT8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaG93IE9DRlMyIHNldHMgdXAgaXRzIEFjY2VzcyBDb250cm9sIExpc3RzLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3VidGxldGllcyB3aXRoaW4gYG9jZnMyX2luaXRfYWNsYCB0aGF0IEkgc2hvdWxkIGJlIGtlZXBpbmcgaW4gbWluZCBhbmQgcmV2aXNpdGluZy4gQXJlIHRoZXJlIHBhcnRpY3VsYXIgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZSB0aGF0IGRlc2VydmUgZnVydGhlciBzY3J1dGlueT8gSSBzaG91bGQgcHJvYmFibHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIGNhbGwgdG8gc2VlIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBPQ0ZTMiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXMgaXQgYmVpbmcgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lIGluIHRoZSBmaWxlc3lzdGVt4oCZcyBzZXR1cD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbj8gSSBhbHNvIHdvbmRlciBob3cgdGhlIGluaXRpYWxpemF0aW9uIG1pZ2h0IGRpZmZlciBiYXNlZCBvbiB0aGUgdHlwZSBvZiBBQ0xzIGNvbmZpZ3VyZWQsIGFuZCB3aGV0aGVyIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgQUNMIHNwZWMgYXJlIHByb3Blcmx5IGhhbmRsZWQuIEdvdHRhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIHRvIGFzc2VzcyBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCB3aGV0aGVyIGl0IHRpZXMgYmFjayB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDIuNDQ1ODI4NzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzEzMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2luaXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz00MDE9dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDA2LVxcbmZzL29jZnMyL2FjbC5jOjQwNzppbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9vY2ZzMi9hY2wuYy00MDgtXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tLVxcbmZzL29jZnMyL2FjbC5oPTMyPXZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuZnMvb2NmczIvYWNsLmg6MzM6aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvYWNsLmgtMzQtXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cXG5mcy9vY2ZzMi9uYW1laS5jOjQxODpcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuZnMvb2NmczIvbmFtZWkuYy00MTktXFx0XFx0XFx0XFx0XFx1MDAyNmFjbF9zdGF0ZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTcyNjI9aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzI4NS1cXG5mcy9vY2ZzMi94YXR0ci5jOjcyODY6XFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzI4Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMzowMi41MTMxNDc5NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NzcwNDk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFNlY3VyaXR5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVyZSBleGFjdGx5IGRvZXMgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgZ2V0IGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgd2hhdCdzIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBpdC4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9uIGlzIGtleSB0byBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZWN1cml0eSBmZWF0dXJlcyBhcmUgaW50ZWdyYXRlZC4gUmlnaHQgbm93LCB0aGF0J3MgdGhlIGNlbnRyYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSdtIGFmdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDUuNTEwODU3OTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQyMjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQyMzg9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cXHRpZiAoIXByZXNlcnZlKSB7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI5NzpcXHRcXHRlcnJvciA9IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChkaXIsIG5ld19vcnBoYW5faW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTcxODA9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjYxLSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzI2MjppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL3hhdHRyLmMtNzI2My1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaD04Mj1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oLTg2LVxcdFxcdFxcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcXG5mcy9vY2ZzMi94YXR0ci5oOjg3OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIveGF0dHIuaC04OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMzowNS41NzcyODgxNDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNTk4OTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqRGlnZ2luZyBpbnRvIE9DRlMyIEludGVybmFsczogUmVmbGluayBhbmQgTWtub2QgQ2FsbHMqKlxuXG5SaWdodCwgc28gYG9jZnMyX3JlZmxpbmtgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyIGhlcmUsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoaXMgd2FycmFudHMgYSBkZWVwZXIgZGl2ZS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHdlIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBlbHNlIGBvY2ZzMl9ta25vZGAgaXMgdXNlZC4gVGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIHN1c3BlY3RzIGluIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIEknZCB3YWdlciBpdCdzIGhlYXZpbHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgY3JlYXRpb24gcm91dGluZXMgLSB0aGluZ3MgbGlrZSBgbWtkaXJgLCBmaWxlIGBjcmVhdGVgLCBhbmQgYHN5bWxpbmtgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLCBhbmQgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgaW5zaWdodHMgYXJlIGxpa2VseSB0byBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDguNjkzMjgxMzc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE4NTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9ta25vZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvYWNsLmM9MzIxPWludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTM0OC0gKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcXG5mcy9vY2ZzMi9hY2wuYzozNDk6ICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxcbmZzL29jZnMyL2FjbC5jLTM1MC0gKi9cXG4tLVxcbmZzL29jZnMyL2Rpci5jPTIyMTI9c3RhdGljIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKm9jZnMyX2ZpbGxfaW5pdGlhbF9kaXJlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9kaXIuYy0yMjM2LS8qXFxuZnMvb2NmczIvZGlyLmM6MjIzNzogKiBUaGlzIHdvcmtzIHRvZ2V0aGVyIHdpdGggY29kZSBpbiBvY2ZzMl9ta25vZF9sb2NrZWQoKSB3aGljaCBzZXRzXFxuZnMvb2NmczIvZGlyLmMtMjIzOC0gKiB0aGUgaW5saW5lLWRhdGEgZmxhZyBhbmQgaW5pdGlhbGl6ZXMgdGhlIGlubGluZS1kYXRhIHNlY3Rpb24uXFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxcbi0tXFxuZnMvb2NmczIvaW5vZGUuYy0zODctXFx0ICogVGhlc2UgaGF2ZSBhbGwgYmVlbiBjaGVja2VkIGJ5IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soKSBvciBzZXRcXG5mcy9vY2ZzMi9pbm9kZS5jOjM4ODpcXHQgKiBieSBvY2ZzMl9ta25vZF9sb2NrZWQoKSwgc28gYSBmYWlsdXJlIGlzIGEgY29kZSBidWcuXFxuZnMvb2NmczIvaW5vZGUuYy0zODktXFx0ICovXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmg9NDEzPXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5oLTQyMy0gKiBibG9ja3MgKyBxdW90YSB1cGRhdGUgKi9cXG5mcy9vY2ZzMi9qb3VybmFsLmg6NDI0OnN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpcixcXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDI1LVxcdFxcdFxcdFxcdCAgICAgIGludCB4YXR0cl9jcmVkaXRzKVxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5oPTU0OT1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL29jZnMyL2pvdXJuYWwuaC01NTAte1xcbmZzL29jZnMyL2pvdXJuYWwuaDo1NTE6XFx0aW50IGJsb2NrcyA9IG9jZnMyX21rbm9kX2NyZWRpdHMoc2IsIDAsIDApO1xcbmZzL29jZnMyL2pvdXJuYWwuaC01NTItXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTU1LVxcbmZzL29jZnMyL25hbWVpLmM6NTY6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuZnMvb2NmczIvbmFtZWkuYy01Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjE1PXN0YXRpYyB2b2lkIG9jZnMyX2NsZWFudXBfYWRkX2VudHJ5X2ZhaWx1cmUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTIyOS1cXG5mcy9vY2ZzMi9uYW1laS5jOjIzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL29jZnMyL25hbWVpLmMtMjMxLVxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjYwLVxcbmZzL29jZnMyL25hbWVpLmM6MjYxOlxcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNjItXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTM2OC1cXG5mcy9vY2ZzMi9uYW1laS5jOjM2OTpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYixcXG5mcy9vY2ZzMi9uYW1laS5jLTM3MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgU19JU0RJUihtb2RlKSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzg4LVxcdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xcbmZzL29jZnMyL25hbWVpLmM6Mzg5OlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRldixcXG5mcy9vY2ZzMi9uYW1laS5jLTM5MC1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTUxNi1cXG5mcy9vY2ZzMi9uYW1laS5jOjUxNzpzdGF0aWMgaW50IF9fb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL25hbWVpLmMtNTE4LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTYyOC1cXG5mcy9vY2ZzMi9uYW1laS5jOjYyOTpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTYzMC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjUxLVxcbmZzL29jZnMyL25hbWVpLmM6NjUyOlxcdHJldHVybiBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLCBkZXYsIG5ld19mZV9iaCxcXG5mcy9vY2ZzMi9uYW1laS5jLTY1My1cXHRcXHRcXHRcXHQgICAgaGFuZGxlLCBpbm9kZV9hYywgZmVfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY1Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTY2NS1cXHRcXHRcXHQgIE9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xcbmZzL29jZnMyL25hbWVpLmM6NjY2OlxcdHJldCA9IG9jZnMyX21rbm9kKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xcbmZzL29jZnMyL25hbWVpLmMtNjY3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY3Mz1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjgyLVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2ODM6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02ODQtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MTgxMz1zdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTUtXFxuZnMvb2NmczIvbmFtZWkuYzoxOTU2OlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0xOTU3LVxcdFxcdFxcdFxcdCAgICAwLCBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjUyMD1pbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU2MC1cXG5mcy9vY2ZzMi9uYW1laS5jOjI1NjE6XFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cXHUwMDNlc2IsIDAsIDApKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTI1NjItXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODMtXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzoyNTg0OlxcdHN0YXR1cyA9IF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNTg1LVxcdFxcdFxcdFxcdCAgICAgIDAsIFxcdTAwMjZuZXdfZGlfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjkzMj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjkzOS1cXHQubWtkaXJcXHRcXHQ9IG9jZnMyX21rZGlyLFxcbmZzL29jZnMyL25hbWVpLmM6Mjk0MDpcXHQubWtub2RcXHRcXHQ9IG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL25hbWVpLmMtMjk0MS1cXHQucmVuYW1lXFx0XFx0PSBvY2ZzMl9yZW5hbWUsXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIxOTc9REVGSU5FX09DRlMyX1BPSU5URVJfRVZFTlQob2NmczJfbG9va3VwX3JldCk7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMTk4LVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjE5OTpUUkFDRV9FVkVOVChvY2ZzMl9ta25vZCxcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIyMDAtXFx0VFBfUFJPVE8odm9pZCAqZGlyLCB2b2lkICpkZW50cnksIGludCBuYW1lX2xlbiwgY29uc3QgY2hhciAqbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDguNzU2NDcyODQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjUwMDI0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBPQ0ZTMiBGaWxlc3lzdGVtIE5vZGUgQ3JlYXRpb24gRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRpZmZlcmVudCB0eXBlcyBvZiBub2RlcyBhcmUgY3JlYXRlZC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgb2NmczJfbWtub2RgIHdhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB1c2VkIGFjcm9zcyB0aGUgYm9hcmQgZm9yIGNyZWF0aW5nIHZhcmlvdXMgbm9kZXMsIGNvdmVyaW5nIHRoaW5ncyBsaWtlIHJlZ3VsYXIgZmlsZXMgdGhyb3VnaCBgbWtub2RgLCBkaXJlY3RvcmllcyB3aXRoIGBta2RpcmAsIGFuZCBnZW5lcmFsIGZpbGUgY3JlYXRpb24gY2FsbHMuIE15IG1lbnRhbCBtb2RlbCBsaW5rZWQgaXQgZGlyZWN0bHkgdG8gdGhlc2Ugb3BlcmF0aW9ucy4gSG93ZXZlciwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5bWxpbmtzIHByZXNlbnQgYSBzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2guXG5cblRoZW4gSSBwYXVzZWQuIFRoZXJl4oCZcyBzb21ldGhpbmfigKYgb2ZmLiBJICp0aG91Z2h0KiBgb2NmczJfc3ltbGlua2AgdXRpbGl6ZWQgYG9jZnMyX21rbm9kX2xvY2tlZGAsIGJ1dCBub3cgSSdtIHF1ZXN0aW9uaW5nIHRoYXQuIEkgbmVlZCB0byBiZSBzdXJlLiBEb2VzIGl0IHVzZSBgb2NmczJfbWtub2RgIGF0IGFsbD8gT3IgcGVyaGFwcyBpdCBsZXZlcmFnZXMgYSByZWxhdGVkIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGxpa2UgYG9jZnMyX2luaXRfYWNsYD8gTWVtb3J5IGlzIGdldHRpbmcgZnV6enkgaGVyZS4gVGhlIG51YW5jZXMgb2YgdGhlIEFDTCBoYW5kbGluZyBhbmQgb3RoZXIgbWV0YWRhdGEgaW5pdGlhbGl6YXRpb24gYXJlIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5UaGUgb25seSB3YXkgdG8gZGVmaW5pdGl2ZWx5IGFuc3dlciB0aGlzIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIGRlbHZlIGludG8gdGhlIGBvY2ZzMl9zeW1saW5rYCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgZnMvb2NmczIvbmFtZWkuY2AgdG8gc2VlIGhvdyBzeW1saW5rIGNyZWF0aW9uIGlzIGFjdHVhbGx5IGhhbmRsZWQuIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MTQuMDIxNDgwMzQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI0OTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9pbml0X2FjbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cXG5mcy9vY2ZzMi9uYW1laS5jOjQxODpcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuZnMvb2NmczIvbmFtZWkuYy00MTktXFx0XFx0XFx0XFx0XFx1MDAyNmFjbF9zdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAzOjE0LjA4NTc0MDgwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDE2MDU1NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYG9jZnMyX3N5bWxpbmtgICpkb2Vzbid0KiB1c2UgYG9jZnMyX2luaXRfYWNsYCwgd2hpY2ggaXMgYSBiaXQgb2YgYSBkZXRhaWwgSSBoYWRuJ3QgY29uc2lkZXJlZCBiZWZvcmUuIEJ1dCB0aGUgbWFpbiB0aGluZyBoZXJlIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG9jZnMyX21rbm9kYC4gUmlnaHQsIGBvY2ZzMl9ta25vZGAgaXMgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgKmV2ZXJ5dGhpbmcqIOKAkyBmaWxlcywgZGlyZWN0b3JpZXMsIHNwZWNpYWwgZmlsZXMsIHlvdSBuYW1lIGl0LlxuXG5TbywgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb3JkZXIuIEl0J3MgY2FsbGluZyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgKmJlZm9yZSogYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgd2l0aGluIGBvY2ZzMl9ta25vZGAuIEFuZCB0aGVuLCBgb2NmczJfaW5pdF9hY2xgIGlzIGNhbGxlZCBsYXRlci4gQWRkaXRpb25hbGx5LCBpdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCB3aGljaCBpcyB1c2VkIGluIGBvY2ZzMl9yZWZsaW5rYC5cblxuVGhpcyBpcyBzaWduaWZpY2FudC4gV2UncmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpbm9kZXMgYXJlIGNyZWF0ZWQgYW5kIGhvdyBBQ0xzIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgc2hvdWxkIGFic29sdXRlbHkgYmUgdHJlYXRlZCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbjogYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSByZWFjaGFiaWxpdHkgbmFpbGVkIGRvd24uIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBpcyByZWFjaGFibGUgLSB3ZSBjYW4gc2VlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBzbyB0aGF0IGxvb2tzIGdvb2QuIEFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfcmVmbGlua194YXR0cnNgIGFuZCBgb2NmczJfcmVmbGlua2AuXG5cbk5vdywgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gT2J2aW91c2x5LCB3ZSBuZWVkIGBPQ0ZTMl9GU2AgZW5hYmxlZC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0J3MgaW5kaXJlY3RseSByZXF1aXJlZD8gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU3MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMzoyMC41MDE4MDAwOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDk4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTI4PWNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMzEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTQyPWNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDQ6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcXHUwMDI2XFx1MDAyNiBETE1cXG5mcy9vY2ZzMi9LY29uZmlnLTQ1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz01ND1jb25maWcgT0NGUzJfRlNfU1RBVFNcXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIk9DRlMyIHN0YXRpc3RpY3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo1NjpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmZzL29jZnMyL0tjb25maWc9NjI9Y29uZmlnIE9DRlMyX0RFQlVHX01BU0tMT0dcXG5mcy9vY2ZzMi9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIk9DRlMyIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTY1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz03Mj1jb25maWcgT0NGUzJfREVCVUdfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTczLVxcdGJvb2wgXFxcIk9DRlMyIGV4cGVuc2l2ZSBjaGVja3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy03NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MjAuNTY2OTA0NzI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTg1MTA0MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBBbmFseXNpcyBhbmQgRm9jdXMgU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgT0NGUzIgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaW5vZGUgY3JlYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGFjcm9zcyB2YXJpb3VzIG9wZXJhdGlvbnMgbGlrZSBgbWtkaXJgLCBgbWtub2RgLCBgY3JlYXRlYCwgYW5kIHJlZmxpbmsuIEkgc2VlIHRoYXQgYE9DRlMyX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLiBTaW5jZSBpdCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQuIEkgc3RhcnRlZCB3aXRoIGBPQ0ZTMl9GU2AgYXMgdGhlIG92ZXJhcmNoaW5nIGNvbmZpZyB0byBjb25zaWRlci4gVGhlbiBJIG1vdmVkIHRvIHBpbnBvaW50aW5nIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBgb2NmczJfbWtub2RgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgaXQncyB0aGUgVkZTIGVudHJ5IHBvaW50IGZvciBgbWtub2RgLiBPdGhlciByZWxldmFudCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBgb2NmczJfbWtub2RgLCBsaWtlIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIHdoaWNoIGNhbiBhbHNvIGxlYWQgdG8gQUNMIG9wZXJhdGlvbnMuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgYG9jZnMyX21rbm9kYCwgYG9jZnMyX21rZGlyYCwgYW5kIGBvY2ZzMl9jcmVhdGVgIHZpYSB0aGUgVkZTIGludGVyZmFjZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gdGhlIGNvbW1vbiBlbnRyeSBwb2ludCwgYG9jZnMyX21rbm9kYC5cblxuRnJvbSB0aGVyZSwgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgd2FudGVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgc3RhdGljLiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXNuJ3Qgc3RhdGljLCBpdCdzIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlIGFuZCBleHBvc2VkLCB3aGljaCBpcyBwZXJmZWN0LiBUaGUgcmVzdCBvZiB0aGVtLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggZnVydGhlciBjb25maXJtcyB0aGVpciBzaWduaWZpY2FuY2UuIEV2ZW4gdGhvdWdoIGBvY2ZzMl9ta25vZGAgaXMgc3RhdGljIHdpdGhpbiB0aGUgZmlsZSwgaXQncyBhc3NpZ25lZCB0byBhIFZGUyBvcGVyYXRpb24gc28gdGhpcyBpcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLlxuXG5CYXNlZCBvbiB0aGUgY29kZSwgdGhlc2UgZnVuY3Rpb25zIHRvZ2V0aGVyIHdpdGggdGhlIGBta25vZGAsIGBta2RpcmAgYW5kIGBjcmVhdGVgIHBhdGgsIGFyZSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBmdW5jdGlvbiB0byBwcmVwYXJlIEFDTHMgYmVmb3JlIHNwZWNpZmljIGxvY2sgYWNxdWlzaXRpb24gb3IgY2FsY3VsYXRpb25zIG9jY3VyLiBUaGlzIHN1Z2dlc3RzIGEgY2hhbmdlIGluIHRoZSBjcml0aWNhbCBwYXRoIGFuZCBsaWtlbHkgYSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgZml4aW5nIGxvY2sgb3JkZXJpbmcgb3IgZGVhZGxvY2sgaXNzdWVzIHRoYXQgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBpbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLCBhbmQgd29ydGggbG9va2luZyBpbnRvIGZvciByZWdyZXNzaW9ucyBhbmQgbmV3IGRlYWRsb2Nrcy4gU28sIEkgd2lsbCBtYXJrIHRoaXMgY2hhbmdlIGFzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgcmVvcmRlcmluZyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoZSBBQ0xzIGFyZSBzdGlsbCBoYW5kbGVkIHByb3Blcmx5IGluIGFsbCBjYXNlcywgZXNwZWNpYWxseSB1bmRlciBjb25jdXJyZW50IGFjY2VzcyBhbmQgd2l0aCB2YXJ5aW5nIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5OTYsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAzOjMzLjE1MjAxMzM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MTAyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfbWtub2RcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX21rbm9kXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlXCIsXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgbWtkaXIsIG1rbm9kLCBjcmVhdGUsIGFuZCByZWZsaW5rKS4gSXQgaW50cm9kdWNlcyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgdG8gZmV0Y2ggYW5kIHByZXBhcmUgQUNMcyBiZWZvcmUgY2FsY3VsYXRpbmcgeGF0dHIgY3JlZGl0cywgYWx0ZXJpbmcgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG5ldyBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 10:47:43 +0000 UTC FinishedAt: 2026-07-21 11:03:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_mknod", "ocfs2_acl_init_prepare", "ocfs2_init_acl", "ocfs2_calc_xattr_init", "ocfs2_init_security_and_acl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfbWtub2QmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGViMjEyMTI1ODA5YjhiMmRiZTMzMzRmN2QxMmQ2ZTVmOWRmMzU5YTVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAyMSAxMTowMjozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMWM0NTk5M2UzNGIwMDUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCAmIzQzOzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gb2NmczJfYWNsO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0ICAgICAgaW50IHR5cGUsXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcbiB7XG4gXHRpbnQgbmFtZV9pbmRleDtcbkBAIC0zNDksNjMgJiM0MzszNDgsOTggQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cbiAgKi9cbi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4mIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZW1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4mIzQzO1x0XHRcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcbiYjNDM7XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuJiM0MztcdFx0XHRyZXQgPSBQVFJfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdGlmIChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbiYjNDM7XHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbiYjNDM7XHRcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiBcdFx0XHR9XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiM0MztcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIFx1MDAyNlx1MDAyNiBzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCkge1xuIFx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4tXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsXG4tXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiYjNDM7XHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuJiM0MztcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuJiM0MztcdFx0XHRcdFx0ICAgIGRhdGFfYWMpO1xuIFx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgc3RhdGUtXHUwMDNlbW9kZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bWxvZ19lcnJubyhyZXQpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuJiM0MztcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuJiM0MztcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSAmIzQzOzIwLDIwIEBAIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2lvcF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBib29sIHJjdSk7XG4gaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4gXHRcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xuIGV4dGVybiBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7XG4tZXh0ZXJuIGludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosXG4tXHRcdFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKik7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUge1xuJiM0MztcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuJiM0MztcdHN0cnVjdCBwb3NpeF9hY2wgKmFjbDtcbiYjNDM7XHR1bW9kZV90IG1vZGU7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbiYjNDM7XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbiBcbiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuY1xuaW5kZXggMTI3NzY2NmM3N2NkMmQuLjFkNDkyZjM1OTFiZWJlIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvbmFtZWkuY1xuQEAgLTI1Niw2ICYjNDM7MjU2LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHNpZ3NldF90IG9sZHNldDtcbiBcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbiYjNDM7XHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdH1cbiBcdH1cbiBcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBsZWF2ZTtcbiYjNDM7XG4gXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbi1cdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbi1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsIFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiBcdFx0Z290byBsZWF2ZTtcbkBAIC00MTEsOCAmIzQzOzQxNSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdGluY19ubGluayhkaXIpO1xuIFx0fVxuIFxuLVx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcbi1cdFx0XHQgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuJiM0MztcdFx0XHRcdFx1MDAyNmFjbF9zdGF0ZSk7XG4gXG4gXHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gXHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRicmVsc2UocGFyZW50X2ZlX2JoKTtcbiBcdGtmcmVlKHNpLnZhbHVlKTtcbiBcbiYjNDM7XHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1xuIFx0b2NmczJfZnJlZV9kaXJfbG9va3VwX3Jlc3VsdChcdTAwMjZsb29rdXApO1xuIFxuIFx0aWYgKGlub2RlX2FjKVxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCBmY2RkZDNjMTNhY2RkZC4uMjVlNTI2MzNjZWEyODcgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jXG5AQCAtNjExLDEzICYjNDM7NjExLDEwIEBAIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4tXHRcdFx0ICB1bW9kZV90IG1vZGUsXG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuJiM0MztcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuJiM0MztcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwmIzM0O1wmIzM0OywgTlVMTCwgMCk7XG4tXHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdGlmIChhY2xfbGVuIFx1MDAzZSAwKSB7XG4tXHRcdFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuLVx0XHRcdGlmIChTX0lTRElSKG1vZGUpKVxuLVx0XHRcdFx0YV9zaXplIFx1MDAzY1x1MDAzYz0gMTtcbi1cdFx0fSBlbHNlIGlmIChhY2xfbGVuICE9IDAgXHUwMDI2XHUwMDI2IGFjbF9sZW4gIT0gLUVOT0RBVEEpIHtcbi1cdFx0XHRyZXQgPSBhY2xfbGVuO1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTY4MywxNCAmIzQzOzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiBcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4tXHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuLVx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuJiM0MztcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuJiM0MztcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXG4mIzQzO1x0XHRcdFx0XHRkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcbiYjNDM7XHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXG4mIzQzO1x0XHRcdFx0XHRkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4mIzQzO1x0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcbiYjNDM7XHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiByZXQ7XG5AQCAtNzI1Nyw2ICYjNDM7NzI2NSw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XG4mIzQzO1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGU7XG4gXG4gXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjY5LDEwICYjNDM7NzI3OCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuJiM0MztcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7dW5sb2NrOlxuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjc4OWM1NTAwYTA2ZDkxIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgJiM0Mzs1NSwxMSBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcbiBcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4gXHRcdFx0ICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTtcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4tXHRcdFx0ICBpbnQgKiwgaW50ICosIGludCAqKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHVtb2RlX3QsXG4mIzQzO1x0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwgaW50ICosIGludCAqLFxuJiM0MztcdFx0XHQgIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICopO1xuIFxuIC8qXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9ta25vZCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFDTCBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBPQ0ZTMiBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKGUuZy4sIG1rZGlyLCBta25vZCwgY3JlYXRlLCBhbmQgcmVmbGluaykuIEl0IGludHJvZHVjZXMgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIHRvIGZldGNoIGFuZCBwcmVwYXJlIEFDTHMgYmVmb3JlIGNhbGN1bGF0aW5nIHhhdHRyIGNyZWRpdHMsIGFsdGVyaW5nIHRoZSBjb3JlIGV4ZWN1dGlvbiBmbG93IGFuZCBsb2NrIG9yZGVyaW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBuZXcgZGVhZGxvY2tzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlYjIxMjEyNTgwOWI4YjJkYmUzMzM0ZjdkMTJkNmU1ZjlkZjM1OWE1CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTE6MDI6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGFmMWUyY2VkYjIxN2YxLi4xYzQ1OTkzZTM0YjAwNSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gb2NmczJfYWNsOwogfQogCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICAgaW50IHR5cGUsCiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewogCWludCBuYW1lX2luZGV4OwpAQCAtMzQ5LDYzICYjNDM7MzQ4LDk4IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLAogICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLgogICovCi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwKLQkJICAgc3RydWN0IGlub2RlICppbm9kZSwKLQkJICAgc3RydWN0IGlub2RlICpkaXIsCi0JCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCi0JCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKLQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpCiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQl1bW9kZV90IG1vZGU7Ci0KLQlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDttb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKJiM0MzsKJiM0MzsJaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPQomIzQzOwkJCW9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlpZiAoSVNfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWlmICghYWNsKSB7Ci0JCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyB+Y3VycmVudF91bWFzaygpOwotCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7Ci0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJaWYgKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkgewomIzQzOwkJCXN0YXRlLSZndDthY2wgPSBwb3NpeF9hY2xfZHVwKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJaWYgKCFzdGF0ZS0mZ3Q7YWNsKQomIzQzOwkJCQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDtzdGF0ZS0mZ3Q7YWNsLCBHRlBfTk9GUywKJiM0MzsJCQkJCQkgJmFtcDtzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQkJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiAJCQl9CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0YXRlLSZndDttb2RlICZhbXA7PSB+Y3VycmVudF91bWFzaygpOwogCQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlzdGF0ZS0mZ3Q7bW9kZSAmYW1wOz0gfmN1cnJlbnRfdW1hc2soKTsKIAl9Ci0JaWYgKChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgJmFtcDsmYW1wOyBhY2wpIHsKLQkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkpIHsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpIHsKIAkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCi0JCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsCi0JCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULAomIzQzOwkJCQkJICAgIHN0YXRlLSZndDtkZWZhdWx0X2FjbCwgbWV0YV9hYywKJiM0MzsJCQkJCSAgICBkYXRhX2FjKTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlOwotCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDthY2wsIEdGUF9OT0ZTLCAmYW1wO21vZGUpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCQlyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJaWYgKHJldDIpIHsKLQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCWlmIChyZXQgJmd0OyAwKSB7Ci0JCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsCi0JCQkJCSAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1sb2dfZXJybm8ocmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS0mZ3Q7YWNsLAomIzQzOwkJCQkJICAgIG1ldGFfYWMsIGRhdGFfYWMpOwogCQl9CiAJfQotY2xlYW51cDoKLQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmgKQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpOwogaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgewomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwomIzQzOwl1bW9kZV90IG1vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKJiM0MzsJCQkgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwogCiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDJkLi4xZDQ5MmYzNTkxYmViZSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yNTYsNiAmIzQzOzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJc2lnc2V0X3Qgb2xkc2V0OwogCWludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlOwogCiAJdHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS0mZ3Q7ZF9uYW1lLmxlbiwgZGVudHJ5LSZndDtkX25hbWUubmFtZSwKIAkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktJmd0O2lwX2Jsa25vLApAQCAtMzMwLDEwICYjNDM7MzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCX0KIAl9CiAKJiM0MzsJc3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsICZhbXA7YWNsX3N0YXRlKTsKJiM0MzsJaWYgKHN0YXR1cyAmbHQ7IDApCiYjNDM7CQlnb3RvIGxlYXZlOwomIzQzOwogCS8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqLwotCXN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSwKLQkJCQkgICAgICAgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAotCQkJCSAgICAgICAmYW1wO3hhdHRyX2NyZWRpdHMsICZhbXA7d2FudF9tZXRhKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgJmFtcDtzaSwgJmFtcDt3YW50X2NsdXN0ZXJzLAomIzQzOwkJCQkgICAgICAgJmFtcDt4YXR0cl9jcmVkaXRzLCAmYW1wO3dhbnRfbWV0YSwgJmFtcDthY2xfc3RhdGUpOwogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQxMSw4ICYjNDM7NDE1LDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLAomIzQzOwkJCQkmYW1wO2FjbF9zdGF0ZSk7CiAKIAlpZiAoc3RhdHVzICZsdDsgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NzcsNiAmIzQzOzQ4MSw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAJa2ZyZWUoc2kudmFsdWUpOwogCiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwomIzQzOwogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmFtcDtsb29rdXApOwogCiAJaWYgKGlub2RlX2FjKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggZmNkZGQzYzEzYWNkZGQuLjI1ZTUyNjMzY2VhMjg3IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDI5IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoCiYjNDM7CQkJCQlkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwomIzQzOwkJCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKAomIzQzOwkJCQkJZGlyLSZndDtpX3NiLCBuZXdfY2x1c3RlcnMpOwomIzQzOwkJCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2FjbC0mZ3Q7YV9jb3VudCAqCiYjNDM7CQkJCSAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpOwomIzQzOwkJCWlmIChhY2xfbGVuICZndDsgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKJiM0MzsJCQkJbmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKAomIzQzOwkJCQkJZGlyLSZndDtpX3NiLCBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcygKJiM0MzsJCQkJCWRpci0mZ3Q7aV9zYiwgbmV3X2NsdXN0ZXJzKTsKJiM0MzsJCQkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKJiM0MzsJCQl9CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTcyNTcsNiAmIzQzOzcyNjUsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDsKJiM0MzsJc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGU7CiAKIAlyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTsKIAlpZiAocmV0KSB7CkBAIC03MjY5LDEwICYjNDM7NzI3OCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gbGVhdmU7CiAJfQotCXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCAmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIHVubG9jazsKJiM0MzsKJiM0MzsJcmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsICZhbXA7YWNsX3N0YXRlKTsKIAlpZiAocmV0KQogCQltbG9nX2Vycm5vKHJldCk7CiAKJiM0MzsJb2NmczJfYWNsX2luaXRfcmVsZWFzZSgmYW1wO2FjbF9zdGF0ZSk7CiYjNDM7dW5sb2NrOgogCW9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApOwogCWJyZWxzZShkaXJfYmgpOwogbGVhdmU6CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaAppbmRleCA2NWU5YWE3NDM5MTk5ZS4uNzg5YzU1MDBhMDZkOTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3hhdHRyLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaApAQCAtNTUsOSAmIzQzOzU1LDExIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwKIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosCiAJCQkgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCiAJCQkgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopOwotaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosCi0JCQkgIGludCAqLCBpbnQgKiwgaW50ICopOwomIzQzOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7CiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCwKJiM0MzsJCQkgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosIGludCAqLCBpbnQgKiwKJiM0MzsJCQkgIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICopOwogCiAvKgogICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jaywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjg2MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24gUmVmaW5lbWVudCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHR3ZWFraW5nIGhvdyBBQ0xzIGFyZSBoYW5kbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbiDigJMgZnVuY3Rpb25zIGxpa2UgYG9jZnMyX21rbm9kYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgYXJlIHRoZSB0YXJnZXRzLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgLCBhbG9uZyB3aXRoIG1vZGlmaWNhdGlvbnMgdG8gYG9jZnMyX2luaXRfYWNsYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGluZGljYXRlcyBhIHNoaWZ0IHRvd2FyZHMgcHJlcGFyaW5nIEFDTHMgdXBmcm9udC4gVGhlIGludGVudCBpcyBwcmV0dHkgY2xlYXI6IHRvIGdldCB0aG9zZSBBQ0xzIHJlYWR5ICpiZWZvcmUqIGFueSBsb2NraW5nIG9yIHBvdGVudGlhbGx5IGNvc3RseSBjYWxjdWxhdGlvbnMga2ljayBpbi4gVGhpcyBpcyBsaWtlbHkgYWltZWQgYXQgYXZvaWRpbmcgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIG1heWJlIGV2ZW4gZW5zdXJpbmcgdGhhdCB0aGUgY2FsY3VsYXRpb25zIGFyZSBhY2N1cmF0ZSB3aXRoIHByZS1pbml0aWFsaXplZCB2YWx1ZXMuCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBmaWd1cmUgb3V0IGlmIE9DRlMyIGlzIGV2ZW4gYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU2luY2UgaXQmIzM5O3MgYSBmaWxlc3lzdGVtLCBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIHRocm91Z2ggbG9vcCBkZXZpY2VzIG9yIHNpbWlsYXIgc2V0dXBzLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4gQW5kIGdpdmVuIHRoYXQgaXQmIzM5O3MgZnJlcXVlbnRseSBlbmFibGVkIGluIHN0YW5kYXJkIGZ1enppbmcgY29uZmlndXJhdGlvbnMsIEkmIzM5O2Qgc2F5IHRoYXQmIzM5O3MgYSBjaGVjay4gVG8gYmUgc3VyZSBhYm91dCB0aGUgZXhhY3QgY29uZmlndXJhdGlvbiBzeW1ib2xzLCBJIHNob3VsZCB0YWtlIGEgbG9vayBhdCBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gcGluIGRvd24gdGhlIGV4YWN0IGNvbmZpZyBuYW1lcyBiZWluZyB1c2VkIChgQ09ORklHX09DRlMyX0ZTYCwgYENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0xgKS4gVGhpcyYjMzk7bGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZmVhdHVyZXMgYXJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9DRlMyX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MjMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZToKCioqQ2hlY2tpbmcgdGhlIFBPU0lYIEFDTCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byBhbnl0aGluZyBlbHNlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0IChBQ0wpIGNvbmZpZ3VyYXRpb24gaXMgd2hlcmUgSSBleHBlY3QgaXQgdG8gYmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZpcnN0IHN0ZXAuIEkgY2FuJiMzOTt0IGV2ZW4gKmJlZ2luKiB0byBhc3Nlc3MgdGhlIGlzc3VlIGF0IGhhbmQsIG9yIHRyb3VibGVzaG9vdCwgaWYgdGhlIGZvdW5kYXRpb24gcmVnYXJkaW5nIGFjY2VzcyBjb250cm9sIGlzbiYjMzk7dCBzb3VuZC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSB0aGUgQUNMIHNldHVwOyB2ZXJpZnkgdGhlIHVuZGVybHlpbmcgbGlicmFyaWVzLCBpZiBhcHByb3ByaWF0ZTsgYW5kIHF1aWNrbHkgY2hlY2sgdGhlIGN1cnJlbnQgZGVmYXVsdCBBQ0xzLiBBcmUgdGhleSBzZXQ/IEFyZSB0aGV5IGJlaGF2aW5nIGFzIHRoZXkgc2hvdWxkPyBBbnkgbWlzY29uZmlndXJhdGlvbnMgaGVyZSwgYW5kIG15IGRlYnVnZ2luZyBlZmZvcnRzIHdpbGwgYmUgZW50aXJlbHkgbWlzZGlyZWN0ZWQuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hlY2ssIHJlYWxseS4gSXQmIzM5O3MgYWxtb3N0IGF1dG9tYXRpYyBhdCB0aGlzIHBvaW50LCBidXQgY3JpdGljYWwgbm9uZXRoZWxlc3MuIExldCBtZSBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPQ0ZTMl9GU19QT1NJWF9BQ0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTcwCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guCgoqKkNoZWNraW5nIHRoZSBPQ0ZTMiBQT1NJWCBBQ0wgQ29uZmlndXJhdGlvbioqCgpIbW0sIEkgc3VzcGVjdCBJIG1pZ2h0IGJlIGZvY3VzaW5nIG9uIHRoZSB3cm9uZyBjb25maWd1cmF0aW9uIG9wdGlvbi4gSW5zdGVhZCBvZiB0aGUgb25lIEkgd2FzIGluaXRpYWxseSBsb29raW5nIGF0LCBwZXJoYXBzIGl0JiMzOTtzIGFjdHVhbGx5IHRpZWQgdG8gYENPTkZJR19PQ0ZTMl9GU19QT1NJWF9BQ0xgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdC4gTGV0IG1lIHF1aWNrbHkgbmF2aWdhdGUgdG8gYGZzL29jZnMyL0tjb25maWdgIGFuZCBzZWUgaWYgYFBPU0lYX0FDTGAgaXMgZGVmaW5lZCBvciByZWZlcmVuY2VkIHdpdGhpbiB0aGF0IGZpbGUuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgZXhhY3QgY29ubmVjdGlvbiBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BPU0lYX0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI1NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9DRlMyIEFDTCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyB0aGUgY29kZSYjMzk7cyBzZWxlY3RpbmcgYEZTX1BPU0lYX0FDTGAsIGFuZCB0aGF0IGltcGxpZXMgYE9DRlMyX0ZTYCBpcyBzdWZmaWNpZW50IHRvIG1hbmFnZSB0aGUgZnVuY3Rpb25hbGl0eS4gR29vZC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIHNlZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX21rbm9kYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBmb3IgaW5vZGUgY3JlYXRpb24gd2l0aGluIE9DRlMyLCBzbyB0aGV5JiMzOTtyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2suCgpNeSBpbW1lZGlhdGUgZnV6emluZyBmb2N1cywgZ2l2ZW4gdGhlc2UgY2hhbmdlcywgaGFzIHRvIGJlIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBBQ0wgaW5pdGlhbGl6YXRpb24gYW5kIGlub2RlIGNyZWF0aW9uIGZ1bmN0aW9ucyBhcmUgaW50ZXJhY3RpbmcsIGFuZCB3aGVyZSB0aGUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZS4gQmVmb3JlIEkgZ28gdG9vIGRlZXAsIHRob3VnaCwgbGV0JiMzOTtzIGFsc28gaW52ZXN0aWdhdGUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBvY2ZzMl9pbml0X2FjbGAgb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQuIFdlIGNhbiYjMzk7dCBsZXQgYW55dGhpbmcgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3M7IGEgY2hhbmdlIGluIG9uZSBwbGFjZSBjb3VsZCBoYXZlIHJpcHBsaW5nIGVmZmVjdHMgZWxzZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTMzOC1cdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xuZnMvb2NmczIvbmFtZWkuYzozMzk6XHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbmZzL29jZnMyL25hbWVpLmMtMzQwLVx0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSwgXHUwMDI2YWNsX3N0YXRlKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTU3Nj1pbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjEzLVxuZnMvb2NmczIveGF0dHIuYzo2MTQ6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuZnMvb2NmczIveGF0dHIuYy02MTUtXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4tLVxuZnMvb2NmczIveGF0dHIuaD01OT1zdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xuZnMvb2NmczIveGF0dHIuaDo2MDppbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LFxuZnMvb2NmczIveGF0dHIuaC02MS1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosIGludCAqLCBpbnQgKixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE3OAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJiMzOTttIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBBQ0wgSW5pdGlhbGl6YXRpb24gaW4gT0NGUzIqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlz4oCmIHRoZSBjb2RlJiMzOTtzIGdvdCBtZSB0aGlua2luZyBhYm91dCBBQ0wgaW5pdGlhbGl6YXRpb24sIHNwZWNpZmljYWxseSBgb2NmczJfaW5pdF9hY2xgLiBXaGF0IGV4YWN0bHkgaXMgaGFwcGVuaW5nIGR1cmluZyB0aGF0IHN0YWdlPyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGNyaXRpY2FsIHBvaW50cyBvZiBob3cgT0NGUzIgc2V0cyB1cCBpdHMgQWNjZXNzIENvbnRyb2wgTGlzdHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3VidGxldGllcyB3aXRoaW4gYG9jZnMyX2luaXRfYWNsYCB0aGF0IEkgc2hvdWxkIGJlIGtlZXBpbmcgaW4gbWluZCBhbmQgcmV2aXNpdGluZy4gQXJlIHRoZXJlIHBhcnRpY3VsYXIgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZSB0aGF0IGRlc2VydmUgZnVydGhlciBzY3J1dGlueT8gSSBzaG91bGQgcHJvYmFibHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIGNhbGwgdG8gc2VlIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBPQ0ZTMiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXMgaXQgYmVpbmcgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lIGluIHRoZSBmaWxlc3lzdGVt4oCZcyBzZXR1cD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBmdW5jdGlvbiYjMzk7cyBleGVjdXRpb24/IEkgYWxzbyB3b25kZXIgaG93IHRoZSBpbml0aWFsaXphdGlvbiBtaWdodCBkaWZmZXIgYmFzZWQgb24gdGhlIHR5cGUgb2YgQUNMcyBjb25maWd1cmVkLCBhbmQgd2hldGhlciBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIEFDTCBzcGVjIGFyZSBwcm9wZXJseSBoYW5kbGVkLiBHb3R0YSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBhc3Nlc3MgYW55IHNlY3VyaXR5IGltcGxpY2F0aW9ucyBhbmQgd2hldGhlciBpdCB0aWVzIGJhY2sgdG8gdGhlIGRhdGEgc3RydWN0dXJlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9NDAxPXZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbi0tXG5mcy9vY2ZzMi9hY2wuYy00MDYtXG5mcy9vY2ZzMi9hY2wuYzo0MDc6aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi9hY2wuYy00MDgtXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tLVxuZnMvb2NmczIvYWNsLmg9MzI9dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbmZzL29jZnMyL2FjbC5oOjMzOmludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvb2NmczIvYWNsLmgtMzQtXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cbmZzL29jZnMyL25hbWVpLmM6NDE4Olx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuZnMvb2NmczIvbmFtZWkuYy00MTktXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzI2Mj1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI4NS1cbmZzL29jZnMyL3hhdHRyLmM6NzI4NjpcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuZnMvb2NmczIveGF0dHIuYy03Mjg3LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkzOQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipUcmFjaW5nIHRoZSBTZWN1cml0eSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVyZSBleGFjdGx5IGRvZXMgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgZ2V0IGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgd2hhdCYjMzk7cyBzZXR0aW5nIHVwIHRoZSBlbnZpcm9ubWVudCBmb3IgaXQuIEtub3dpbmcgdGhlIGNhbGxlciBmdW5jdGlvbiBpcyBrZXkgdG8gZGVidWdnaW5nIGFuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgc2VjdXJpdHkgZmVhdHVyZXMgYXJlIGludGVncmF0ZWQuIFJpZ2h0IG5vdywgdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJJiMzOTttIGFmdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XHRcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTcxODA9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI2MS0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzI2MjppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIveGF0dHIuYy03MjYzLVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTgyPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTg2LVx0XHRcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcbmZzL29jZnMyL3hhdHRyLmg6ODc6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmgtODgtXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ5MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6CgoqKkRpZ2dpbmcgaW50byBPQ0ZTMiBJbnRlcm5hbHM6IFJlZmxpbmsgYW5kIE1rbm9kIENhbGxzKioKClJpZ2h0LCBzbyBgb2NmczJfcmVmbGlua2AgaXMgZGVmaW5pdGVseSBhIGtleSBwbGF5ZXIgaGVyZSwgd2hpY2ggbWFrZXMgbWUgdGhpbmsgdGhpcyB3YXJyYW50cyBhIGRlZXBlciBkaXZlLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgd2UgbmVlZCB0byBleGFtaW5lIHdoZXJlIGVsc2UgYG9jZnMyX21rbm9kYCBpcyB1c2VkLiBUaGlua2luZyBhYm91dCB0aGUgdXN1YWwgc3VzcGVjdHMgaW4gZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucywgSSYjMzk7ZCB3YWdlciBpdCYjMzk7cyBoZWF2aWx5IGludm9sdmVkIGluIHRoZSBjb3JlIGNyZWF0aW9uIHJvdXRpbmVzIC0gdGhpbmdzIGxpa2UgYG1rZGlyYCwgZmlsZSBgY3JlYXRlYCwgYW5kIGBzeW1saW5rYC4gVGhhdCYjMzk7cyB3aGVyZSBJIHdvdWxkIHN0YXJ0IG15IGludmVzdGlnYXRpb24sIGFuZCB3aGVyZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBpbnNpZ2h0cyBhcmUgbGlrZWx5IHRvIGxpZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfbWtub2QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MzIxPWludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNDgtICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG5mcy9vY2ZzMi9hY2wuYzozNDk6ICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuZnMvb2NmczIvYWNsLmMtMzUwLSAqL1xuLS1cbmZzL29jZnMyL2Rpci5jPTIyMTI9c3RhdGljIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKm9jZnMyX2ZpbGxfaW5pdGlhbF9kaXJlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvZGlyLmMtMjIzNi0vKlxuZnMvb2NmczIvZGlyLmM6MjIzNzogKiBUaGlzIHdvcmtzIHRvZ2V0aGVyIHdpdGggY29kZSBpbiBvY2ZzMl9ta25vZF9sb2NrZWQoKSB3aGljaCBzZXRzXG5mcy9vY2ZzMi9kaXIuYy0yMjM4LSAqIHRoZSBpbmxpbmUtZGF0YSBmbGFnIGFuZCBpbml0aWFsaXplcyB0aGUgaW5saW5lLWRhdGEgc2VjdGlvbi5cbi0tXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxuLS1cbmZzL29jZnMyL2lub2RlLmMtMzg3LVx0ICogVGhlc2UgaGF2ZSBhbGwgYmVlbiBjaGVja2VkIGJ5IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soKSBvciBzZXRcbmZzL29jZnMyL2lub2RlLmM6Mzg4Olx0ICogYnkgb2NmczJfbWtub2RfbG9ja2VkKCksIHNvIGEgZmFpbHVyZSBpcyBhIGNvZGUgYnVnLlxuZnMvb2NmczIvaW5vZGUuYy0zODktXHQgKi9cbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmg9NDEzPXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuLS1cbmZzL29jZnMyL2pvdXJuYWwuaC00MjMtICogYmxvY2tzICYjNDM7IHF1b3RhIHVwZGF0ZSAqL1xuZnMvb2NmczIvam91cm5hbC5oOjQyNDpzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9ta25vZF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpc19kaXIsXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDI1LVx0XHRcdFx0ICAgICAgaW50IHhhdHRyX2NyZWRpdHMpXG4tLVxuZnMvb2NmczIvam91cm5hbC5oPTU0OT1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuZnMvb2NmczIvam91cm5hbC5oLTU1MC17XG5mcy9vY2ZzMi9qb3VybmFsLmg6NTUxOlx0aW50IGJsb2NrcyA9IG9jZnMyX21rbm9kX2NyZWRpdHMoc2IsIDAsIDApO1xuZnMvb2NmczIvam91cm5hbC5oLTU1Mi1cbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTU1LVxuZnMvb2NmczIvbmFtZWkuYzo1NjpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL25hbWVpLmMtNTctXHRcdFx0ICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yMTU9c3RhdGljIHZvaWQgb2NmczJfY2xlYW51cF9hZGRfZW50cnlfZmFpbHVyZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTIyOS1cbmZzL29jZnMyL25hbWVpLmM6MjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9vY2ZzMi9uYW1laS5jLTIzMS1cdFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjYwLVxuZnMvb2NmczIvbmFtZWkuYzoyNjE6XHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbmZzL29jZnMyL25hbWVpLmMtMjYyLVx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zNjgtXG5mcy9vY2ZzMi9uYW1laS5jOjM2OTpcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXHUwMDNlc2IsXG5mcy9vY2ZzMi9uYW1laS5jLTM3MC1cdFx0XHRcdFx0XHRcdCAgICBTX0lTRElSKG1vZGUpLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMzg4LVx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXG5mcy9vY2ZzMi9uYW1laS5jOjM4OTpcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRldixcbmZzL29jZnMyL25hbWVpLmMtMzkwLVx0XHRcdFx0ICAgIFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy01MTYtXG5mcy9vY2ZzMi9uYW1laS5jOjUxNzpzdGF0aWMgaW50IF9fb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIvbmFtZWkuYy01MTgtXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjI4LVxuZnMvb2NmczIvbmFtZWkuYzo2Mjk6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXG5mcy9vY2ZzMi9uYW1laS5jLTYzMC1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTY1MS1cbmZzL29jZnMyL25hbWVpLmM6NjUyOlx0cmV0dXJuIF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsIGRldiwgbmV3X2ZlX2JoLFxuZnMvb2NmczIvbmFtZWkuYy02NTMtXHRcdFx0XHQgICAgaGFuZGxlLCBpbm9kZV9hYywgZmVfYmxrbm8sXG4tLVxuZnMvb2NmczIvbmFtZWkuYz02NTc9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX21rZGlyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjY1LVx0XHRcdCAgT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbmZzL29jZnMyL25hbWVpLmM6NjY2Olx0cmV0ID0gb2NmczJfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGRElSLCAwKTtcbmZzL29jZnMyL25hbWVpLmMtNjY3LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTY3Mz1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTY4Mi1cdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubywgbW9kZSk7XG5mcy9vY2ZzMi9uYW1laS5jOjY4MzpcdHJldCA9IG9jZnMyX21rbm9kKFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9vY2ZzMi9uYW1laS5jLTY4NC1cdGlmIChyZXQpXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0xODEzPXN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTUtXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTY6XHRzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLFxuZnMvb2NmczIvbmFtZWkuYy0xOTU3LVx0XHRcdFx0ICAgIDAsIFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yNTIwPWludCBvY2ZzMl9jcmVhdGVfaW5vZGVfaW5fb3JwaGFuKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjU2MC1cbmZzL29jZnMyL25hbWVpLmM6MjU2MTpcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXHUwMDNlc2IsIDAsIDApKTtcbmZzL29jZnMyL25hbWVpLmMtMjU2Mi1cdGlmIChJU19FUlIoaGFuZGxlKSkge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjU4My1cdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xuZnMvb2NmczIvbmFtZWkuYzoyNTg0Olx0c3RhdHVzID0gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSxcbmZzL29jZnMyL25hbWVpLmMtMjU4NS1cdFx0XHRcdCAgICAgIDAsIFx1MDAyNm5ld19kaV9iaCwgaGFuZGxlLFxuLS1cbmZzL29jZnMyL25hbWVpLmM9MjkzMj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTI5MzktXHQubWtkaXJcdFx0PSBvY2ZzMl9ta2RpcixcbmZzL29jZnMyL25hbWVpLmM6Mjk0MDpcdC5ta25vZFx0XHQ9IG9jZnMyX21rbm9kLFxuZnMvb2NmczIvbmFtZWkuYy0yOTQxLVx0LnJlbmFtZVx0XHQ9IG9jZnMyX3JlbmFtZSxcbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIxOTc9REVGSU5FX09DRlMyX1BPSU5URVJfRVZFTlQob2NmczJfbG9va3VwX3JldCk7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTgtXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjIxOTk6VFJBQ0VfRVZFTlQob2NmczJfbWtub2QsXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIyMDAtXHRUUF9QUk9UTyh2b2lkICpkaXIsIHZvaWQgKmRlbnRyeSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICpuYW1lLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk3OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBOb2RlIENyZWF0aW9uIEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRpZmZlcmVudCB0eXBlcyBvZiBub2RlcyBhcmUgY3JlYXRlZC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgb2NmczJfbWtub2RgIHdhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB1c2VkIGFjcm9zcyB0aGUgYm9hcmQgZm9yIGNyZWF0aW5nIHZhcmlvdXMgbm9kZXMsIGNvdmVyaW5nIHRoaW5ncyBsaWtlIHJlZ3VsYXIgZmlsZXMgdGhyb3VnaCBgbWtub2RgLCBkaXJlY3RvcmllcyB3aXRoIGBta2RpcmAsIGFuZCBnZW5lcmFsIGZpbGUgY3JlYXRpb24gY2FsbHMuIE15IG1lbnRhbCBtb2RlbCBsaW5rZWQgaXQgZGlyZWN0bHkgdG8gdGhlc2Ugb3BlcmF0aW9ucy4gSG93ZXZlciwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5bWxpbmtzIHByZXNlbnQgYSBzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2guCgpUaGVuIEkgcGF1c2VkLiBUaGVyZeKAmXMgc29tZXRoaW5n4oCmIG9mZi4gSSAqdGhvdWdodCogYG9jZnMyX3N5bWxpbmtgIHV0aWxpemVkIGBvY2ZzMl9ta25vZF9sb2NrZWRgLCBidXQgbm93IEkmIzM5O20gcXVlc3Rpb25pbmcgdGhhdC4gSSBuZWVkIHRvIGJlIHN1cmUuIERvZXMgaXQgdXNlIGBvY2ZzMl9ta25vZGAgYXQgYWxsPyBPciBwZXJoYXBzIGl0IGxldmVyYWdlcyBhIHJlbGF0ZWQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gbGlrZSBgb2NmczJfaW5pdF9hY2xgPyBNZW1vcnkgaXMgZ2V0dGluZyBmdXp6eSBoZXJlLiBUaGUgbnVhbmNlcyBvZiB0aGUgQUNMIGhhbmRsaW5nIGFuZCBvdGhlciBtZXRhZGF0YSBpbml0aWFsaXphdGlvbiBhcmUgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uCgpUaGUgb25seSB3YXkgdG8gZGVmaW5pdGl2ZWx5IGFuc3dlciB0aGlzIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBgb2NmczJfc3ltbGlua2AgZnVuY3Rpb24mIzM5O3MgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGNoZWNrIGBmcy9vY2ZzMi9uYW1laS5jYCB0byBzZWUgaG93IHN5bWxpbmsgY3JlYXRpb24gaXMgYWN0dWFsbHkgaGFuZGxlZC4gVGltZSB0byBhbmFseXplIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cbmZzL29jZnMyL25hbWVpLmM6NDE4Olx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuZnMvb2NmczIvbmFtZWkuYy00MTktXHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzU3MgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYG9jZnMyX3N5bWxpbmtgICpkb2VzbiYjMzk7dCogdXNlIGBvY2ZzMl9pbml0X2FjbGAsIHdoaWNoIGlzIGEgYml0IG9mIGEgZGV0YWlsIEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkIGJlZm9yZS4gQnV0IHRoZSBtYWluIHRoaW5nIGhlcmUgaXMgdGhlIG1vZGlmaWNhdGlvbiB0byBgb2NmczJfbWtub2RgLiBSaWdodCwgYG9jZnMyX21rbm9kYCBpcyB0aGUgd29ya2hvcnNlIGZ1bmN0aW9uIGZvciBjcmVhdGluZyAqZXZlcnl0aGluZyog4oCTIGZpbGVzLCBkaXJlY3Rvcmllcywgc3BlY2lhbCBmaWxlcywgeW91IG5hbWUgaXQuCgpTbywgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb3JkZXIuIEl0JiMzOTtzIGNhbGxpbmcgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgICpiZWZvcmUqIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIHdpdGhpbiBgb2NmczJfbWtub2RgLiBBbmQgdGhlbiwgYG9jZnMyX2luaXRfYWNsYCBpcyBjYWxsZWQgbGF0ZXIuIEFkZGl0aW9uYWxseSwgaXQgbG9va3MgbGlrZSBpdCBtb2RpZmllcyBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgd2hpY2ggaXMgdXNlZCBpbiBgb2NmczJfcmVmbGlua2AuCgpUaGlzIGlzIHNpZ25pZmljYW50LiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpbm9kZXMgYXJlIGNyZWF0ZWQgYW5kIGhvdyBBQ0xzIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgc2hvdWxkIGFic29sdXRlbHkgYmUgdHJlYXRlZCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY3JpdGljYWwgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uOiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIHJlYWNoYWJpbGl0eSBuYWlsZWQgZG93bi4gYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGlzIHJlYWNoYWJsZSAtIHdlIGNhbiBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBzbyB0aGF0IGxvb2tzIGdvb2QuIEFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfcmVmbGlua194YXR0cnNgIGFuZCBgb2NmczJfcmVmbGlua2AuCgpOb3csIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE9idmlvdXNseSwgd2UgbmVlZCBgT0NGUzJfRlNgIGVuYWJsZWQuIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCYjMzk7cyBpbmRpcmVjdGx5IHJlcXVpcmVkPyBMZXQgbWUgZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGBmcy9vY2ZzMi9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcbmZzL29jZnMyL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTI4PWNvbmZpZyBPQ0ZTMl9GU19PMkNCXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjMwOlx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zMS1cdGRlZmF1bHQgeVxuLS1cbmZzL29jZnMyL0tjb25maWc9NDI9Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbmZzL29jZnMyL0tjb25maWc6NDQ6XHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFx1MDAyNlx1MDAyNiBETE1cbmZzL29jZnMyL0tjb25maWctNDUtXHRkZWZhdWx0IHlcbi0tXG5mcy9vY2ZzMi9LY29uZmlnPTU0PWNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuZnMvb2NmczIvS2NvbmZpZzo1NjpcdGRlcGVuZHMgb24gT0NGUzJfRlMgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTU3LVx0ZGVmYXVsdCB5XG4tLVxuZnMvb2NmczIvS2NvbmZpZz02Mj1jb25maWcgT0NGUzJfREVCVUdfTUFTS0xPR1xuZnMvb2NmczIvS2NvbmZpZy02My1cdGJvb2wgXCYjMzQ7T0NGUzIgbG9nZ2luZyBzdXBwb3J0XCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjY0Olx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy02NS1cdGRlZmF1bHQgeVxuLS1cbmZzL29jZnMyL0tjb25maWc9NzI9Y29uZmlnIE9DRlMyX0RFQlVHX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTczLVx0Ym9vbCBcJiMzNDtPQ0ZTMiBleHBlbnNpdmUgY2hlY2tzXCYjMzQ7XG5mcy9vY2ZzMi9LY29uZmlnOjc0Olx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy03NS1cdGRlZmF1bHQgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk5NgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiA5NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIEFuYWx5c2lzIGFuZCBGb2N1cyBTeW1ib2wgU2VsZWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE9DRlMyIHBhdGNoLiBJdCBzZWVtcyB0byBiZSB0b3VjaGluZyB0aGUgQUNMIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGlub2RlIGNyZWF0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBhY3Jvc3MgdmFyaW91cyBvcGVyYXRpb25zIGxpa2UgYG1rZGlyYCwgYG1rbm9kYCwgYGNyZWF0ZWAsIGFuZCByZWZsaW5rLiBJIHNlZSB0aGF0IGBPQ0ZTMl9GU2AgaXMgdGhlIHJlbGV2YW50IGNvbmZpZy4gU2luY2UgaXQgY2hhbmdlcyB0aGUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgd2FycmFudHMgY2xvc2Ugc2NydXRpbnkuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3ltYm9scyBhZmZlY3RlZC4gSSBzdGFydGVkIHdpdGggYE9DRlMyX0ZTYCBhcyB0aGUgb3ZlcmFyY2hpbmcgY29uZmlnIHRvIGNvbnNpZGVyLiBUaGVuIEkgbW92ZWQgdG8gcGlucG9pbnRpbmcgc3BlY2lmaWMgZnVuY3Rpb25zIHRoYXQgcmVwcmVzZW50IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuIGBvY2ZzMl9ta25vZGAgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBpdCYjMzk7cyB0aGUgVkZTIGVudHJ5IHBvaW50IGZvciBgbWtub2RgLiBPdGhlciByZWxldmFudCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBgb2NmczJfbWtub2RgLCBsaWtlIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIHdoaWNoIGNhbiBhbHNvIGxlYWQgdG8gQUNMIG9wZXJhdGlvbnMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBwYXRjaCBpbXBhY3RzIGBvY2ZzMl9ta25vZGAsIGBvY2ZzMl9ta2RpcmAsIGFuZCBgb2NmczJfY3JlYXRlYCB2aWEgdGhlIFZGUyBpbnRlcmZhY2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIG9uIHRoZSBjb21tb24gZW50cnkgcG9pbnQsIGBvY2ZzMl9ta25vZGAuCgpGcm9tIHRoZXJlLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgd2FudGVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmVuJiMzOTt0IHN0YXRpYy4gYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgIGlzbiYjMzk7dCBzdGF0aWMsIGl0JiMzOTtzIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlIGFuZCBleHBvc2VkLCB3aGljaCBpcyBwZXJmZWN0LiBUaGUgcmVzdCBvZiB0aGVtLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggZnVydGhlciBjb25maXJtcyB0aGVpciBzaWduaWZpY2FuY2UuIEV2ZW4gdGhvdWdoIGBvY2ZzMl9ta25vZGAgaXMgc3RhdGljIHdpdGhpbiB0aGUgZmlsZSwgaXQmIzM5O3MgYXNzaWduZWQgdG8gYSBWRlMgb3BlcmF0aW9uIHNvIHRoaXMgaXMgcGVyZmVjdGx5IGZpbmUgYXMgd2VsbC4KCkJhc2VkIG9uIHRoZSBjb2RlLCB0aGVzZSBmdW5jdGlvbnMgdG9nZXRoZXIgd2l0aCB0aGUgYG1rbm9kYCwgYG1rZGlyYCBhbmQgYGNyZWF0ZWAgcGF0aCwgYXJlIHRoZSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcgdGhpcyBwYXRjaC4KClRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBmdW5jdGlvbiB0byBwcmVwYXJlIEFDTHMgYmVmb3JlIHNwZWNpZmljIGxvY2sgYWNxdWlzaXRpb24gb3IgY2FsY3VsYXRpb25zIG9jY3VyLiBUaGlzIHN1Z2dlc3RzIGEgY2hhbmdlIGluIHRoZSBjcml0aWNhbCBwYXRoIGFuZCBsaWtlbHkgYSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IGZpeGluZyBsb2NrIG9yZGVyaW5nIG9yIGRlYWRsb2NrIGlzc3VlcyB0aGF0IGNhbiBoYXBwZW4gZHVyaW5nIHRoZSBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgaW5vZGVzLCBtYWtpbmcgaXQgd29ydGggZnV6emluZywgYW5kIHdvcnRoIGxvb2tpbmcgaW50byBmb3IgcmVncmVzc2lvbnMgYW5kIG5ldyBkZWFkbG9ja3MuIFNvLCBJIHdpbGwgbWFyayB0aGlzIGNoYW5nZSBhcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGlzIHJlb3JkZXJpbmcgaXMgY29ycmVjdCBhbmQgdGhhdCB0aGUgQUNMcyBhcmUgc3RpbGwgaGFuZGxlZCBwcm9wZXJseSBpbiBhbGwgY2FzZXMsIGVzcGVjaWFsbHkgdW5kZXIgY29uY3VycmVudCBhY2Nlc3MgYW5kIHdpdGggdmFyeWluZyBjb25maWd1cmF0aW9ucy4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDExOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX21rbm9kJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgbWtkaXIsIG1rbm9kLCBjcmVhdGUsIGFuZCByZWZsaW5rKS4gSXQgaW50cm9kdWNlcyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgdG8gZmV0Y2ggYW5kIHByZXBhcmUgQUNMcyBiZWZvcmUgY2FsY3VsYXRpbmcgeGF0dHIgY3JlZGl0cywgYWx0ZXJpbmcgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG5ldyBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfbWtub2QmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjQwLjk4NDYwOTkxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMjU0OTI4MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfbWtub2RcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDAuOTg0NjE4MjI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDMwMDY3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlYjIxMjEyNTgwOWI4YjJkYmUzMzM0ZjdkMTJkNmU1ZjlkZjM1OWE1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDIxIDExOjAyOjM5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmNcXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMWM0NTk5M2UzNGIwMDUgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvYWNsLmNcXG4rKysgYi9mcy9vY2ZzMi9hY2wuY1xcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcXG4gXFx0cmV0dXJuIG9jZnMyX2FjbDtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIGludCB0eXBlLFxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXFxuIHtcXG4gXFx0aW50IG5hbWVfaW5kZXg7XFxuQEAgLTM0OSw2MyArMzQ4LDk4IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4gICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cXG4gICovXFxuLWludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxcbi1cXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYylcXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcXG4tXFx0aW50IHJldCA9IDAsIHJldDI7XFxuLVxcdHVtb2RlX3QgbW9kZTtcXG4tXFxuLVxcdGlmICghU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi1cXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbi1cXHRcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICBkaXJfYmgpO1xcbi1cXHRcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLVxcdFxcdFxcdGlmIChJU19FUlIoYWNsKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlYWNsID0gTlVMTDtcXG4rXFx0c3RhdGUtXFx1MDAzZW1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlO1xcbitcXG4rXFx0aWYgKFNfSVNMTksoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9XFxuK1xcdFxcdFxcdG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTtcXG4rXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbitcXHRcXHRpZiAoSVNfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUihzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmICghYWNsKSB7XFxuLVxcdFxcdFxcdG1vZGUgPSBpbm9kZS1cXHUwMDNlaV9tb2RlIFxcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcXG4tXFx0XFx0XFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTtcXG4tXFx0XFx0XFx0aWYgKHJldCkge1xcbi1cXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuLVxcdFxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VhY2wpXFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXFx1MDAyNnN0YXRlLVxcdTAwM2VhY2wsIEdGUF9OT0ZTLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNnN0YXRlLVxcdTAwM2Vtb2RlKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGlmIChyZXQgPT0gMCkge1xcbitcXHRcXHRcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cXHUwMDNlYWNsKTtcXG4rXFx0XFx0XFx0XFx0c3RhdGUtXFx1MDAzZWFjbCA9IE5VTEw7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcdFxcdFxcdFxcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RhdGUtXFx1MDAzZW1vZGUgXFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcXG4gXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlbW9kZSBcXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xcbiBcXHR9XFxuLVxcdGlmICgob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgXFx1MDAyNlxcdTAwMjYgYWNsKSB7XFxuLVxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVxcdTAwM2VhY2wpO1xcbit9XFxuK1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4gXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfREVGQVVMVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCwgbWV0YV9hYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGFfYWMpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuLVxcdFxcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcXHUwMDI2YWNsLCBHRlBfTk9GUywgXFx1MDAyNm1vZGUpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XFxuLVxcdFxcdGlmIChyZXQyKSB7XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0Mik7XFxuLVxcdFxcdFxcdHJldCA9IHJldDI7XFxuLVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cXHUwMDNlbW9kZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cXHUwMDNlYWNsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1jbGVhbnVwOlxcbi1cXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXFxuKysrIGIvZnMvb2NmczIvYWNsLmhcXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcXG4gaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSB7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XFxuK1xcdHVtb2RlX3QgbW9kZTtcXG4rfTtcXG4rXFxuK2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuIFxcbiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uMWQ0OTJmMzU5MWJlYmUgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHNpZ3NldF90IG9sZHNldDtcXG4gXFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcXG4gXFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlO1xcbiBcXG4gXFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG4gXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuQEAgLTMzMCwxMCArMzMxLDEzIEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBsZWF2ZTtcXG4rXFxuIFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbi1cXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNnhhdHRyX2NyZWRpdHMsIFxcdTAwMjZ3YW50X21ldGEsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTUsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgxLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi4yNWU1MjYzM2NlYTI4NyAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSxcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxcbi1cXHRcXHRcXHQgIGludCAqd2FudF9tZXRhKVxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gXFxuIFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJcXFwiLCBOVUxMLCAwKTtcXG4tXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbi1cXHRcXHRcXHRpZiAoU19JU0RJUihtb2RlKSlcXG4tXFx0XFx0XFx0XFx0YV9zaXplIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcXHUwMDI2XFx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XFxuLVxcdFxcdFxcdHJldCA9IGFjbF9sZW47XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC02ODMsMTQgKzY3NiwyOSBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiBcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIFxcdH1cXG4tXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbi1cXHRcXHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXFxuLVxcdFxcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcXG4tXFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuLVxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuLVxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhcXG4rXFx0XFx0XFx0XFx0XFx0ZGlyLVxcdTAwM2VpX3NiLCBhY2xfbGVuKTtcXG4rXFx0XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKFxcbitcXHRcXHRcXHRcXHRcXHRkaXItXFx1MDAzZWlfc2IsIG5ld19jbHVzdGVycyk7XFxuK1xcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbitcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXFxuK1xcdFxcdFxcdFxcdFxcdGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcXG4rXFx0XFx0XFx0XFx0XFx0ZGlyLVxcdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC03MjU3LDYgKzcyNjUsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiB7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlO1xcbiBcXG4gXFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtNzI2OSwxMCArNzI3OCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuIFxcdH1cXG4tXFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcXG4rXFxuK1xcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcXHUwMDI2YWNsX3N0YXRlKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbitcXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK3VubG9jazpcXG4gXFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XFxuIFxcdGJyZWxzZShkaXJfYmgpO1xcbiBsZWF2ZTpcXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmhcXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNzg5YzU1MDBhMDZkOTEgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmhcXG5AQCAtNTUsOSArNTUsMTEgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxcbiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuIFxcdFxcdFxcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XFxuLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXFxuLVxcdFxcdFxcdCAgaW50ICosIGludCAqLCBpbnQgKik7XFxuK1xcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LFxcbitcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosIGludCAqLCBpbnQgKixcXG4rXFx0XFx0XFx0ICBpbnQgKiwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqKTtcXG4gXFxuIC8qXFxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjQxLjQ4ODQxMTU5NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUxNzUxMTE2MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfbWtub2RcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYjIxMjEyNTgwOWI4YjJkYmUzMzM0ZjdkMTJkNmU1ZjlkZjM1OWE1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTE6MDI6MzkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMWM0NTk5M2UzNGIwMDUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICszNDgsOTggQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuICAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxuICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC5cbiAgKi9cbi1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0ICAgc3RydWN0IGlub2RlICpkaXIsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4tXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMpXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4rXHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpXG4rXHRcdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2c3RhdGUtXHUwMDNlYWNsLCBHRlBfTk9GUyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2c3RhdGUtXHUwMDNlbW9kZSk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0aWYgKHJldCA9PSAwKSB7XG4rXHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuK1x0XHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbitcdFx0XHR9XG4rXHRcdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbitcdFx0XHRcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbitcdFx0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiBcdFx0XHR9XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0fVxuLVx0aWYgKChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgXHUwMDI2XHUwMDI2IGFjbCkge1xuLVx0XHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKTtcbitcdHBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLVx1MDAzZWFjbCk7XG4rfVxuK1xuK2ludCBvY2ZzMl9pbml0X2FjbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuK1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmIChTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4gXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbi1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcbi1cdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbitcdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuK1x0XHRcdFx0XHQgICAgZGF0YV9hYyk7XG4gXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbitcdFx0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbi1cdFx0cmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKFx1MDAyNmFjbCwgR0ZQX05PRlMsIFx1MDAyNm1vZGUpO1xuLVx0XHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4gXG4tXHRcdHJldDIgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRpZiAocmV0Mikge1xuLVx0XHRcdG1sb2dfZXJybm8ocmV0Mik7XG4tXHRcdFx0cmV0ID0gcmV0Mjtcbi1cdFx0XHRnb3RvIGNsZWFudXA7XG4tXHRcdH1cbi1cdFx0aWYgKHJldCBcdTAwM2UgMCkge1xuLVx0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSxcbi1cdFx0XHRcdFx0ICAgIGRpX2JoLCBBQ0xfVFlQRV9BQ0NFU1MsXG4tXHRcdFx0XHRcdCAgICBhY2wsIG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdGlmIChyZXQpIHtcbitcdFx0bWxvZ19lcnJubyhyZXQpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4rXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuK1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cdTAwM2VhY2wsXG4rXHRcdFx0XHRcdCAgICBtZXRhX2FjLCBkYXRhX2FjKTtcbiBcdFx0fVxuIFx0fVxuLWNsZWFudXA6XG4tXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvYWNsLmggYi9mcy9vY2ZzMi9hY2wuaFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIvYWNsLmhcbisrKyBiL2ZzL29jZnMyL2FjbC5oXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbitzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIHtcbitcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuK1x0dW1vZGVfdCBtb2RlO1xuK307XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uMWQ0OTJmMzU5MWJlYmUgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4rKysgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRzaWdzZXRfdCBvbGRzZXQ7XG4gXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuIFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZTtcbiBcbiBcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sXG5AQCAtMzMwLDEwICszMzEsMTMgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0fVxuIFx0fVxuIFxuK1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4rXHRpZiAoc3RhdHVzIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGxlYXZlO1xuK1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbitcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIFx0XHRnb3RvIGxlYXZlO1xuQEAgLTQxMSw4ICs0MTUsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuK1x0XHRcdFx0XHUwMDI2YWNsX3N0YXRlKTtcbiBcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuQEAgLTQ3Nyw2ICs0ODEsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4rXG4gXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFx1MDAyNmxvb2t1cCk7XG4gXG4gXHRpZiAoaW5vZGVfYWMpXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmNcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi4yNWU1MjYzM2NlYTI4NyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwiXCIsIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuK1x0XHR9XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICs2NzYsMjkgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKFxuK1x0XHRcdFx0XHRkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoXG4rXHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBuZXdfY2x1c3RlcnMpO1xuK1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoXG4rXHRcdFx0XHRcdGRpci1cdTAwM2VpX3NiLCBhY2xfbGVuKTtcbitcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhcbitcdFx0XHRcdFx0ZGlyLVx1MDAzZWlfc2IsIG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTcyNTcsNiArNzI2NSw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG4ge1xuIFx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XG4rXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyNzgsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXHUwMDI2YWNsX3N0YXRlKTtcbit1bmxvY2s6XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNzg5YzU1MDBhMDZkOTEgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSArNTUsMTEgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxuIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuIFx0XHRcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuLVx0XHRcdCAgaW50ICosIGludCAqLCBpbnQgKik7XG4rXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LFxuK1x0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwgaW50ICosIGludCAqLFxuK1x0XHRcdCAgaW50ICosIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKik7XG4gXG4gLypcbiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDEuNDg4NDEzNDQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkzOTEyNDY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipPQ0ZTMiBBQ0wgSW5pdGlhbGl6YXRpb24gUmVmaW5lbWVudCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgaXQncyB0d2Vha2luZyBob3cgQUNMcyBhcmUgaGFuZGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIGZ1bmN0aW9ucyBsaWtlIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSB0aGUgdGFyZ2V0cy4gVGhlIGludHJvZHVjdGlvbiBvZiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYWxvbmcgd2l0aCBtb2RpZmljYXRpb25zIHRvIGBvY2ZzMl9pbml0X2FjbGAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBpbmRpY2F0ZXMgYSBzaGlmdCB0b3dhcmRzIHByZXBhcmluZyBBQ0xzIHVwZnJvbnQuIFRoZSBpbnRlbnQgaXMgcHJldHR5IGNsZWFyOiB0byBnZXQgdGhvc2UgQUNMcyByZWFkeSAqYmVmb3JlKiBhbnkgbG9ja2luZyBvciBwb3RlbnRpYWxseSBjb3N0bHkgY2FsY3VsYXRpb25zIGtpY2sgaW4uIFRoaXMgaXMgbGlrZWx5IGFpbWVkIGF0IGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucywgZGVhZGxvY2tzLCBvciBtYXliZSBldmVuIGVuc3VyaW5nIHRoYXQgdGhlIGNhbGN1bGF0aW9ucyBhcmUgYWNjdXJhdGUgd2l0aCBwcmUtaW5pdGlhbGl6ZWQgdmFsdWVzLlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIHNob3VsZCBmaWd1cmUgb3V0IGlmIE9DRlMyIGlzIGV2ZW4gYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU2luY2UgaXQncyBhIGZpbGVzeXN0ZW0sIGl0IHNob3VsZCBiZSByZWFjaGFibGUgdGhyb3VnaCBsb29wIGRldmljZXMgb3Igc2ltaWxhciBzZXR1cHMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLiBBbmQgZ2l2ZW4gdGhhdCBpdCdzIGZyZXF1ZW50bHkgZW5hYmxlZCBpbiBzdGFuZGFyZCBmdXp6aW5nIGNvbmZpZ3VyYXRpb25zLCBJJ2Qgc2F5IHRoYXQncyBhIGNoZWNrLiBUbyBiZSBzdXJlIGFib3V0IHRoZSBleGFjdCBjb25maWd1cmF0aW9uIHN5bWJvbHMsIEkgc2hvdWxkIHRha2UgYSBsb29rIGF0IGBmcy9vY2ZzMi9LY29uZmlnYCB0byBwaW4gZG93biB0aGUgZXhhY3QgY29uZmlnIG5hbWVzIGJlaW5nIHVzZWQgKGBDT05GSUdfT0NGUzJfRlNgLCBgQ09ORklHX09DRlMyX0ZTX1BPU0lYX0FDTGApLiBUaGlzJ2xsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGZlYXR1cmVzIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODYyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDcuNDI3NTQxMTcxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MzY1Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPQ0ZTMl9GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NDcuNDkyOTM0Mzk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE0MjI4NzA5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6XG5cbioqQ2hlY2tpbmcgdGhlIFBPU0lYIEFDTCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3QgKEFDTCkgY29uZmlndXJhdGlvbiBpcyB3aGVyZSBJIGV4cGVjdCBpdCB0byBiZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcC4gSSBjYW4ndCBldmVuICpiZWdpbiogdG8gYXNzZXNzIHRoZSBpc3N1ZSBhdCBoYW5kLCBvciB0cm91Ymxlc2hvb3QsIGlmIHRoZSBmb3VuZGF0aW9uIHJlZ2FyZGluZyBhY2Nlc3MgY29udHJvbCBpc24ndCBzb3VuZC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBBQ0wgc2V0dXA7IHZlcmlmeSB0aGUgdW5kZXJseWluZyBsaWJyYXJpZXMsIGlmIGFwcHJvcHJpYXRlOyBhbmQgcXVpY2tseSBjaGVjayB0aGUgY3VycmVudCBkZWZhdWx0IEFDTHMuIEFyZSB0aGV5IHNldD8gQXJlIHRoZXkgYmVoYXZpbmcgYXMgdGhleSBzaG91bGQ/IEFueSBtaXNjb25maWd1cmF0aW9ucyBoZXJlLCBhbmQgbXkgZGVidWdnaW5nIGVmZm9ydHMgd2lsbCBiZSBlbnRpcmVseSBtaXNkaXJlY3RlZC4gSXQncyBhIGZ1bmRhbWVudGFsIGNoZWNrLCByZWFsbHkuIEl0J3MgYWxtb3N0IGF1dG9tYXRpYyBhdCB0aGlzIHBvaW50LCBidXQgY3JpdGljYWwgbm9uZXRoZWxlc3MuIExldCBtZSBzdGFydCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjUwLjYzNTIyNDgzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODM3NDc5MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTX1BPU0lYX0FDTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMjo1MC45ODM2MDg3OTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE4MTYzMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLlxuXG4qKkNoZWNraW5nIHRoZSBPQ0ZTMiBQT1NJWCBBQ0wgQ29uZmlndXJhdGlvbioqXG5cbkhtbSwgSSBzdXNwZWN0IEkgbWlnaHQgYmUgZm9jdXNpbmcgb24gdGhlIHdyb25nIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJbnN0ZWFkIG9mIHRoZSBvbmUgSSB3YXMgaW5pdGlhbGx5IGxvb2tpbmcgYXQsIHBlcmhhcHMgaXQncyBhY3R1YWxseSB0aWVkIHRvIGBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQuIExldCBtZSBxdWlja2x5IG5hdmlnYXRlIHRvIGBmcy9vY2ZzMi9LY29uZmlnYCBhbmQgc2VlIGlmIGBQT1NJWF9BQ0xgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCB3aXRoaW4gdGhhdCBmaWxlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlci4gSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGV4YWN0IGNvbm5lY3Rpb24gaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk3MCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjU0LjEwMTc3NDU2NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzU4NDYzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJQT1NJWF9BQ0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTktXFx0c2VsZWN0IFFVT1RBX1RSRUVcXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5mcy9vY2ZzMi9LY29uZmlnLTExLVxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAyOjU0LjE2OTM2OTI1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0ODE5MTcwMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBPQ0ZTMiBBQ0wgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIHNlbGVjdGluZyBgRlNfUE9TSVhfQUNMYCwgYW5kIHRoYXQgaW1wbGllcyBgT0NGUzJfRlNgIGlzIHN1ZmZpY2llbnQgdG8gbWFuYWdlIHRoZSBmdW5jdGlvbmFsaXR5LiBHb29kLiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLiBJIHNlZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX21rbm9kYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlc2UgYXJlIGFsbCBjcnVjaWFsIHBvaW50cyBmb3IgaW5vZGUgY3JlYXRpb24gd2l0aGluIE9DRlMyLCBzbyB0aGV5J3JlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vay5cblxuTXkgaW1tZWRpYXRlIGZ1enppbmcgZm9jdXMsIGdpdmVuIHRoZXNlIGNoYW5nZXMsIGhhcyB0byBiZSBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQUNMIGluaXRpYWxpemF0aW9uIGFuZCBpbm9kZSBjcmVhdGlvbiBmdW5jdGlvbnMgYXJlIGludGVyYWN0aW5nLCBhbmQgd2hlcmUgdGhlIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgbWlnaHQgYmUuIEJlZm9yZSBJIGdvIHRvbyBkZWVwLCB0aG91Z2gsIGxldCdzIGFsc28gaW52ZXN0aWdhdGUgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBjYWxsIGBvY2ZzMl9pbml0X2FjbGAgb3IgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgdGhhdCB3ZXJlIGFsc28gbW9kaWZpZWQuIFdlIGNhbid0IGxldCBhbnl0aGluZyBzbGlwIHRocm91Z2ggdGhlIGNyYWNrczsgYSBjaGFuZ2UgaW4gb25lIHBsYWNlIGNvdWxkIGhhdmUgcmlwcGxpbmcgZWZmZWN0cyBlbHNld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDI6NTguNjUxMjg5MzE2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDczNTQyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTMzOC1cXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cXG5mcy9vY2ZzMi9uYW1laS5jOjMzOTpcXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcXHUwMDI2c2ksIFxcdTAwMjZ3YW50X2NsdXN0ZXJzLFxcbmZzL29jZnMyL25hbWVpLmMtMzQwLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTU3Nj1pbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02MTMtXFxuZnMvb2NmczIveGF0dHIuYzo2MTQ6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbmZzL29jZnMyL3hhdHRyLmMtNjE1LVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaD01OT1zdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlO1xcbmZzL29jZnMyL3hhdHRyLmg6NjA6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCxcXG5mcy9vY2ZzMi94YXR0ci5oLTYxLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKiwgaW50ICosIGludCAqLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMjo1OC43MTYwMzE2ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyOTc5MzA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgQUNMIEluaXRpYWxpemF0aW9uIGluIE9DRlMyKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXPigKYgdGhlIGNvZGUncyBnb3QgbWUgdGhpbmtpbmcgYWJvdXQgQUNMIGluaXRpYWxpemF0aW9uLCBzcGVjaWZpY2FsbHkgYG9jZnMyX2luaXRfYWNsYC4gV2hhdCBleGFjdGx5IGlzIGhhcHBlbmluZyBkdXJpbmcgdGhhdCBzdGFnZT8gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjcml0aWNhbCBwb2ludHMgb2YgaG93IE9DRlMyIHNldHMgdXAgaXRzIEFjY2VzcyBDb250cm9sIExpc3RzLiBJJ20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc3VidGxldGllcyB3aXRoaW4gYG9jZnMyX2luaXRfYWNsYCB0aGF0IEkgc2hvdWxkIGJlIGtlZXBpbmcgaW4gbWluZCBhbmQgcmV2aXNpdGluZy4gQXJlIHRoZXJlIHBhcnRpY3VsYXIgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZSB0aGF0IGRlc2VydmUgZnVydGhlciBzY3J1dGlueT8gSSBzaG91bGQgcHJvYmFibHkgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGZyb20gdGhlIGNhbGwgdG8gc2VlIHdoZXJlIGl0IHNpdHMgaW4gdGhlIGxhcmdlciBPQ0ZTMiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gSXMgaXQgYmVpbmcgY2FsbGVkIGF0IHRoZSByaWdodCB0aW1lIGluIHRoZSBmaWxlc3lzdGVt4oCZcyBzZXR1cD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIG9uIHRoZSBmdW5jdGlvbidzIGV4ZWN1dGlvbj8gSSBhbHNvIHdvbmRlciBob3cgdGhlIGluaXRpYWxpemF0aW9uIG1pZ2h0IGRpZmZlciBiYXNlZCBvbiB0aGUgdHlwZSBvZiBBQ0xzIGNvbmZpZ3VyZWQsIGFuZCB3aGV0aGVyIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgQUNMIHNwZWMgYXJlIHByb3Blcmx5IGhhbmRsZWQuIEdvdHRhIGxvb2sgYXQgdGhlIGltcGxlbWVudGF0aW9uIHRvIGFzc2VzcyBhbnkgc2VjdXJpdHkgaW1wbGljYXRpb25zIGFuZCB3aGV0aGVyIGl0IHRpZXMgYmFjayB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTc4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDIuNDQ1ODI4NzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzEzMjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9jZnMyX2luaXRfYWNsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz00MDE9dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDA2LVxcbmZzL29jZnMyL2FjbC5jOjQwNzppbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9vY2ZzMi9hY2wuYy00MDgtXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tLVxcbmZzL29jZnMyL2FjbC5oPTMyPXZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuZnMvb2NmczIvYWNsLmg6MzM6aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvYWNsLmgtMzQtXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cXG5mcy9vY2ZzMi9uYW1laS5jOjQxODpcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuZnMvb2NmczIvbmFtZWkuYy00MTktXFx0XFx0XFx0XFx0XFx1MDAyNmFjbF9zdGF0ZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTcyNjI9aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzI4NS1cXG5mcy9vY2ZzMi94YXR0ci5jOjcyODY6XFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzI4Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMzowMi41MTMxNDc5NTNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NzcwNDk2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKlRyYWNpbmcgdGhlIFNlY3VyaXR5IEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiBpbiBPQ0ZTMi4gVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGlzLCB3aGVyZSBleGFjdGx5IGRvZXMgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgZ2V0IGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgc3RhY2sgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgd2hhdCdzIHNldHRpbmcgdXAgdGhlIGVudmlyb25tZW50IGZvciBpdC4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9uIGlzIGtleSB0byBkZWJ1Z2dpbmcgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBzZWN1cml0eSBmZWF0dXJlcyBhcmUgaW50ZWdyYXRlZC4gUmlnaHQgbm93LCB0aGF0J3MgdGhlIGNlbnRyYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSdtIGFmdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTM5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDUuNTEwODU3OTY1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQyMjcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQyMzg9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cXHRpZiAoIXByZXNlcnZlKSB7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI5NzpcXHRcXHRlcnJvciA9IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChkaXIsIG5ld19vcnBoYW5faW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTcxODA9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjYxLSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzI2MjppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL3hhdHRyLmMtNzI2My1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaD04Mj1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oLTg2LVxcdFxcdFxcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcXG5mcy9vY2ZzMi94YXR0ci5oOjg3OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIveGF0dHIuaC04OC1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMzowNS41NzcyODgxNDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzExNTk4OTk1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWw6XG5cbioqRGlnZ2luZyBpbnRvIE9DRlMyIEludGVybmFsczogUmVmbGluayBhbmQgTWtub2QgQ2FsbHMqKlxuXG5SaWdodCwgc28gYG9jZnMyX3JlZmxpbmtgIGlzIGRlZmluaXRlbHkgYSBrZXkgcGxheWVyIGhlcmUsIHdoaWNoIG1ha2VzIG1lIHRoaW5rIHRoaXMgd2FycmFudHMgYSBkZWVwZXIgZGl2ZS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHdlIG5lZWQgdG8gZXhhbWluZSB3aGVyZSBlbHNlIGBvY2ZzMl9ta25vZGAgaXMgdXNlZC4gVGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIHN1c3BlY3RzIGluIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMsIEknZCB3YWdlciBpdCdzIGhlYXZpbHkgaW52b2x2ZWQgaW4gdGhlIGNvcmUgY3JlYXRpb24gcm91dGluZXMgLSB0aGluZ3MgbGlrZSBgbWtkaXJgLCBmaWxlIGBjcmVhdGVgLCBhbmQgYHN5bWxpbmtgLiBUaGF0J3Mgd2hlcmUgSSB3b3VsZCBzdGFydCBteSBpbnZlc3RpZ2F0aW9uLCBhbmQgd2hlcmUgdGhlIG1vc3QgaW50ZXJlc3RpbmcgaW5zaWdodHMgYXJlIGxpa2VseSB0byBsaWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDguNjkzMjgxMzc0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzE4NTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9ta25vZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvYWNsLmM9MzIxPWludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTM0OC0gKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcXG5mcy9vY2ZzMi9hY2wuYzozNDk6ICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxcbmZzL29jZnMyL2FjbC5jLTM1MC0gKi9cXG4tLVxcbmZzL29jZnMyL2Rpci5jPTIyMTI9c3RhdGljIHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKm9jZnMyX2ZpbGxfaW5pdGlhbF9kaXJlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9kaXIuYy0yMjM2LS8qXFxuZnMvb2NmczIvZGlyLmM6MjIzNzogKiBUaGlzIHdvcmtzIHRvZ2V0aGVyIHdpdGggY29kZSBpbiBvY2ZzMl9ta25vZF9sb2NrZWQoKSB3aGljaCBzZXRzXFxuZnMvb2NmczIvZGlyLmMtMjIzOC0gKiB0aGUgaW5saW5lLWRhdGEgZmxhZyBhbmQgaW5pdGlhbGl6ZXMgdGhlIGlubGluZS1kYXRhIHNlY3Rpb24uXFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxcbi0tXFxuZnMvb2NmczIvaW5vZGUuYy0zODctXFx0ICogVGhlc2UgaGF2ZSBhbGwgYmVlbiBjaGVja2VkIGJ5IG9jZnMyX3JlYWRfaW5vZGVfYmxvY2soKSBvciBzZXRcXG5mcy9vY2ZzMi9pbm9kZS5jOjM4ODpcXHQgKiBieSBvY2ZzMl9ta25vZF9sb2NrZWQoKSwgc28gYSBmYWlsdXJlIGlzIGEgY29kZSBidWcuXFxuZnMvb2NmczIvaW5vZGUuYy0zODktXFx0ICovXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmg9NDEzPXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2FkZF9kaXJfaW5kZXhfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5oLTQyMy0gKiBibG9ja3MgKyBxdW90YSB1cGRhdGUgKi9cXG5mcy9vY2ZzMi9qb3VybmFsLmg6NDI0OnN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpcixcXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDI1LVxcdFxcdFxcdFxcdCAgICAgIGludCB4YXR0cl9jcmVkaXRzKVxcbi0tXFxuZnMvb2NmczIvam91cm5hbC5oPTU0OT1zdGF0aWMgaW5saW5lIGludCBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL29jZnMyL2pvdXJuYWwuaC01NTAte1xcbmZzL29jZnMyL2pvdXJuYWwuaDo1NTE6XFx0aW50IGJsb2NrcyA9IG9jZnMyX21rbm9kX2NyZWRpdHMoc2IsIDAsIDApO1xcbmZzL29jZnMyL2pvdXJuYWwuaC01NTItXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTU1LVxcbmZzL29jZnMyL25hbWVpLmM6NTY6c3RhdGljIGludCBvY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuZnMvb2NmczIvbmFtZWkuYy01Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjE1PXN0YXRpYyB2b2lkIG9jZnMyX2NsZWFudXBfYWRkX2VudHJ5X2ZhaWx1cmUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTIyOS1cXG5mcy9vY2ZzMi9uYW1laS5jOjIzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL29jZnMyL25hbWVpLmMtMjMxLVxcdFxcdCAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjYwLVxcbmZzL29jZnMyL25hbWVpLmM6MjYxOlxcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNjItXFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTM2OC1cXG5mcy9vY2ZzMi9uYW1laS5jOjM2OTpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYixcXG5mcy9vY2ZzMi9uYW1laS5jLTM3MC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgU19JU0RJUihtb2RlKSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzg4LVxcdC8qIGRvIHRoZSByZWFsIHdvcmsgbm93LiAqL1xcbmZzL29jZnMyL25hbWVpLmM6Mzg5OlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsIGRldixcXG5mcy9vY2ZzMi9uYW1laS5jLTM5MC1cXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTUxNi1cXG5mcy9vY2ZzMi9uYW1laS5jOjUxNzpzdGF0aWMgaW50IF9fb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL25hbWVpLmMtNTE4LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTYyOC1cXG5mcy9vY2ZzMi9uYW1laS5jOjYyOTpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTYzMC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjUxLVxcbmZzL29jZnMyL25hbWVpLmM6NjUyOlxcdHJldHVybiBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLCBkZXYsIG5ld19mZV9iaCxcXG5mcy9vY2ZzMi9uYW1laS5jLTY1My1cXHRcXHRcXHRcXHQgICAgaGFuZGxlLCBpbm9kZV9hYywgZmVfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY1Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTY2NS1cXHRcXHRcXHQgIE9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xcbmZzL29jZnMyL25hbWVpLmM6NjY2OlxcdHJldCA9IG9jZnMyX21rbm9kKFxcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xcbmZzL29jZnMyL25hbWVpLmMtNjY3LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jPTY3Mz1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjgyLVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2ODM6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02ODQtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MTgxMz1zdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTUtXFxuZnMvb2NmczIvbmFtZWkuYzoxOTU2OlxcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0xOTU3LVxcdFxcdFxcdFxcdCAgICAwLCBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjUyMD1pbnQgb2NmczJfY3JlYXRlX2lub2RlX2luX29ycGhhbihzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU2MC1cXG5mcy9vY2ZzMi9uYW1laS5jOjI1NjE6XFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cXHUwMDNlc2IsIDAsIDApKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTI1NjItXFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODMtXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzoyNTg0OlxcdHN0YXR1cyA9IF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsXFxuZnMvb2NmczIvbmFtZWkuYy0yNTg1LVxcdFxcdFxcdFxcdCAgICAgIDAsIFxcdTAwMjZuZXdfZGlfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjkzMj1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjkzOS1cXHQubWtkaXJcXHRcXHQ9IG9jZnMyX21rZGlyLFxcbmZzL29jZnMyL25hbWVpLmM6Mjk0MDpcXHQubWtub2RcXHRcXHQ9IG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL25hbWVpLmMtMjk0MS1cXHQucmVuYW1lXFx0XFx0PSBvY2ZzMl9yZW5hbWUsXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIxOTc9REVGSU5FX09DRlMyX1BPSU5URVJfRVZFTlQob2NmczJfbG9va3VwX3JldCk7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMTk4LVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjE5OTpUUkFDRV9FVkVOVChvY2ZzMl9ta25vZCxcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIyMDAtXFx0VFBfUFJPVE8odm9pZCAqZGlyLCB2b2lkICpkZW50cnksIGludCBuYW1lX2xlbiwgY29uc3QgY2hhciAqbmFtZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MDguNzU2NDcyODQ5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyNjUwMDI0MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBPQ0ZTMiBGaWxlc3lzdGVtIE5vZGUgQ3JlYXRpb24gRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSB0cnlpbmcgdG8gc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBpbnRlcm5hbHMsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IGRpZmZlcmVudCB0eXBlcyBvZiBub2RlcyBhcmUgY3JlYXRlZC4gSW5pdGlhbGx5LCBJIHRob3VnaHQgdGhhdCBgb2NmczJfbWtub2RgIHdhcyB0aGUgcHJpbWFyeSBmdW5jdGlvbiB1c2VkIGFjcm9zcyB0aGUgYm9hcmQgZm9yIGNyZWF0aW5nIHZhcmlvdXMgbm9kZXMsIGNvdmVyaW5nIHRoaW5ncyBsaWtlIHJlZ3VsYXIgZmlsZXMgdGhyb3VnaCBgbWtub2RgLCBkaXJlY3RvcmllcyB3aXRoIGBta2RpcmAsIGFuZCBnZW5lcmFsIGZpbGUgY3JlYXRpb24gY2FsbHMuIE15IG1lbnRhbCBtb2RlbCBsaW5rZWQgaXQgZGlyZWN0bHkgdG8gdGhlc2Ugb3BlcmF0aW9ucy4gSG93ZXZlciwgSSBzZWVtIHRvIHJlY2FsbCB0aGF0IHN5bWxpbmtzIHByZXNlbnQgYSBzbGlnaHRseSBkaWZmZXJlbnQgYXBwcm9hY2guXG5cblRoZW4gSSBwYXVzZWQuIFRoZXJl4oCZcyBzb21ldGhpbmfigKYgb2ZmLiBJICp0aG91Z2h0KiBgb2NmczJfc3ltbGlua2AgdXRpbGl6ZWQgYG9jZnMyX21rbm9kX2xvY2tlZGAsIGJ1dCBub3cgSSdtIHF1ZXN0aW9uaW5nIHRoYXQuIEkgbmVlZCB0byBiZSBzdXJlLiBEb2VzIGl0IHVzZSBgb2NmczJfbWtub2RgIGF0IGFsbD8gT3IgcGVyaGFwcyBpdCBsZXZlcmFnZXMgYSByZWxhdGVkIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGxpa2UgYG9jZnMyX2luaXRfYWNsYD8gTWVtb3J5IGlzIGdldHRpbmcgZnV6enkgaGVyZS4gVGhlIG51YW5jZXMgb2YgdGhlIEFDTCBoYW5kbGluZyBhbmQgb3RoZXIgbWV0YWRhdGEgaW5pdGlhbGl6YXRpb24gYXJlIHdoYXQgSSBuZWVkIHRvIGZvY3VzIG9uLlxuXG5UaGUgb25seSB3YXkgdG8gZGVmaW5pdGl2ZWx5IGFuc3dlciB0aGlzIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCdzIGRlbHZlIGludG8gdGhlIGBvY2ZzMl9zeW1saW5rYCBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBjaGVjayBgZnMvb2NmczIvbmFtZWkuY2AgdG8gc2VlIGhvdyBzeW1saW5rIGNyZWF0aW9uIGlzIGFjdHVhbGx5IGhhbmRsZWQuIFRpbWUgdG8gYW5hbHl6ZSB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MTQuMDIxNDgwMzQ1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDI0OTgwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9pbml0X2FjbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9vY2ZzMi9uYW1laS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTQxNy1cXG5mcy9vY2ZzMi9uYW1laS5jOjQxODpcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuZnMvb2NmczIvbmFtZWkuYy00MTktXFx0XFx0XFx0XFx0XFx1MDAyNmFjbF9zdGF0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAzOjE0LjA4NTc0MDgwOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDE2MDU1NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgYG9jZnMyX3N5bWxpbmtgICpkb2Vzbid0KiB1c2UgYG9jZnMyX2luaXRfYWNsYCwgd2hpY2ggaXMgYSBiaXQgb2YgYSBkZXRhaWwgSSBoYWRuJ3QgY29uc2lkZXJlZCBiZWZvcmUuIEJ1dCB0aGUgbWFpbiB0aGluZyBoZXJlIGlzIHRoZSBtb2RpZmljYXRpb24gdG8gYG9jZnMyX21rbm9kYC4gUmlnaHQsIGBvY2ZzMl9ta25vZGAgaXMgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgKmV2ZXJ5dGhpbmcqIOKAkyBmaWxlcywgZGlyZWN0b3JpZXMsIHNwZWNpYWwgZmlsZXMsIHlvdSBuYW1lIGl0LlxuXG5TbywgdGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gb3JkZXIuIEl0J3MgY2FsbGluZyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgKmJlZm9yZSogYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgd2l0aGluIGBvY2ZzMl9ta25vZGAuIEFuZCB0aGVuLCBgb2NmczJfaW5pdF9hY2xgIGlzIGNhbGxlZCBsYXRlci4gQWRkaXRpb25hbGx5LCBpdCBsb29rcyBsaWtlIGl0IG1vZGlmaWVzIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCB3aGljaCBpcyB1c2VkIGluIGBvY2ZzMl9yZWZsaW5rYC5cblxuVGhpcyBpcyBzaWduaWZpY2FudC4gV2UncmUgdGFsa2luZyBhYm91dCBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIGNvcmUgZmlsZXN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IGhvdyBpbm9kZXMgYXJlIGNyZWF0ZWQgYW5kIGhvdyBBQ0xzIGFyZSBpbml0aWFsaXplZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlcXVpcmUgc29tZSBzZXJpb3VzIGZ1enppbmcuIFRoaXMgc2hvdWxkIGFic29sdXRlbHkgYmUgdHJlYXRlZCBhcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5MZXQncyBuYWlsIGRvd24gdGhlIGNyaXRpY2FsIHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbjogYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLlxuXG5BbHJpZ2h0LCBsZXQncyBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSByZWFjaGFiaWxpdHkgbmFpbGVkIGRvd24uIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBpcyByZWFjaGFibGUgLSB3ZSBjYW4gc2VlIHRoYXQgaXQncyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9ta25vZGAgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLCBzbyB0aGF0IGxvb2tzIGdvb2QuIEFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfcmVmbGlua194YXR0cnNgIGFuZCBgb2NmczJfcmVmbGlua2AuXG5cbk5vdywgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gT2J2aW91c2x5LCB3ZSBuZWVkIGBPQ0ZTMl9GU2AgZW5hYmxlZC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0aGF0J3MgaW5kaXJlY3RseSByZXF1aXJlZD8gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU3MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMTowMzoyMC41MDE4MDAwOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1MDk4NTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTI4PWNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbmZzL29jZnMyL0tjb25maWctMzEtXFx0ZGVmYXVsdCB5XFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnPTQyPWNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbmZzL29jZnMyL0tjb25maWc6NDQ6XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcXHUwMDI2XFx1MDAyNiBETE1cXG5mcy9vY2ZzMi9LY29uZmlnLTQ1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz01ND1jb25maWcgT0NGUzJfRlNfU1RBVFNcXG5mcy9vY2ZzMi9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIk9DRlMyIHN0YXRpc3RpY3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo1NjpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy01Ny1cXHRkZWZhdWx0IHlcXG4tLVxcbmZzL29jZnMyL0tjb25maWc9NjI9Y29uZmlnIE9DRlMyX0RFQlVHX01BU0tMT0dcXG5mcy9vY2ZzMi9LY29uZmlnLTYzLVxcdGJvb2wgXFxcIk9DRlMyIGxvZ2dpbmcgc3VwcG9ydFxcXCJcXG5mcy9vY2ZzMi9LY29uZmlnOjY0OlxcdGRlcGVuZHMgb24gT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTY1LVxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZz03Mj1jb25maWcgT0NGUzJfREVCVUdfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTczLVxcdGJvb2wgXFxcIk9DRlMyIGV4cGVuc2l2ZSBjaGVja3NcXFwiXFxuZnMvb2NmczIvS2NvbmZpZzo3NDpcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy03NS1cXHRkZWZhdWx0IG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTE6MDM6MjAuNTY2OTA0NzI5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNTg1MTA0MTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBBbmFseXNpcyBhbmQgRm9jdXMgU3ltYm9sIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgT0NGUzIgcGF0Y2guIEl0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaW5vZGUgY3JlYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIGFjcm9zcyB2YXJpb3VzIG9wZXJhdGlvbnMgbGlrZSBgbWtkaXJgLCBgbWtub2RgLCBgY3JlYXRlYCwgYW5kIHJlZmxpbmsuIEkgc2VlIHRoYXQgYE9DRlMyX0ZTYCBpcyB0aGUgcmVsZXZhbnQgY29uZmlnLiBTaW5jZSBpdCBjaGFuZ2VzIHRoZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZywgdGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgYWZmZWN0ZWQuIEkgc3RhcnRlZCB3aXRoIGBPQ0ZTMl9GU2AgYXMgdGhlIG92ZXJhcmNoaW5nIGNvbmZpZyB0byBjb25zaWRlci4gVGhlbiBJIG1vdmVkIHRvIHBpbnBvaW50aW5nIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHJlcHJlc2VudCB0aGUgY29yZSBvZiB0aGUgY2hhbmdlLiBgb2NmczJfbWtub2RgIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYXMgaXQncyB0aGUgVkZTIGVudHJ5IHBvaW50IGZvciBgbWtub2RgLiBPdGhlciByZWxldmFudCBmdW5jdGlvbnMgYXJlIGNhbGxlZCBieSBgb2NmczJfbWtub2RgLCBsaWtlIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIHdoaWNoIGNhbiBhbHNvIGxlYWQgdG8gQUNMIG9wZXJhdGlvbnMuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIHBhdGNoIGltcGFjdHMgYG9jZnMyX21rbm9kYCwgYG9jZnMyX21rZGlyYCwgYW5kIGBvY2ZzMl9jcmVhdGVgIHZpYSB0aGUgVkZTIGludGVyZmFjZSwgc28gaXQgbWFrZXMgc2Vuc2UgdG8gZm9jdXMgb24gdGhlIGNvbW1vbiBlbnRyeSBwb2ludCwgYG9jZnMyX21rbm9kYC5cblxuRnJvbSB0aGVyZSwgSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcnVjaWFsOiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9pbml0X2FjbGAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAuIEkgd2FudGVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2Ugc3ltYm9scyBhcmVuJ3Qgc3RhdGljLiBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgaXNuJ3Qgc3RhdGljLCBpdCdzIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlIGFuZCBleHBvc2VkLCB3aGljaCBpcyBwZXJmZWN0LiBUaGUgcmVzdCBvZiB0aGVtLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfY2FsY194YXR0cl9pbml0YCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGFyZSBub3Qgc3RhdGljIGVpdGhlciwgd2hpY2ggZnVydGhlciBjb25maXJtcyB0aGVpciBzaWduaWZpY2FuY2UuIEV2ZW4gdGhvdWdoIGBvY2ZzMl9ta25vZGAgaXMgc3RhdGljIHdpdGhpbiB0aGUgZmlsZSwgaXQncyBhc3NpZ25lZCB0byBhIFZGUyBvcGVyYXRpb24gc28gdGhpcyBpcyBwZXJmZWN0bHkgZmluZSBhcyB3ZWxsLlxuXG5CYXNlZCBvbiB0aGUgY29kZSwgdGhlc2UgZnVuY3Rpb25zIHRvZ2V0aGVyIHdpdGggdGhlIGBta25vZGAsIGBta2RpcmAgYW5kIGBjcmVhdGVgIHBhdGgsIGFyZSB0aGUgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyB0aGlzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBmdW5jdGlvbiB0byBwcmVwYXJlIEFDTHMgYmVmb3JlIHNwZWNpZmljIGxvY2sgYWNxdWlzaXRpb24gb3IgY2FsY3VsYXRpb25zIG9jY3VyLiBUaGlzIHN1Z2dlc3RzIGEgY2hhbmdlIGluIHRoZSBjcml0aWNhbCBwYXRoIGFuZCBsaWtlbHkgYSByZW9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuIEl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgZml4aW5nIGxvY2sgb3JkZXJpbmcgb3IgZGVhZGxvY2sgaXNzdWVzIHRoYXQgY2FuIGhhcHBlbiBkdXJpbmcgdGhlIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBpbm9kZXMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nLCBhbmQgd29ydGggbG9va2luZyBpbnRvIGZvciByZWdyZXNzaW9ucyBhbmQgbmV3IGRlYWRsb2Nrcy4gU28sIEkgd2lsbCBtYXJrIHRoaXMgY2hhbmdlIGFzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgcmVvcmRlcmluZyBpcyBjb3JyZWN0IGFuZCB0aGF0IHRoZSBBQ0xzIGFyZSBzdGlsbCBoYW5kbGVkIHByb3Blcmx5IGluIGFsbCBjYXNlcywgZXNwZWNpYWxseSB1bmRlciBjb25jdXJyZW50IGFjY2VzcyBhbmQgd2l0aCB2YXJ5aW5nIGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5OTYsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDExOjAzOjMzLjE1MjAxMzM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc1MTAyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfbWtub2RcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChlLmcuLCBta2RpciwgbWtub2QsIGNyZWF0ZSwgYW5kIHJlZmxpbmspLiBJdCBpbnRyb2R1Y2VzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCB0byBmZXRjaCBhbmQgcHJlcGFyZSBBQ0xzIGJlZm9yZSBjYWxjdWxhdGluZyB4YXR0ciBjcmVkaXRzLCBhbHRlcmluZyB0aGUgY29yZSBleGVjdXRpb24gZmxvdyBhbmQgbG9jayBvcmRlcmluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgbmV3IGRlYWRsb2NrcyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX21rbm9kXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlXCIsXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyIGR1cmluZyBpbm9kZSBjcmVhdGlvbiAoZS5nLiwgbWtkaXIsIG1rbm9kLCBjcmVhdGUsIGFuZCByZWZsaW5rKS4gSXQgaW50cm9kdWNlcyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgdG8gZmV0Y2ggYW5kIHByZXBhcmUgQUNMcyBiZWZvcmUgY2FsY3VsYXRpbmcgeGF0dHIgY3JlZGl0cywgYWx0ZXJpbmcgdGhlIGNvcmUgZXhlY3V0aW9uIGZsb3cgYW5kIGxvY2sgb3JkZXJpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIG5ldyBkZWFkbG9ja3MgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[1] Phase: Succeeded StartedAt: 2026-07-21 11:05:23 +0000 UTC FinishedAt: 2026-07-21 11:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 11:05:23 +0000 UTC FinishedAt: 2026-07-21 11:05:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2] Phase: Succeeded StartedAt: 2026-07-21 11:05:23 +0000 UTC FinishedAt: 2026-07-21 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 11:05:23 +0000 UTC FinishedAt: 2026-07-21 15:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 11:05:23 +0000 UTC FinishedAt: 2026-07-21 11:05:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 11:05:23 +0000 UTC FinishedAt: 2026-07-21 11:05:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow85lhd/series-workflow85lhd-convert-artifact-1784774480/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 11:05:33 +0000 UTC FinishedAt: 2026-07-21 11:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 11:05:33 +0000 UTC FinishedAt: 2026-07-21 11:46:51 +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:*7bce45ea-00e1-442a-9a1e-4525cef5ba87,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-workflow85lhd/series-workflow85lhd-convert-artifact-1784774480/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": "35050225-2627-40e9-943d-11bb62e98cea", "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-workflow85lhd/series-workflow85lhd-build-action-2899602902/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 11:05:33 +0000 UTC FinishedAt: 2026-07-21 11:46:41 +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:*7bce45ea-00e1-442a-9a1e-4525cef5ba87,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-workflow85lhd/series-workflow85lhd-convert-artifact-1784774480/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": "35050225-2627-40e9-943d-11bb62e98cea", "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-workflow85lhd/series-workflow85lhd-build-action-2899602902/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 11:46:51 +0000 UTC FinishedAt: 2026-07-21 11:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 11:46:51 +0000 UTC FinishedAt: 2026-07-21 11:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 11:46:51 +0000 UTC FinishedAt: 2026-07-21 11:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 11:46:51 +0000 UTC FinishedAt: 2026-07-21 11:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow85lhd/series-workflow85lhd-convert-artifact-3421114039/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 11:47:01 +0000 UTC FinishedAt: 2026-07-21 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 11:47:01 +0000 UTC FinishedAt: 2026-07-21 11:49:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35050225-2627-40e9-943d-11bb62e98cea,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-workflow85lhd/series-workflow85lhd-build-action-2899602902/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-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 11:49:12 +0000 UTC FinishedAt: 2026-07-21 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 11:49:12 +0000 UTC FinishedAt: 2026-07-21 11:49:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 11:49:12 +0000 UTC FinishedAt: 2026-07-21 12:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 11:49:12 +0000 UTC FinishedAt: 2026-07-21 12:23:30 +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:*7bce45ea-00e1-442a-9a1e-4525cef5ba87,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-workflow85lhd/series-workflow85lhd-convert-artifact-3421114039/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": "a443246b-0705-4ead-a6a2-00b4f8e56e28", "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-workflow85lhd/series-workflow85lhd-build-action-895315579/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 11:49:12 +0000 UTC FinishedAt: 2026-07-21 12:23:20 +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:*7bce45ea-00e1-442a-9a1e-4525cef5ba87,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-workflow85lhd/series-workflow85lhd-convert-artifact-3421114039/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": "a443246b-0705-4ead-a6a2-00b4f8e56e28", "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-workflow85lhd/series-workflow85lhd-build-action-895315579/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 12:23:30 +0000 UTC FinishedAt: 2026-07-21 12:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 12:23:30 +0000 UTC FinishedAt: 2026-07-21 12:23:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 12:23:30 +0000 UTC FinishedAt: 2026-07-21 12:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 12:23:30 +0000 UTC FinishedAt: 2026-07-21 12:25:41 +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:*a443246b-0705-4ead-a6a2-00b4f8e56e28,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-workflow85lhd/series-workflow85lhd-build-action-895315579/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-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 15:29:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"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:*35050225-2627-40e9-943d-11bb62e98cea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a443246b-0705-4ead-a6a2-00b4f8e56e28,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-workflow85lhd/series-workflow85lhd-build-action-2899602902/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-workflow85lhd/series-workflow85lhd-build-action-895315579/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 12:26:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 12:25:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"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-workflow85lhd/series-workflow85lhd-convert-artifact-1508788976/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 12:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 12:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 12:25:51 +0000 UTC FinishedAt: 2026-07-21 12:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 12:26:01 +0000 UTC FinishedAt: 2026-07-21 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow85lhd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["ocfs2_mknod","ocfs2_acl_init_prepare","ocfs2_init_acl","ocfs2_calc_xattr_init","ocfs2_init_security_and_acl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"f7f4f632-0e77-40cb-bdd2-c17fe0ba0aff","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 12:26:01 +0000 UTC FinishedAt: 2026-07-21 15:28:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35050225-2627-40e9-943d-11bb62e98cea,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a443246b-0705-4ead-a6a2-00b4f8e56e28,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-workflow85lhd/series-workflow85lhd-build-action-2899602902/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-workflow85lhd/series-workflow85lhd-build-action-895315579/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-workflow85lhd/series-workflow85lhd-convert-artifact-1508788976/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,}