Name: series-workflowd88h5 Phase: Succeeded StartedAt: 2026-07-27 12:04:58 +0000 UTC FinishedAt: 2026-07-27 16:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[0] Phase: Succeeded StartedAt: 2026-07-27 12:04:58 +0000 UTC FinishedAt: 2026-07-27 12:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 12:04:58 +0000 UTC FinishedAt: 2026-07-27 12:33:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "741c36f8-3725-4dcd-a5a2-46b216e94cfb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_init_acl", "ocfs2_acl_init_prepare", "ocfs2_acl_init_release", "ocfs2_calc_xattr_init", "ocfs2_xattr_set_handle", "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVlMGY5ZWJmYmQ1MDgxYWM2ODAwNzc0NTA2ZTdhMjM4OWE2OGUzODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjozMTo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMDkwZWM2MGZiNTc2YTYgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCAmIzQzOzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gb2NmczJfYWNsO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0ICAgICAgaW50IHR5cGUsXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcbiB7XG4gXHRpbnQgbmFtZV9pbmRleDtcbkBAIC0zNDksNjMgJiM0MzszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG4gICovXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuJiM0Mzt2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcbi1cdGludCByZXQgPSAwLCByZXQyO1xuLVx0dW1vZGVfdCBtb2RlO1xuLVxuLVx0aWYgKCFTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbi1cdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCxcbi1cdFx0XHRcdFx0XHQgICBkaXJfYmgpO1xuLVx0XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0aWYgKElTX0VSUihhY2wpKVxuLVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID1cbiYjNDM7XHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0aWYgKCFhY2wpIHtcbi1cdFx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlIFx1MDAyNiB+Y3VycmVudF91bWFzaygpO1xuLVx0XHRcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0bWxvZ19lcnJubyhyZXQpO1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRpZiAoIXN0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2c3RhdGUtXHUwMDNlYWNsLCBHRlBfTk9GUyxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNnN0YXRlLVx1MDAzZW1vZGUpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbiYjNDM7XHRcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHR9XG4tXHRpZiAoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcdTAwMjZcdTAwMjYgYWNsKSB7XG4tXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShzdGF0ZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4gXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbi1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcbi1cdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgZGF0YV9hYyk7XG4gXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4tXHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZhY2wsIEdGUF9OT0ZTLCBcdTAwMjZtb2RlKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdGlmIChyZXQyKSB7XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQyKTtcbi1cdFx0XHRyZXQgPSByZXQyO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcbi1cdFx0XHRcdFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cdTAwM2Vtb2RlKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtbG9nX2Vycm5vKHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cdTAwM2VhY2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4gXHRcdH1cbiBcdH1cbi1jbGVhbnVwOlxuLVx0cG9zaXhfYWNsX3JlbGVhc2UoYWNsKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Zi4uYTkxZjljZTI3OGQ2ZDMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmhcbkBAIC0yMCw5ICYjNDM7MjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbiYjNDM7c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSB7XG4mIzQzO1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7XG4mIzQzO1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuJiM0MztcdHVtb2RlX3QgbW9kZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuJiM0Mzt2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZWEzN2E1MDU4MDg5MGMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0c2lnc2V0X3Qgb2xkc2V0O1xuIFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTMzMCwxMCAmIzQzOzMzMSwxNCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gbGVhdmU7XG4mIzQzO1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggJiM0Mzs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgbWV0YV9hYywgZGF0YV9hYyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuJiM0MztcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZGQuLjg2ZjAyOTM2ODFmY2NmIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuJiM0MztpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4tXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0ICBpbnQgKnhhdHRyX2NyZWRpdHMsXG4tXHRcdFx0ICBpbnQgKndhbnRfbWV0YSlcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICYjNDM7NjI1LDE1IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICBzaS1cdTAwM2V2YWx1ZV9sZW4pO1xuIFxuIFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0YWNsX2xlbiA9IG9jZnMyX3hhdHRyX2dldF9ub2xvY2soZGlyLCBkaXJfYmgsXG4tXHRcdFx0XHRcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULFxuLVx0XHRcdFx0XHRcJiMzNDtcJiMzNDssIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0YV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0YV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC02ODMsMTQgJiM0Mzs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4gXHR9XG4tXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbi1cdFx0LyogZm9yIGRpcmVjdG9yeSwgaXQgaGFzIERFRkFVTFQgYW5kIEFDQ0VTUyB0d28gdHlwZXMgb2YgYWNscyAqL1xuLVx0XHRuZXdfY2x1c3RlcnMgPSAoU19JU0RJUihtb2RlKSA/IDIgOiAxKSAqXG4tXHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsIGFjbF9sZW4pO1xuLVx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuLVx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbi1cdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4mIzQzO1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbiYjNDM7XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuJiM0MztcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0IGFjbF9sZW4pO1xuJiM0MztcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PVxuJiM0MztcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4mIzQzO1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0zNDgzLDkgJiM0MzszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gfVxuIFxuIC8qXG4tICogVGhpcyBmdW5jdGlvbiBvbmx5IGNhbGxlZCBkdWluZyBjcmVhdGluZyBpbm9kZVxuLSAqIGZvciBpbml0IHNlY3VyaXR5L2FjbCB4YXR0cnMgb2YgdGhlIG5ldyBpbm9kZS5cbi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLlxuJiM0MzsgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxuJiM0MzsgKiB0aGF0IGlzIHN0aWxsIHVucHVibGlzaGVkLCB1bmhhc2hlZCwgYW5kIHVuYXR0YWNoZWQgdG8gYSBkZW50cnkuXG4mIzQzOyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuXG4mIzQzOyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXG4gICovXG4gaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuQEAgLTM1NDIsOCAmIzQzOzM1NTUsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0eGlzLmlub2RlX2JoID0geGJzLmlub2RlX2JoID0gZGlfYmg7XG4gXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXHUwMDNlYl9kYXRhO1xuIFxuLVx0ZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVxuIFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXHUwMDI2eGlzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gY2xlYW51cDtcbkBAIC0zNTU2LDcgJiM0MzszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdHJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksIFx1MDAyNnhpLCBcdTAwMjZ4aXMsIFx1MDAyNnhicywgXHUwMDI2Y3R4dCk7XG4gXG4gY2xlYW51cDpcbi1cdHVwX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4gXHRicmVsc2UoeGJzLnhhdHRyX2JoKTtcbiBcdG9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHhicy5idWNrZXQpO1xuIFxuQEAgLTcyNTcsNiAmIzQzOzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjY5LDEwICYjNDM7NzI4MCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgJiM0Mzs1NSwxMiBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcbiBcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4gXHRcdFx0ICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTtcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4tXHRcdFx0ICBpbnQgKiwgaW50ICosIGludCAqKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSk7XG4gXG4gLypcbiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaykuIEl0IGNoYW5nZXMgaG93IEFDTHMgYXJlIGZldGNoZWQsIGR1cGxpY2F0ZWQsIGFuZCBzZXQsIGFuZCBtb2RpZmllcyB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgeGF0dHIgc2V0dGluZy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZTBmOWViZmJkNTA4MWFjNjgwMDc3NDUwNmU3YTIzODlhNjhlMzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMTI6MzE6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGFmMWUyY2VkYjIxN2YxLi4wOTBlYzYwZmI1NzZhNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gb2NmczJfYWNsOwogfQogCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICAgaW50IHR5cGUsCiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewogCWludCBuYW1lX2luZGV4OwpAQCAtMzQ5LDYzICYjNDM7MzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCwKICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC4KICAqLwotaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKLQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPSBOVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQl1bW9kZV90IG1vZGU7Ci0KLQlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDttb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKJiM0MzsKJiM0MzsJaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPQomIzQzOwkJCW9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlpZiAoSVNfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWlmICghYWNsKSB7Ci0JCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyB+Y3VycmVudF91bWFzaygpOwotCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKSB7CiYjNDM7CQkJc3RhdGUtJmd0O2FjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKTsKJiM0MzsJCQlpZiAoIXN0YXRlLSZndDthY2wpIHsKJiM0MzsJCQkJcmV0ID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiYjNDM7CQkJcmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKCZhbXA7c3RhdGUtJmd0O2FjbCwgR0ZQX05PRlMsCiYjNDM7CQkJCQkJICZhbXA7c3RhdGUtJmd0O21vZGUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQkJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdGF0ZS0mZ3Q7bW9kZSAmYW1wOz0gfmN1cnJlbnRfdW1hc2soKTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhdGUtJmd0O21vZGUgJmFtcDs9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQotCWlmICgob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpICZhbXA7JmFtcDsgYWNsKSB7Ci0JCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2NsZWFudXA6CiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpIHsKIAkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCi0JCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsCi0JCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULAomIzQzOwkJCQkJICAgIHN0YXRlLSZndDtkZWZhdWx0X2FjbCwgbWV0YV9hYywKJiM0MzsJCQkJCSAgICBkYXRhX2FjKTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlOwotCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDthY2wsIEdGUF9OT0ZTLCAmYW1wO21vZGUpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCQlyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJaWYgKHJldDIpIHsKLQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCWlmIChyZXQgJmd0OyAwKSB7Ci0JCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsCi0JCQkJCSAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1sb2dfZXJybm8ocmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS0mZ3Q7YWNsLAomIzQzOwkJCQkJICAgIG1ldGFfYWMsIGRhdGFfYWMpOwogCQl9CiAJfQotY2xlYW51cDoKLQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmgKQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpOwogaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgewomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwomIzQzOwl1bW9kZV90IG1vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKJiM0MzsJCQkgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwogCiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDJkLi5lYTM3YTUwNTgwODkwYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yNTYsNiAmIzQzOzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJc2lnc2V0X3Qgb2xkc2V0OwogCWludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07CiAKIAl0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LSZndDtkX25hbWUubGVuLCBkZW50cnktJmd0O2RfbmFtZS5uYW1lLAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0mZ3Q7aXBfYmxrbm8sCkBAIC0zMzAsMTAgJiM0MzszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJfQogCX0KIAomIzQzOwlzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgJmFtcDthY2xfc3RhdGUpOwomIzQzOwlpZiAoc3RhdHVzICZsdDsgMCkKJiM0MzsJCWdvdG8gbGVhdmU7CiYjNDM7CiAJLyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovCi0Jc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgcGFyZW50X2ZlX2JoLCBtb2RlLAotCQkJCSAgICAgICAmYW1wO3NpLCAmYW1wO3dhbnRfY2x1c3RlcnMsCi0JCQkJICAgICAgICZhbXA7eGF0dHJfY3JlZGl0cywgJmFtcDt3YW50X21ldGEpOwomIzQzOwlzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCAmYW1wO3NpLCAmYW1wO3dhbnRfY2x1c3RlcnMsCiYjNDM7CQkJCSAgICAgICAmYW1wO3hhdHRyX2NyZWRpdHMsICZhbXA7d2FudF9tZXRhLAomIzQzOwkJCQkgICAgICAgJmFtcDthY2xfc3RhdGUpOwogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQxMSw4ICYjNDM7NDE2LDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLAomIzQzOwkJCQkmYW1wO2FjbF9zdGF0ZSk7CiAKIAlpZiAoc3RhdHVzICZsdDsgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NzcsNiAmIzQzOzQ4Miw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAJa2ZyZWUoc2kudmFsdWUpOwogCiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwomIzQzOwogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmFtcDtsb29rdXApOwogCiAJaWYgKGlub2RlX2FjKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggZmNkZGQzYzEzYWNkZGQuLjg2ZjAyOTM2ODFmY2NmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDMzIEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJaWYgKGFjbF9zdGF0ZS0mZ3Q7YWNsKSB7CiYjNDM7CQkJYWNsX2xlbiA9IGFjbF9zdGF0ZS0mZ3Q7YWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNDgzLDkgJiM0MzszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FsbGVkIGR1aW5nIGNyZWF0aW5nIGlub2RlCi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuCi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLgomIzQzOyAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlCiYjNDM7ICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LgomIzQzOyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuCiYjNDM7ICogQWxsIHRyYW5zYWN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kIG9yIHN5bWxpbmsgY2FsbGVycy4KICAqLwogaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC0zNTQyLDggJiM0MzszNTU1LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAl4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDsKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtJmd0O2JfZGF0YTsKIAotCWRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQogCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsICZhbXA7eGlzKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXA7CkBAIC0zNTU2LDcgJiM0MzszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCAmYW1wO3hpLCAmYW1wO3hpcywgJmFtcDt4YnMsICZhbXA7Y3R4dCk7CiAKIGNsZWFudXA6Ci0JdXBfd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKIAlicmVsc2UoeGJzLnhhdHRyX2JoKTsKIAlvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTsKIApAQCAtNzI1Nyw2ICYjNDM7NzI2Nyw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9OwogCiAJcmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7CiAJaWYgKHJldCkgewpAQCAtNzI2OSwxMCAmIzQzOzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgJmFtcDthY2xfc3RhdGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCAmYW1wO2FjbF9zdGF0ZSk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiYjNDM7dW5sb2NrOgomIzQzOwlvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKCZhbXA7YWNsX3N0YXRlKTsKIAlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTsKIAlicmVsc2UoZGlyX2JoKTsKIGxlYXZlOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmgKaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTU1LDkgJiM0Mzs1NSwxMiBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosCiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLAogCQkJICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTsKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLAotCQkJICBpbnQgKiwgaW50ICosIGludCAqKTsKJiM0MzsKJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlOwomIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKJiM0MzsJCQkgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSwKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSk7CiAKIC8qCiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTgwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9DRlMyIEFDTCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgT0NGUzIsIGFuZCBpdCBzZWVtcyBsaWtlIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSB0byBBQ0wgaW5pdGlhbGl6YXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCByZXN0cnVjdHVyaW5nIGhvdyBBQ0xzIGFyZSBoYW5kbGVkLCB3aXRoIG5ldyBmdW5jdGlvbnMgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGUgZmFjdCB0aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIG5vdyB0YWtpbmcgYW4gYG9jZnMyX2FjbF9zdGF0ZWAgaW5zdGVhZCBvZiBhIGBidWZmZXJfaGVhZGAgaW5kaWNhdGVzIGEgc2hpZnQgaW4gaG93IEFDTCBkYXRhIGlzIG1hbmFnZWQgZHVyaW5nIHhhdHRyIGNhbGN1bGF0aW9ucy4gQW5kIHRoYXQgYGRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKWAgY2FsbCBpcyBnb25lIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBldmVuIHNvbWV0aGluZyB0aGF0JiMzOTtzIHByYWN0aWNhbGx5IGZ1enphYmxlLiBPQ0ZTMiBpcyBhIGZpbGVzeXN0ZW0sIHNvIHllYWgsIGFic29sdXRlbHkgaXQgaXMuIEkgY2FuIHNldCB1cCBhIGxvb3BiYWNrIGRldmljZSBvciBzb21ldGhpbmcgc2ltaWxhciwgbW91bnQgaXQsIGFuZCBzdGFydCB0aHJvd2luZyB0aGluZ3MgYXQgaXQuIFRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSB0aGVyZS4KCkxldCBtZSBzZWUsIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBmb3IgT0NGUzI/IENsZWFybHksIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBiYXNlLCBidXQgc2luY2UgdGhpcyBwYXRjaCB0b3VjaGVzIEFDTHMsIGBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMYCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIHRoZW4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvb2NmczIvS2NvbmZpZzoyOmNvbmZpZyBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctMjctXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy00MS1cbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxuZnMvb2NmczIvS2NvbmZpZzo1NDpjb25maWcgT0NGUzJfRlNfU1RBVFNcbmZzL29jZnMyL0tjb25maWctNTUtXHRib29sIFwmIzM0O09DRlMyIHN0YXRpc3RpY3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIGluIGBmcy9vY2ZzMi9LY29uZmlnYCoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgc29tZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgYGZzL29jZnMyL0tjb25maWdgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhbG1vc3QgY2VydGFpbmx5IHdoZXJlIHRoZSBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIGZvciBPQ0ZTMi4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkICphbHdheXMqIGJlZ2luIHdoZW4gZGlnZ2luZyBpbnRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZXhwbGljaXRseSBzdGF0ZWQsIG9yIGlmIEkgd2lsbCBoYXZlIHRvIGRvIGEgZGVlcGVyIGRpZyBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE9DRlMyX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgSkJEMlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgUVVPVEFcbiAgIDk6XHRcdHNlbGVjdCBRVU9UQV9UUkVFXG4gIDEwOlx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDExOlx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlXG4gIDE0Olx0XHQgIHN5c3RlbSB3aXRoIG1hbnkgc2ltaWxhcml0aWVzIHRvIGV4dDMuIEl0IHN1cHBvcnRzIDY0IGJpdCBpbm9kZVxuICAxNTpcdFx0ICBudW1iZXJzLCBhbmQgaGFzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kaW5nIG1ldGFkYXRhIGdyb3VwcyB3aGljaCBtYXlcbiAgMTY6XHRcdCAgYWxzbyBtYWtlIGl0IGF0dHJhY3RpdmUgZm9yIG5vbi1jbHVzdGVyZWQgdXNlLlxuICAxNzpcdFxuICAxODpcdFx0ICBZb3UmIzM5O2xsIHdhbnQgdG8gaW5zdGFsbCB0aGUgb2NmczItdG9vbHMgcGFja2FnZSBpbiBvcmRlciB0byBhdCBsZWFzdFxuICAxOTpcdFx0ICBnZXQgXCYjMzQ7bW91bnQub2NmczJcJiMzNDsuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIFByb2plY3Qgd2ViIHBhZ2U6ICAgIGh0dHBzOi8vb2NmczIud2lraS5rZXJuZWwub3JnL1xuICAyMjpcdFx0ICBUb29scyB3ZWIgcGFnZTogICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFya2Zhc2hlaC9vY2ZzMi10b29sc1xuICAyMzpcdFx0ICBPQ0ZTMiBtYWlsaW5nIGxpc3RzOiBodHRwczovL3N1YnNwYWNlLmtlcm5lbC5vcmcvbGlzdHMubGludXguZGV2Lmh0bWxcbiAgMjQ6XHRcbiAgMjU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gT0NGUzIsIHNlZSB0aGUgZmlsZVxuICAyNjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIucnN0XHUwMDNlLlxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBPQ0ZTMl9GU19PMkNCXG4gIDI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gT0NGUzJfRlNcbiAgMzE6XHRcdGRlZmF1bHQgeVxuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBPQ0ZTMiBpbmNsdWRlcyBhIHNpbXBsZSBrZXJuZWxzcGFjZSBjbHVzdGVyaW5nIHBhY2thZ2UsIHRoZSBPQ0ZTMlxuICAzNDpcdFx0ICBDbHVzdGVyIEJhc2UuICBJdCBvbmx5IHJlcXVpcmVzIGEgdmVyeSBzbWFsbCB1c2Vyc3BhY2UgY29tcG9uZW50XG4gIDM1Olx0XHQgIHRvIGNvbmZpZ3VyZSBpdC4gVGhpcyBjb21lcyB3aXRoIHRoZSBzdGFuZGFyZCBvY2ZzMi10b29scyBwYWNrYWdlLlxuICAzNjpcdFx0ICBPMkNCIGlzIGxpbWl0ZWQgdG8gbWFpbnRhaW5pbmcgYSBjbHVzdGVyIGZvciBPQ0ZTMiBmaWxlIHN5c3RlbXMuXG4gIDM3Olx0XHQgIEl0IGNhbm5vdCBtYW5hZ2UgYW55IG90aGVyIGNsdXN0ZXIgYXBwbGljYXRpb25zLlxuICAzODpcdFxuICAzOTpcdFx0ICBJdCBpcyBhbHdheXMgc2FmZSB0byBzYXkgWSBoZXJlLCBhcyB0aGUgY2x1c3RlcmluZyBtZXRob2QgaXNcbiAgNDA6XHRcdCAgcnVuLXRpbWUgc2VsZWN0YWJsZS5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbiAgNDM6XHRcdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFx1MDAyNlx1MDAyNiBETE1cbiAgNDU6XHRcdGRlZmF1bHQgeVxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIG9wdGlvbiB3aWxsIGFsbG93IE9DRlMyIHRvIHVzZSB1c2Vyc3BhY2UgY2x1c3RlcmluZyBzZXJ2aWNlc1xuICA0ODpcdFx0ICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBETE0gaW4gZnMvZGxtLiAgSWYgeW91IGFyZSB1c2luZyBhXG4gIDQ5Olx0XHQgIHVzZXJzcGFjZSBjbHVzdGVyIG1hbmFnZXIsIHNheSBZIGhlcmUuXG4gIDUwOlx0XG4gIDUxOlx0XHQgIEl0IGlzIHNhZmUgdG8gc2F5IFksIGFzIHRoZSBjbHVzdGVyaW5nIG1ldGhvZCBpcyBydW4tdGltZVxuICA1MjpcdFx0ICBzZWxlY3RhYmxlLlxuICA1MzpcdFxuICA1NDpcdGNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuICA1NTpcdFx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4gIDU2Olx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuICA1NzpcdFx0ZGVmYXVsdCB5XG4gIDU4Olx0XHRoZWxwXG4gIDU5Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyBzb21lIGZzIHN0YXRpc3RpY3MgdG8gYmUgY2FwdHVyZWQuIEVuYWJsaW5nXG4gIDYwOlx0XHQgIHRoaXMgb3B0aW9uIG1heSBpbmNyZWFzZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBPQ0ZTMl9ERUJVR19NQVNLTE9HXG4gIDYzOlx0XHRib29sIFwmIzM0O09DRlMyIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuICA2NDpcdFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuICA2NTpcdFx0ZGVmYXVsdCB5XG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIFRoZSBvY2ZzMiBmaWxlc3lzdGVtIGhhcyBhbiBleHRlbnNpdmUgbG9nZ2luZyBzeXN0ZW0uICBUaGUgc3lzdGVtXG4gIDY4Olx0XHQgIGFsbG93cyBzZWxlY3Rpb24gb2YgZXZlbnRzIHRvIGxvZyB2aWEgZmlsZXMgaW4gL3N5cy9vMmNiL2xvZ21hc2svLlxuICA2OTpcdFx0ICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwsIGJ1dCBpdCBhbGxvd3MgZGVidWdnaW5nIG9mXG4gIDcwOlx0XHQgIG9jZnMyIGZpbGVzeXN0ZW0gaXNzdWVzLlxuICA3MTpcdFxuICA3MjpcdGNvbmZpZyBPQ0ZTMl9ERUJVR19GU1xuICA3MzpcdFx0Ym9vbCBcJiMzNDtPQ0ZTMiBleHBlbnNpdmUgY2hlY2tzXCYjMzQ7XG4gIDc0Olx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG4gIDc1Olx0XHRkZWZhdWx0IG5cbiAgNzY6XHRcdGhlbHBcbiAgNzc6XHRcdCAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZXhwZW5zaXZlIGNvbnNpc3RlbmN5IGNoZWNrcy4gRW5hYmxlXG4gIDc4Olx0XHQgIHRoaXMgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgb25seSBhcyBpdCBpcyBsaWtlbHkgdG8gZGVjcmVhc2VcbiAgNzk6XHRcdCAgcGVyZm9ybWFuY2Ugb2YgdGhlIGZpbGVzeXN0ZW0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrIGZvciBPQ0ZTMioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IE9DRlMyX0ZTIGlzIHNldCB1cCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgZGlyZWN0bHkgZGVwZW5kcyBvbiBJTkVULCBTWVNGUywgYW5kIENPTkZJR0ZTX0ZTLiBJdCYjMzk7cyBhbHNvIHNlbGVjdGluZyBGU19QT1NJWF9BQ0wsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhpcyBtZWFucywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCwgSSByZWFsbHkgbmVlZCB0byB2ZXJpZnkgT0NGUzJfRlMsIElORVQsIFNZU0ZTLCBhbmQgQ09ORklHRlNfRlMgYXJlIGFsbCB0b2dnbGVkIG9uLgoKV2FpdCBhIHNlY29uZCwgSU5FVCBhbmQgU1lTRlMgYXJlIHVzdWFsbHkgZGVmYXVsdCBzZXR0aW5ncywgc28gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtIHRvbyBtdWNoIHJpZ2h0IG5vdy4gQ09ORklHRlNfRlMgbWlnaHQgYmUgdGhlIHN0aWNraW5nIHBvaW50LCB0aG91Z2guIFNvLCBteSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB2ZXJpZnlpbmcgT0NGUzJfRlMgYW5kIENPTkZJR0ZTX0ZTIGFyZSBlbmFibGVkIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBhbmQgZnVuY3Rpb25hbCBPQ0ZTMiBzZXR1cC4KCk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gY29yZSBmdW5jdGlvbmFsaXR5LCBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IGEgbGlzdCBvZiBPQ0ZTMiBmdW5jdGlvbnMuIEkgd2lsbCBmb2N1cyBvbjogYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlc2Ugc2VlbSBjcnVjaWFsIGZvciBmaWxlIGNyZWF0aW9uLCBBQ0wgaGFuZGxpbmcsIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbS4KCkxldCYjMzk7cyBzZWUgaWYgYG9jZnMyX21rbm9kYCBpcyByZWFjaGFibGUuIEl0IHNob3VsZCBiZSwgc2luY2UgaXQmIzM5O3MgYSBzdGFuZGFyZCBpbm9kZSBvcGVyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvIGNoZWNrIG15IGFzc3VtcHRpb25zLiBUaGVuLCBJIHNlZSBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfc3ltbGlua2AuIExldCYjMzk7cyBzZWUgaWYgYG9jZnMyX3N5bWxpbmtgIGlzIGNhbGxlZCBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYC4gSSB3aWxsIHZlcmlmeSBieSBjaGVja2luZyB0aGF0IHBhcnRpY3VsYXIgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XHRcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTcxODI9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI2My0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzI2NDppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIveGF0dHIuYy03MjY1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTgzPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTg3LVx0XHRcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcbmZzL29jZnMyL3hhdHRyLmg6ODg6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmgtODktXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKk9DRlMyIFNlY3VyaXR5IENvbnRleHQgRHVyaW5nIFJlZmxpbmtpbmcgYW5kIFN5bWxpbmsgQ3JlYXRpb24qKgoKUmlnaHQsIHNvIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYG9jZnMyX3JlZmxpbmtgIHBhdGguIE1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRvIHByb3BhZ2F0ZSBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBBQ0xzIGR1cmluZyBhIHJlZmxpbmsgb3BlcmF0aW9uLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGFib3V0IHN5bWJvbGljIGxpbmtzPyBBcmUgc2VjdXJpdHkgY29udGV4dCBhbmQgQUNMcyBoYW5kbGVkIGNvbnNpc3RlbnRseSBmb3IgKnRob3NlKiB0eXBlcyBvZiBsaW5rcz8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuIExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBvY2ZzMl9zeW1saW5rYCBhbHNvIGNhbGxzIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhhdCBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIEl0JiMzOTtzIGEga2V5IGFyZWEgdG8gY2hlY2sgZm9yIGNvbnNpc3RlbnQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaWYgdGhpcyBzdGVwIGlzIG1pc3Npbmcgb3IgaW1wcm9wZXJseSBpbXBsZW1lbnRlZC4gTWFraW5nIGEgbWVudGFsIG5vdGUgdG8gY29uZmlybSBgb2NmczJfc3ltbGlua2AgY2FsbHMgdGhlIHNlY3VyaXR5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3N5bWxpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYW9wcy5jLTQxLVxuZnMvb2NmczIvYW9wcy5jOjQyOnN0YXRpYyBpbnQgb2NmczJfc3ltbGlua19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuZnMvb2NmczIvYW9wcy5jLTQzLVx0XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4tLVxuZnMvb2NmczIvYW9wcy5jLTUxLVxuZnMvb2NmczIvYW9wcy5jOjUyOlx0dHJhY2Vfb2NmczJfc3ltbGlua19nZXRfYmxvY2soXG5mcy9vY2ZzMi9hb3BzLmMtNTMtXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF9ibGtubyxcbi0tXG5mcy9vY2ZzMi9hb3BzLmM9MTI5PWludCBvY2ZzMl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuLS1cbmZzL29jZnMyL2FvcHMuYy0xNDYtXHRcdC8qIHRoaXMgYWx3YXlzIGRvZXMgSS9PIGZvciBzb21lIHJlYXNvbi4gKi9cbmZzL29jZnMyL2FvcHMuYzoxNDc6XHRcdGVyciA9IG9jZnMyX3N5bWxpbmtfZ2V0X2Jsb2NrKGlub2RlLCBpYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbmZzL29jZnMyL2FvcHMuYy0xNDgtXHRcdGdvdG8gYmFpbDtcbi0tXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxuLS1cbmZzL29jZnMyL2lub2RlLmMtNDY5LVx0ICAgIGNhc2UgU19JRkxOSzpcbmZzL29jZnMyL2lub2RlLmM6NDcwOlx0XHQgICAgaW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL29jZnMyL2lub2RlLmMtNDcxLVx0XHQgICAgaW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTE3MTY9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTgxMy1cbmZzL29jZnMyL25hbWVpLmM6MTgxNDpzdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9vY2ZzMi9uYW1laS5jLTE4MTUtXHRcdFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTg0My1cbmZzL29jZnMyL25hbWVpLmM6MTg0NDpcdHRyYWNlX29jZnMyX3N5bWxpbmtfYmVnaW4oZGlyLCBkZW50cnksIHN5bW5hbWUsXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDUtXHRcdFx0XHQgIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpO1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMTk1MS1cbmZzL29jZnMyL25hbWVpLmM6MTk1MjpcdHRyYWNlX29jZnMyX3N5bWxpbmtfY3JlYXRlKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbixcbmZzL29jZnMyL25hbWVpLmMtMTk1My1cdFx0XHRcdCAgIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjctXHRuZXdzaXplID0gbCAtIDE7XG5mcy9vY2ZzMi9uYW1laS5jOjE5Njg6XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvb2NmczIvbmFtZWkuYy0xOTY5LVx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI5MzM9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZGlyX2lvcHMgPSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yOTM4LVx0LnJtZGlyXHRcdD0gb2NmczJfdW5saW5rLFxuZnMvb2NmczIvbmFtZWkuYzoyOTM5Olx0LnN5bWxpbmtcdD0gb2NmczJfc3ltbGluayxcbmZzL29jZnMyL25hbWVpLmMtMjk0MC1cdC5ta2Rpclx0XHQ9IG9jZnMyX21rZGlyLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MTE0Nz1ERUZJTkVfRVZFTlQob2NmczJfX2dldF9ibG9jaywgbmFtZSxcdFxcXG4tLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xMTUxLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxMTUyOkRFRklORV9PQ0ZTMl9HRVRfQkxPQ0tfRVZFTlQob2NmczJfc3ltbGlua19nZXRfYmxvY2spO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xMTUzLVxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5MT1ERUZJTkVfT0NGUzJfREVOVFJZX09QUyhvY2ZzMl91bmxpbmspO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMTkyLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTkzOkRFRklORV9PQ0ZTMl9ERU5UUllfT1BTKG9jZnMyX3N5bWxpbmtfY3JlYXRlKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjE5NC1cbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIzMjU9REVGSU5FX09DRlMyX1VMTF9VTExfVUlOVF9FVkVOVChvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjMyNi1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjMyNzpUUkFDRV9FVkVOVChvY2ZzMl9zeW1saW5rX2JlZ2luLFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMzI4LVx0VFBfUFJPVE8odm9pZCAqZGlyLCB2b2lkICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXG4tLVxuZnMvb2NmczIvc3ltbGluay5jPTgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfZmFzdF9zeW1saW5rX2FvcHMgPSB7XG4tLVxuZnMvb2NmczIvc3ltbGluay5jLTgzLVxuZnMvb2NmczIvc3ltbGluay5jOjg0OmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL29jZnMyL3N5bWxpbmsuYy04NS1cdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuLS1cbmZzL29jZnMyL3N5bWxpbmsuaC0xMi1cbmZzL29jZnMyL3N5bWxpbmsuaDoxMzpleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvb2NmczIvc3ltbGluay5oLTE0LWV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9jZnMyX2Zhc3Rfc3ltbGlua19hb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYG9jZnMyX3N5bWxpbmtgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBtZW50aW9uIG9mIGBmcy9vY2ZzMi9uYW1laS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmUgMTgxNCB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGxvb2tpbmcgYXQgdGhlIGBvY2ZzMl9zeW1saW5rYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0gY29kZS4gVGhhdCYjMzk7cyB3aGVyZSBzeW1ib2xpYyBsaW5rIGNyZWF0aW9uIGlzIGhhbmRsZWQsIHNvIGl0IG1ha2VzIHNlbnNlIHdlJiMzOTtkIGJlIGRpZ2dpbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoYXQgbGluZSwgYW5kIGlkZWFsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCBjb3VsZCBiZSBhIHNwZWNpZmljIGJ1ZywgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBvciBldmVuIGp1c3Qgc29tZSBpbnRlcmVzdGluZyBjb2RlIGZsb3cgdG8gZXhhbWluZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgbGluZSBpcyBkb2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IHN5bWxpbmtzIGFyZSBoYW5kbGVkIGluIE9DRlMyOiB0aGUgaW5vZGUgYWxsb2NhdGlvbiwgdGhlIGRhdGEgYmxvY2sgYWxsb2NhdGlvbiwgdGhlIGZvcm1hdCBvZiB0aGUgbGluayYjMzk7cyBjb250ZW50Li4uIHRoYXQgY29udGV4dCB3aWxsIGJlIGtleSB0byBwcm9wZXJseSB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiBvZiB0aGF0IHBhcnRpY3VsYXIgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9uYW1laS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxNDpcdHN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbjE4MTU6XHRcdFx0XHQgc3RydWN0IGlub2RlICpkaXIsXG4xODE2Olx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbjE4MTc6XHRcdFx0XHQgY29uc3QgY2hhciAqc3ltbmFtZSlcbjE4MTg6XHR7XG4xODE5Olx0XHRpbnQgc3RhdHVzLCBsLCBjcmVkaXRzO1xuMTgyMDpcdFx0dTY0IG5ld3NpemU7XG4xODIxOlx0XHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE5VTEw7XG4xODIyOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbjE4MjM6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4xODI0Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7XG4xODI1Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCA9IE5VTEw7XG4xODI2Olx0XHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IE5VTEw7XG4xODI3Olx0XHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTtcbjE4Mjg6XHRcdGhhbmRsZV90ICpoYW5kbGUgPSBOVUxMO1xuMTgyOTpcdFx0c3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmlub2RlX2FjID0gTlVMTDtcbjE4MzA6XHRcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDtcbjE4MzE6XHRcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICp4YXR0cl9hYyA9IE5VTEw7XG4xODMyOlx0XHRpbnQgd2FudF9jbHVzdGVycyA9IDA7XG4xODMzOlx0XHRpbnQgeGF0dHJfY3JlZGl0cyA9IDA7XG4xODM0Olx0XHRzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyBzaSA9IHtcbjE4MzU6XHRcdFx0Lm5hbWUgPSBOVUxMLFxuMTgzNjpcdFx0XHQuZW5hYmxlID0gMSxcbjE4Mzc6XHRcdH07XG4xODM4Olx0XHRpbnQgZGlkX3F1b3RhID0gMCwgZGlkX3F1b3RhX2lub2RlID0gMDtcbjE4Mzk6XHRcdHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07XG4xODQwOlx0XHRzaWdzZXRfdCBvbGRzZXQ7XG4xODQxOlx0XHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuMTg0MjpcdFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4xODQzOlx0XG4xODQ0Olx0XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2JlZ2luKGRpciwgZGVudHJ5LCBzeW1uYW1lLFxuMTg0NTpcdFx0XHRcdFx0ICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lKTtcbjE4NDY6XHRcbjE4NDc6XHRcdHN0YXR1cyA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcbjE4NDg6XHRcdGlmIChzdGF0dXMpIHtcbjE4NDk6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTg1MDpcdFx0XHRnb3RvIGJhaWw7XG4xODUxOlx0XHR9XG4xODUyOlx0XG4xODUzOlx0XHRzYiA9IGRpci1cdTAwM2VpX3NiO1xuMTg1NDpcdFx0b3NiID0gT0NGUzJfU0Ioc2IpO1xuMTg1NTpcdFxuMTg1NjpcdFx0bCA9IHN0cmxlbihzeW1uYW1lKSAmIzQzOyAxO1xuMTg1NzpcdFxuMTg1ODpcdFx0Y3JlZGl0cyA9IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHNiKTtcbjE4NTk6XHRcbjE4NjA6XHRcdC8qIGxvY2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi9cbjE4NjE6XHRcdHN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcdTAwMjZwYXJlbnRfZmVfYmgsIDEpO1xuMTg2MjpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTg2MzpcdFx0XHRpZiAoc3RhdHVzICE9IC1FTk9FTlQpXG4xODY0Olx0XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTg2NTpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuMTg2NjpcdFx0fVxuMTg2NzpcdFxuMTg2ODpcdFx0ZGlyZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtXHUwMDNlYl9kYXRhO1xuMTg2OTpcdFx0aWYgKCFvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpcmZlKSkge1xuMTg3MDpcdFx0XHQvKiBjYW4mIzM5O3QgbWFrZSBhIGZpbGUgaW4gYSBkZWxldGVkIGRpcmVjdG9yeS4gKi9cbjE4NzE6XHRcdFx0c3RhdHVzID0gLUVOT0VOVDtcbjE4NzI6XHRcdFx0Z290byBiYWlsO1xuMTg3MzpcdFx0fVxuMTg3NDpcdFxuMTg3NTpcdFx0c3RhdHVzID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbjE4NzY6XHRcdFx0XHRcdFx0ICAgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4pO1xuMTg3NzpcdFx0aWYgKHN0YXR1cylcbjE4Nzg6XHRcdFx0Z290byBiYWlsO1xuMTg3OTpcdFxuMTg4MDpcdFx0c3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIGRpciwgcGFyZW50X2ZlX2JoLFxuMTg4MTpcdFx0XHRcdFx0XHQgICAgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4xODgyOlx0XHRcdFx0XHRcdCAgICAgIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBcdTAwMjZsb29rdXApO1xuMTg4MzpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTg4NDpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xODg1Olx0XHRcdGdvdG8gYmFpbDtcbjE4ODY6XHRcdH1cbjE4ODc6XHRcbjE4ODg6XHRcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X2lub2RlKG9zYiwgXHUwMDI2aW5vZGVfYWMpO1xuMTg4OTpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTg5MDpcdFx0XHRpZiAoc3RhdHVzICE9IC1FTk9TUEMpXG4xODkxOlx0XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTg5MjpcdFx0XHRnb3RvIGJhaWw7XG4xODkzOlx0XHR9XG4xODk0Olx0XG4xODk1Olx0XHRpbm9kZSA9IG9jZnMyX2dldF9pbml0X2lub2RlKGRpciwgU19JRkxOSyB8IFNfSVJXWFVHTyk7XG4xODk2Olx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuMTg5NzpcdFx0XHRzdGF0dXMgPSBQVFJfRVJSKGlub2RlKTtcbjE4OTg6XHRcdFx0aW5vZGUgPSBOVUxMO1xuMTg5OTpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTAwOlx0XHRcdGdvdG8gYmFpbDtcbjE5MDE6XHRcdH1cbjE5MDI6XHRcbjE5MDM6XHRcdC8qIGdldCBzZWN1cml0eSB4YXR0ciAqL1xuMTkwNDpcdFx0c3RhdHVzID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2c2kpO1xuMTkwNTpcdFx0aWYgKHN0YXR1cykge1xuMTkwNjpcdFx0XHRpZiAoc3RhdHVzID09IC1FT1BOT1RTVVBQKVxuMTkwNzpcdFx0XHRcdHNpLmVuYWJsZSA9IDA7XG4xOTA4Olx0XHRcdGVsc2Uge1xuMTkwOTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbjE5MTA6XHRcdFx0XHRnb3RvIGJhaWw7XG4xOTExOlx0XHRcdH1cbjE5MTI6XHRcdH1cbjE5MTM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBPQ0ZTMiBTeW1saW5rIENyZWF0aW9uKioKCk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgaG93IE9DRlMyIGhhbmRsZXMgc3ltbGluayBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBBQ0xzLiBJIHRob3VnaHQgYG9jZnMyX3N5bWxpbmtgIGRpcmVjdGx5IGNhbGxlZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYnV0IHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIEkgc2VlIGl0IGRvZXNuJiMzOTt0LiBJbnN0ZWFkLCBpdCBzZWVtcyB0byBnbyB0aHJvdWdoIGEgY291cGxlIG9mIGludGVybWVkaWF0ZSBjYWxsczogZmlyc3QgYG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0YCwgYW5kIHRoZW4gaXQgbGVhZHMgdG8gYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuICBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIGRvaW5nLCBzbyBJJiMzOTtsbCBjaGVjayBpdCYjMzk7cyBpbXBsZW1lbnRhdGlvbiBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTQ6XHRcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgeGF0dHIgKi9cbjE5MTU6XHRcdGlmIChzaS5lbmFibGUpIHtcbjE5MTY6XHRcdFx0c3RhdHVzID0gb2NmczJfY2FsY19zZWN1cml0eV9pbml0KGRpciwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4xOTE3Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ4YXR0cl9hYyk7XG4xOTE4Olx0XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbjE5MTk6XHRcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTIwOlx0XHRcdFx0Z290byBiYWlsO1xuMTkyMTpcdFx0XHR9XG4xOTIyOlx0XHR9XG4xOTIzOlx0XG4xOTI0Olx0XHQvKiBkb24mIzM5O3QgcmVzZXJ2ZSBiaXRtYXAgc3BhY2UgZm9yIGZhc3Qgc3ltbGlua3MuICovXG4xOTI1Olx0XHRpZiAobCBcdTAwM2Ugb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKHNiKSlcbjE5MjY6XHRcdFx0d2FudF9jbHVzdGVycyAmIzQzOz0gMTtcbjE5Mjc6XHRcbjE5Mjg6XHRcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCB3YW50X2NsdXN0ZXJzLCBcdTAwMjZkYXRhX2FjKTtcbjE5Mjk6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbjE5MzA6XHRcdFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDKVxuMTkzMTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbjE5MzI6XHRcdFx0Z290byBiYWlsO1xuMTkzMzpcdFx0fVxuMTkzNDpcdFxuMTkzNTpcdFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzICYjNDM7IHhhdHRyX2NyZWRpdHMpO1xuMTkzNjpcdFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4xOTM3Olx0XHRcdHN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTtcbjE5Mzg6XHRcdFx0aGFuZGxlID0gTlVMTDtcbjE5Mzk6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTk0MDpcdFx0XHRnb3RvIGJhaWw7XG4xOTQxOlx0XHR9XG4xOTQyOlx0XG4xOTQzOlx0XHQvKiBTdGFydGluZyB0byBjaGFuZ2UgdGhpbmdzLCByZXN0YXJ0IGlzIG5vIGxvbmdlciBwb3NzaWJsZS4gKi9cbjE5NDQ6XHRcdG9jZnMyX2Jsb2NrX3NpZ25hbHMoXHUwMDI2b2xkc2V0KTtcbjE5NDU6XHRcdGRpZF9ibG9ja19zaWduYWxzID0gMTtcbjE5NDY6XHRcbjE5NDc6XHRcdHN0YXR1cyA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTtcbjE5NDg6XHRcdGlmIChzdGF0dXMpXG4xOTQ5Olx0XHRcdGdvdG8gYmFpbDtcbjE5NTA6XHRcdGRpZF9xdW90YV9pbm9kZSA9IDE7XG4xOTUxOlx0XG4xOTUyOlx0XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2NyZWF0ZShkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sXG4xOTUzOlx0XHRcdFx0XHQgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4xOTU0Olx0XHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbjE5NTU6XHRcdFx0XHRcdCAgIGlub2RlLVx1MDAzZWlfbW9kZSk7XG4xOTU2Olx0XG4xOTU3Olx0XHRzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLFxuMTk1ODpcdFx0XHRcdFx0ICAgIDAsIFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXG4xOTU5Olx0XHRcdFx0XHQgICAgaW5vZGVfYWMpO1xuMTk2MDpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTk2MTpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTYyOlx0XHRcdGdvdG8gYmFpbDtcbjE5NjM6XHRcdH1cbjE5NjQ6XHRcbjE5NjU6XHRcdGZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgbmV3X2ZlX2JoLVx1MDAzZWJfZGF0YTtcbjE5NjY6XHRcdGlub2RlLVx1MDAzZWlfcmRldiA9IDA7XG4xOTY3Olx0XHRuZXdzaXplID0gbCAtIDE7XG4xOTY4Olx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuMTk2OTpcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbjE5NzA6XHRcdGlmIChsIFx1MDAzZSBvY2ZzMl9mYXN0X3N5bWxpbmtfY2hhcnMoc2IpKSB7XG4xOTcxOlx0XHRcdHUzMiBvZmZzZXQgPSAwO1xuMTk3MjpcdFxuMTk3MzpcdFx0XHRzdGF0dXMgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLFxuMTk3NDpcdFx0XHQgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLVx1MDAzZXNiLCAxKSk7XG4xOTc1Olx0XHRcdGlmIChzdGF0dXMpXG4xOTc2Olx0XHRcdFx0Z290byBiYWlsO1xuMTk3NzpcdFx0XHRkaWRfcXVvdGEgPSAxO1xuMTk3ODpcdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZvY2ZzMl9hb3BzO1xuMTk3OTpcdFx0XHRzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShvc2IsIGlub2RlLCBcdTAwMjZvZmZzZXQsIDEsIDAsXG4xOTgwOlx0XHRcdFx0XHRcdCAgICAgIG5ld19mZV9iaCxcbjE5ODE6XHRcdFx0XHRcdFx0ICAgICAgaGFuZGxlLCBkYXRhX2FjLCBOVUxMLFxuMTk4MjpcdFx0XHRcdFx0XHQgICAgICBOVUxMKTtcbjE5ODM6XHRcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTk4NDpcdFx0XHRcdGlmIChzdGF0dXMgIT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IC1FSU5UUikge1xuMTk4NTpcdFx0XHRcdFx0bWxvZyhNTF9FUlJPUixcbjE5ODY6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGV4dGVuZCBmaWxlIHRvICVsbHVcXG5cJiMzNDssXG4xOTg3Olx0XHRcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3c2l6ZSk7XG4xOTg4Olx0XHRcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTg5Olx0XHRcdFx0XHRzdGF0dXMgPSAtRU5PU1BDO1xuMTk5MDpcdFx0XHRcdH1cbjE5OTE6XHRcdFx0XHRnb3RvIGJhaWw7XG4xOTkyOlx0XHRcdH1cbjE5OTM6XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBuZXdzaXplKTtcbjE5OTQ6XHRcdFx0aW5vZGUtXHUwMDNlaV9ibG9ja3MgPSBvY2ZzMl9pbm9kZV9zZWN0b3JfY291bnQoaW5vZGUpO1xuMTk5NTpcdFx0fSBlbHNlIHtcbjE5OTY6XHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2b2NmczJfZmFzdF9zeW1saW5rX2FvcHM7XG4xOTk3Olx0XHRcdG1lbWNweSgoY2hhciAqKSBmZS1cdTAwM2VpZDIuaV9zeW1saW5rLCBzeW1uYW1lLCBsKTtcbjE5OTg6XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBuZXdzaXplKTtcbjE5OTk6XHRcdFx0aW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuMjAwMDpcdFx0fVxuMjAwMTpcdFxuMjAwMjpcdFx0c3RhdHVzID0gb2NmczJfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgpO1xuMjAwMzpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMjAwNDpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4yMDA1Olx0XHRcdGdvdG8gYmFpbDtcbjIwMDY6XHRcdH1cbjIwMDc6XHRcbjIwMDg6XHRcdGlmICghb2NmczJfaW5vZGVfaXNfZmFzdF9zeW1saW5rKGlub2RlKSkge1xuMjAwOTpcdFx0XHRzdGF0dXMgPSBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKG9zYiwgaGFuZGxlLCBpbm9kZSxcbjIwMTA6XHRcdFx0XHRcdFx0XHQgICBzeW1uYW1lKTtcbjIwMTE6XHRcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMjAxMjpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbjIwMTM6XHRcdFx0XHRnb3RvIGJhaWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDIxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBPQ0ZTMiBYYXR0ciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBzeW1saW5rIGNyZWF0aW9uIHBhdGgsIHNwZWNpZmljYWxseSBgb2NmczJfc3ltbGlua2AsIHdvdWxkIGFsc28gdHJpZ2dlciB0aGUgeGF0dHIgYW5kIEFDTCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IHNlZW1zIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBNeSBtZW50YWwgbW9kZWwgbXVzdCBiZSB3cm9uZyB0aGVyZS4gSSBrbm93IGBvY2ZzMl9ta25vZGAgKmRvZXMqIHBlcmZvcm0gdGhpcyBpbml0aWFsaXphdGlvbi4KClJpZ2h0LCBzbyB0byBjb25maXJtIHRoaXMgZGlzY3JlcGFuY3ksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZC4gTGV0JiMzOTtzIHRyYWNlIHRocm91Z2ggYG9jZnMyX21rbm9kYCwgd2hpY2ggaXMgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2FsbHMuIFRoZSBjb2RlIGluIGBmcy9vY2ZzMi9uYW1laS5jYCBzaG91bGQgaG9sZCB0aGUgYW5zd2VyLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBzZWUgaWYgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgb3IgYG9jZnMyX2luaXRfYWNsYCBhcmUgY2FsbGVkLiBUaGlzIHdpbGwgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTY6XHRcdHNpZ3NldF90IG9sZHNldDtcbiAyNTc6XHRcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gMjU4Olx0XHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbiAyNTk6XHRcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gMjYwOlx0XG4gMjYxOlx0XHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiAyNjI6XHRcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuIDI2MzpcdFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcpZGV2LCBtb2RlKTtcbiAyNjQ6XHRcbiAyNjU6XHRcdHN0YXR1cyA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcbiAyNjY6XHRcdGlmIChzdGF0dXMpIHtcbiAyNjc6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIDI2ODpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIDI2OTpcdFx0fVxuIDI3MDpcdFxuIDI3MTpcdFx0LyogZ2V0IG91ciBzdXBlciBibG9jayAqL1xuIDI3MjpcdFx0b3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIDI3MzpcdFxuIDI3NDpcdFx0c3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhkaXIsIFx1MDAyNnBhcmVudF9mZV9iaCwgMSk7XG4gMjc1Olx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gMjc2Olx0XHRcdGlmIChzdGF0dXMgIT0gLUVOT0VOVClcbiAyNzc6XHRcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gMjc4Olx0XHRcdHJldHVybiBzdGF0dXM7XG4gMjc5Olx0XHR9XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAoU19JU0RJUihtb2RlKSBcdTAwMjZcdTAwMjYgKGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gb2NmczJfbGlua19tYXgob3NiKSkpIHtcbiAyODI6XHRcdFx0c3RhdHVzID0gLUVNTElOSztcbiAyODM6XHRcdFx0Z290byBsZWF2ZTtcbiAyODQ6XHRcdH1cbiAyODU6XHRcbiAyODY6XHRcdGRpcmZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgcGFyZW50X2ZlX2JoLVx1MDAzZWJfZGF0YTtcbiAyODc6XHRcdGlmICghb2NmczJfcmVhZF9saW5rc19jb3VudChkaXJmZSkpIHtcbiAyODg6XHRcdFx0LyogY2FuJiMzOTt0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovXG4gMjg5Olx0XHRcdHN0YXR1cyA9IC1FTk9FTlQ7XG4gMjkwOlx0XHRcdGdvdG8gbGVhdmU7XG4gMjkxOlx0XHR9XG4gMjkyOlx0XG4gMjkzOlx0XHRzdGF0dXMgPSBvY2ZzMl9jaGVja19kaXJfZm9yX2VudHJ5KGRpciwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIDI5NDpcdFx0XHRcdFx0XHQgICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbik7XG4gMjk1Olx0XHRpZiAoc3RhdHVzKVxuIDI5NjpcdFx0XHRnb3RvIGxlYXZlO1xuIDI5NzpcdFxuIDI5ODpcdFx0LyogZ2V0IGEgc3BvdCBpbnNpZGUgdGhlIGRpci4gKi9cbiAyOTk6XHRcdHN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCxcbiAzMDA6XHRcdFx0XHRcdFx0ICAgICAgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIDMwMTpcdFx0XHRcdFx0XHQgICAgICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgXHUwMDI2bG9va3VwKTtcbiAzMDI6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiAzMDM6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIDMwNDpcdFx0XHRnb3RvIGxlYXZlO1xuIDMwNTpcdFx0fVxuIDMwNjpcdFxuIDMwNzpcdFx0LyogcmVzZXJ2ZSBhbiBpbm9kZSBzcG90ICovXG4gMzA4Olx0XHRzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX25ld19pbm9kZShvc2IsIFx1MDAyNmlub2RlX2FjKTtcbiAzMDk6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiAzMTA6XHRcdFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDKVxuIDMxMTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiAzMTI6XHRcdFx0Z290byBsZWF2ZTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRcdGlub2RlID0gb2NmczJfZ2V0X2luaXRfaW5vZGUoZGlyLCBtb2RlKTtcbiAzMTY6XHRcdGlmIChJU19FUlIoaW5vZGUpKSB7XG4gMzE3Olx0XHRcdHN0YXR1cyA9IFBUUl9FUlIoaW5vZGUpO1xuIDMxODpcdFx0XHRpbm9kZSA9IE5VTEw7XG4gMzE5Olx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiAzMjA6XHRcdFx0Z290byBsZWF2ZTtcbiAzMjE6XHRcdH1cbiAzMjI6XHRcbiAzMjM6XHRcdC8qIGdldCBzZWN1cml0eSB4YXR0ciAqL1xuIDMyNDpcdFx0c3RhdHVzID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2c2kpO1xuIDMyNTpcdFx0aWYgKHN0YXR1cykge1xuIDMyNjpcdFx0XHRpZiAoc3RhdHVzID09IC1FT1BOT1RTVVBQKVxuIDMyNzpcdFx0XHRcdHNpLmVuYWJsZSA9IDA7XG4gMzI4Olx0XHRcdGVsc2Uge1xuIDMyOTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiAzMzA6XHRcdFx0XHRnb3RvIGxlYXZlO1xuIDMzMTpcdFx0XHR9XG4gMzMyOlx0XHR9XG4gMzMzOlx0XG4gMzM0Olx0XHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiAzMzU6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4gMzM2Olx0XHRcdGdvdG8gbGVhdmU7XG4gMzM3Olx0XG4gMzM4Olx0XHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbiAzMzk6XHRcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuIDM0MDpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSxcbiAzNDE6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIDM0MjpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIDM0MzpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gMzQ0Olx0XHRcdGdvdG8gbGVhdmU7XG4gMzQ1Olx0XHR9XG4gMzQ2Olx0XG4gMzQ3Olx0XHQvKiBSZXNlcnZlIGEgY2x1c3RlciBpZiBjcmVhdGluZyBhbiBleHRlbnQgYmFzZWQgZGlyZWN0b3J5LiAqL1xuIDM0ODpcdFx0aWYgKFNfSVNESVIobW9kZSkgXHUwMDI2XHUwMDI2ICFvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB7XG4gMzQ5Olx0XHRcdHdhbnRfY2x1c3RlcnMgJiM0Mzs9IDE7XG4gMzUwOlx0XG4gMzUxOlx0XHRcdC8qIERpciBpbmRleGluZyByZXF1aXJlcyBleHRyYSBzcGFjZSBhcyB3ZWxsICovXG4gMzUyOlx0XHRcdGlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSlcbiAzNTM6XHRcdFx0XHR3YW50X21ldGEmIzQzOyYjNDM7O1xuIDM1NDpcdFx0fVxuIDM1NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9DRlMyIEZpbGVzeXN0ZW0gQ3JlYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgT0NGUzIgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgbmV3IGZpbGUgc3lzdGVtIG9iamVjdHMuIEkgc2VlIHRoYXQgdGhlIGBvY2ZzMl9ta25vZGAgZnVuY3Rpb24gaXMgY2VudHJhbCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyB0aGUgcHJpbWFyeSB3b3JraG9yc2UsIGFuZCBpdCBjYWxscyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBTZWVtcyBsb2dpY2FsOyBzZXR0aW5nIHVwIEFDTHMgYW5kIGluaXRpYWxpemluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBpbXBvcnRhbnQgc3RlcHMgZHVyaW5nIG9iamVjdCBjcmVhdGlvbi4KCkJ1dCBob2xkIG9uLi4uIGBvY2ZzMl9ta25vZGAgaXMgdXNlZCBmb3IgbW9yZSB0aGFuIGp1c3Qgc2ltcGxlIGZpbGVzLiBJdCBjcmVhdGVzIGRldmljZXMsIHRvby4gTm93LCBJJiMzOTttIGdldHRpbmcgYSBodW5jaCB0aGF0IGl04oCZcyBtb3JlIHdpZGVseSB1c2VkIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBob3cgb3RoZXIgY3JlYXRpb24gZnVuY3Rpb25zIG1pZ2h0IHJlbGF0ZS4KCkFoYSEgTm93IEkmIzM5O20gd29uZGVyaW5nIGlmIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIGFyZSBhY3R1YWxseSBsZXZlcmFnaW5nIGBvY2ZzMl9ta25vZGAgdW5kZXIgdGhlIGhvb2QuIEl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gY29uc29saWRhdGUgdGhlIGNvcmUgY3JlYXRpb24gbG9naWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBmb3IgYG9jZnMyX2NyZWF0ZWAgYW5kIGBvY2ZzMl9ta2RpcmAgZGlyZWN0bHkgYW5kIHZlcmlmeSB0aGlzIHJlbGF0aW9uc2hpcC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta25vZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL29jZnMyL2FjbC5jLTM0OC0gKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbmZzL29jZnMyL2FjbC5jOjM0OTogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG5mcy9vY2ZzMi9hY2wuYy0zNTAtICovXG4tLVxuZnMvb2NmczIvZGlyLmM9MjIxMj1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9kaXIuYy0yMjM2LS8qXG5mcy9vY2ZzMi9kaXIuYzoyMjM3OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcbmZzL29jZnMyL2Rpci5jLTIyMzgtICogdGhlIGlubGluZS1kYXRhIGZsYWcgYW5kIGluaXRpYWxpemVzIHRoZSBpbmxpbmUtZGF0YSBzZWN0aW9uLlxuLS1cbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXG4tLVxuZnMvb2NmczIvaW5vZGUuYy0zODctXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxuZnMvb2NmczIvaW5vZGUuYzozODg6XHQgKiBieSBvY2ZzMl9ta25vZF9sb2NrZWQoKSwgc28gYSBmYWlsdXJlIGlzIGEgY29kZSBidWcuXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cdCAqL1xuLS1cbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvb2NmczIvam91cm5hbC5oLTQyMy0gKiBibG9ja3MgJiM0MzsgcXVvdGEgdXBkYXRlICovXG5mcy9vY2ZzMi9qb3VybmFsLmg6NDI0OnN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpcixcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXHRcdFx0XHQgICAgICBpbnQgeGF0dHJfY3JlZGl0cylcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUwLXtcbmZzL29jZnMyL2pvdXJuYWwuaDo1NTE6XHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUyLVxuLS1cbmZzL29jZnMyL25hbWVpLmMtNTUtXG5mcy9vY2ZzMi9uYW1laS5jOjU2OnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvbmFtZWkuYy01Ny1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTIxNT1zdGF0aWMgdm9pZCBvY2ZzMl9jbGVhbnVwX2FkZF9lbnRyeV9mYWlsdXJlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjI5LVxuZnMvb2NmczIvbmFtZWkuYzoyMzA6c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL29jZnMyL25hbWVpLmMtMjMxLVx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNjAtXG5mcy9vY2ZzMi9uYW1laS5jOjI2MTpcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy0yNjItXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTM2OS1cbmZzL29jZnMyL25hbWVpLmM6MzcwOlx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYixcbmZzL29jZnMyL25hbWVpLmMtMzcxLVx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zODktXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cbmZzL29jZnMyL25hbWVpLmM6MzkwOlx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxuZnMvb2NmczIvbmFtZWkuYy0zOTEtXHRcdFx0XHQgICAgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTUxNy1cbmZzL29jZnMyL25hbWVpLmM6NTE4OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXG5mcy9vY2ZzMi9uYW1laS5jLTUxOS1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02MjktXG5mcy9vY2ZzMi9uYW1laS5jOjYzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL25hbWVpLmMtNjMxLVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjUyLVxuZnMvb2NmczIvbmFtZWkuYzo2NTM6XHRyZXR1cm4gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSwgZGV2LCBuZXdfZmVfYmgsXG5mcy9vY2ZzMi9uYW1laS5jLTY1NC1cdFx0XHRcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTY1OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NjYtXHRcdFx0ICBPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuZnMvb2NmczIvbmFtZWkuYzo2Njc6XHRyZXQgPSBvY2ZzMl9ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xuZnMvb2NmczIvbmFtZWkuYy02NjgtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL25hbWVpLmM9Njc0PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjgzLVx0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbmZzL29jZnMyL25hbWVpLmM6Njg0Olx0cmV0ID0gb2NmczJfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbmZzL29jZnMyL25hbWVpLmMtNjg1LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTE4MTQ9c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTk1Ni1cbmZzL29jZnMyL25hbWVpLmM6MTk1NzpcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTgtXHRcdFx0XHQgICAgMCwgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI1MjE9aW50IG9jZnMyX2NyZWF0ZV9pbm9kZV9pbl9vcnBoYW4oc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTYxLVxuZnMvb2NmczIvbmFtZWkuYzoyNTYyOlx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYiwgMCwgMCkpO1xuZnMvb2NmczIvbmFtZWkuYy0yNTYzLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTg0LVx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXG5mcy9vY2ZzMi9uYW1laS5jOjI1ODU6XHRzdGF0dXMgPSBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLFxuZnMvb2NmczIvbmFtZWkuYy0yNTg2LVx0XHRcdFx0ICAgICAgMCwgXHUwMDI2bmV3X2RpX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjk0MC1cdC5ta2Rpclx0XHQ9IG9jZnMyX21rZGlyLFxuZnMvb2NmczIvbmFtZWkuYzoyOTQxOlx0Lm1rbm9kXHRcdD0gb2NmczJfbWtub2QsXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDItXHQucmVuYW1lXHRcdD0gb2NmczJfcmVuYW1lLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjE5OC1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjE5OTpUUkFDRV9FVkVOVChvY2ZzMl9ta25vZCxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cdFRQX1BST1RPKHZvaWQgKmRpciwgdm9pZCAqZGVudHJ5LCBpbnQgbmFtZV9sZW4sIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODg2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseToKCioqUmVhY2hpbmcgYG9jZnMyX21rbm9kYCoqCgpBbHJpZ2h0LCBzbyBgb2NmczJfbWtub2RgLi4uIGl0JiMzOTtzIHRoZSBpbm9kZSBvcGVyYXRpb24gZm9yIG1ha2luZyBub2RlcywgZ290IGl0LiBNeSBtZW50YWwgbWFwIHNob3dzIGl0JiMzOTtzIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIChjcmVhdGluZyBkaXJlY3RvcmllcyksIGFuZCBgb2NmczJfY3JlYXRlYCAoY3JlYXRpbmcgZmlsZXMsIG9idmlvdXNseSkuIFRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZS4gTm8gcXVlc3Rpb24gdGhlcmUuIEkgbmVlZCB0byBmb2N1cyBvbiBob3cgaXQmIzM5O3MgKmJlaW5nKiByZWFjaGVkLCBwZXJoYXBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpcyBwb3NzaWJsZS4KCk5vdywgSSBuZWVkIHRvIGxvb2sgaW50byBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHNvbWV0aGluZyB0byBkbyB3aXRoIGZpbGUgc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSwgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBTbyBsZXQmIzM5O3MgY2hlY2sgaXQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi94YXR0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzI2NDpcdGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG43MjY1Olx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuNzI2NjpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpXG43MjY3Olx0e1xuNzI2ODpcdFx0aW50IHJldCA9IDA7XG43MjY5Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XG43MjcwOlx0XHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xuNzI3MTpcdFxuNzI3MjpcdFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XG43MjczOlx0XHRpZiAocmV0KSB7XG43Mjc0Olx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbjcyNzU6XHRcdFx0Z290byBsZWF2ZTtcbjcyNzY6XHRcdH1cbjcyNzc6XHRcbjcyNzg6XHRcdHJldCA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcdTAwMjZkaXJfYmgsIDApO1xuNzI3OTpcdFx0aWYgKHJldCkge1xuNzI4MDpcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG43MjgxOlx0XHRcdGdvdG8gbGVhdmU7XG43MjgyOlx0XHR9XG43MjgzOlx0XG43Mjg0Olx0XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbjcyODU6XHRcdGlmIChyZXQpXG43Mjg2Olx0XHRcdGdvdG8gdW5sb2NrO1xuNzI4NzpcdFxuNzI4ODpcdFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFx1MDAyNmFjbF9zdGF0ZSk7XG43Mjg5Olx0XHRpZiAocmV0KVxuNzI5MDpcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG43MjkxOlx0XG43MjkyOlx0dW5sb2NrOlxuNzI5MzpcdFx0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuNzI5NDpcdFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG43Mjk1Olx0XHRicmVsc2UoZGlyX2JoKTtcbjcyOTY6XHRsZWF2ZTpcbjcyOTc6XHRcdHJldHVybiByZXQ7XG43Mjk4Olx0fVxuNzI5OTpcdFxuNzMwMDpcdC8qXG43MzAxOlx0ICogJiMzOTtzZWN1cml0eSYjMzk7IGF0dHJpYnV0ZXMgc3VwcG9ydFxuNzMwMjpcdCAqL1xuNzMwMzpcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuNzMwNDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSxcbjczMDU6XHRcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxuNzMwNjpcdHtcbjczMDc6XHRcdHJldHVybiBvY2ZzMl94YXR0cl9nZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuNzMwODpcdFx0XHRcdCAgICAgICBuYW1lLCBidWZmZXIsIHNpemUpO1xuNzMwOTpcdH1cbjczMTA6XHRcbjczMTE6XHRzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NlY3VyaXR5X3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbjczMTI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbjczMTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG43MzE0Olx0XHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG43MzE1Olx0XHRcdFx0XHQgICAgc2l6ZV90IHNpemUsIGludCBmbGFncylcbjczMTY6XHR7XG43MzE3Olx0XHRyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcbjczMTg6XHRcdFx0XHQgICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbjczMTk6XHR9XG43MzIwOlx0XG43MzIxOlx0c3RhdGljIGludCBvY2ZzMl9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG43MzIyOlx0XHRcdCAgICAgdm9pZCAqZnNfaW5mbylcbjczMjM6XHR7XG43MzI0Olx0XHRzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2kgPSBmc19pbmZvO1xuNzMyNTpcdFx0Y29uc3Qgc3RydWN0IHhhdHRyICp4YXR0cjtcbjczMjY6XHRcdGludCBlcnIgPSAwO1xuNzMyNzpcdFxuNzMyODpcdFx0aWYgKHNpKSB7XG43MzI5Olx0XHRcdHNpLVx1MDAzZXZhbHVlID0ga21lbWR1cCh4YXR0cl9hcnJheS1cdTAwM2V2YWx1ZSwgeGF0dHJfYXJyYXktXHUwMDNldmFsdWVfbGVuLFxuNzMzMDpcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuNzMzMTpcdFx0XHRpZiAoIXNpLVx1MDAzZXZhbHVlKVxuNzMzMjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuNzMzMzpcdFxuNzMzNDpcdFx0XHRzaS1cdTAwM2VuYW1lID0geGF0dHJfYXJyYXktXHUwMDNlbmFtZTtcbjczMzU6XHRcdFx0c2ktXHUwMDNldmFsdWVfbGVuID0geGF0dHJfYXJyYXktXHUwMDNldmFsdWVfbGVuO1xuNzMzNjpcdFx0XHRyZXR1cm4gMDtcbjczMzc6XHRcdH1cbjczMzg6XHRcbjczMzk6XHRcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXHUwMDNlbmFtZSAhPSBOVUxMOyB4YXR0ciYjNDM7JiM0MzspIHtcbjczNDA6XHRcdFx0ZXJyID0gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcbjczNDE6XHRcdFx0XHRcdCAgICAgIHhhdHRyLVx1MDAzZW5hbWUsIHhhdHRyLVx1MDAzZXZhbHVlLFxuNzM0MjpcdFx0XHRcdFx0ICAgICAgeGF0dHItXHUwMDNldmFsdWVfbGVuLCBYQVRUUl9DUkVBVEUpO1xuNzM0MzpcdFx0XHRpZiAoZXJyKVxuNzM0NDpcdFx0XHRcdGJyZWFrO1xuNzM0NTpcdFx0fVxuNzM0NjpcdFx0cmV0dXJuIGVycjtcbjczNDc6XHR9XG43MzQ4Olx0XG43MzQ5Olx0aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG43MzUwOlx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuNzM1MTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbjczNTI6XHRcdFx0XHQgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpKVxuNzM1MzpcdHtcbjczNTQ6XHRcdGludCByZXQ7XG43MzU1Olx0XG43MzU2Olx0XHQvKiBjaGVjayB3aGV0aGVyIG9jZnMyIHN1cHBvcnQgZmVhdHVyZSB4YXR0ciAqL1xuNzM1NzpcdFx0aWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYikpKVxuNzM1ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG43MzU5Olx0XHRpZiAoc2kpIHtcbjczNjA6XHRcdFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuNzM2MTpcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm9jZnMyX2luaXR4YXR0cnMsIHNpKTtcbjczNjI6XHRcdFx0LypcbjczNjM6XHRcdFx0ICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgpIGRvZXMgbm90IHJldHVybiAtRU9QTk9UU1VQUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBPQ0ZTMiBSZWZsaW5rIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIEkgc2VlIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGJlaW5nIGNhbGxlZCBmcm9tIGBvY2ZzMl9yZWZsaW5rYC4gUmlnaHQsIGBvY2ZzMl9yZWZsaW5rYC4uLiBJIGJlbGlldmUgdGhhdCYjMzk7cyBhbiBgaW9jdGxgIGNhbGwsIHJpZ2h0PyBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgZGF0YSBmbG93IGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL29jZnMyL3JlZmNvdW50dHJlZS5jYCwgdG8gY29uZmlybSB0aGF0IGBvY2ZzMl9yZWZsaW5rYCBpcyBkZWZpbmVkIHRoZXJlIGFuZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlIG1lY2hhbmljcyBvZiB0aGUgcmVmbGluayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZGlnZ2luZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgZnVuY3Rpb24gd2l0aGluIHRoZSBmaWxlIHN5c3RlbS4gS25vd2luZyB0aGF0IGBvY2ZzMl9yZWZsaW5rYCBpcyBhbiBgaW9jdGxgIGdpdmVzIG1lIGFuIGltcG9ydGFudCBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfcmVmbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuZnMvb2NmczIvZmlsZS5jLTI3MjUtXHQvKiBMb2NrIGJvdGggZmlsZXMgYWdhaW5zdCBJTyAqL1xuZnMvb2NmczIvZmlsZS5jOjI3MjY6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKGlub2RlX2luLCBcdTAwMjZpbl9iaCwgaW5vZGVfb3V0LCBcdTAwMjZvdXRfYmgpO1xuZnMvb2NmczIvZmlsZS5jLTI3MjctXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzUxLVxuZnMvb2NmczIvZmlsZS5jOjI3NTI6XHRyZW1hcHBlZCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKGlub2RlX2luLCBpbl9iaCwgcG9zX2luLFxuZnMvb2NmczIvZmlsZS5jLTI3NTMtXHRcdFx0aW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQsIGxlbik7XG4tLVxuZnMvb2NmczIvZmlsZS5jLTI3NjktXG5mcy9vY2ZzMi9maWxlLmM6Mjc3MDpcdHJldCA9IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3QoaW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQgJiM0MzsgbGVuKTtcbmZzL29jZnMyL2ZpbGUuYy0yNzcxLVx0aWYgKHJldCkge1xuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzc2LW91dF91bmxvY2s6XG5mcy9vY2ZzMi9maWxlLmM6Mjc3NzpcdG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhpbm9kZV9pbiwgaW5fYmgsIGlub2RlX291dCwgb3V0X2JoKTtcbmZzL29jZnMyL2ZpbGUuYy0yNzc4LVx0cmV0dXJuIHJlbWFwcGVkIFx1MDAzZSAwID8gcmVtYXBwZWQgOiByZXQ7XG4tLVxuZnMvb2NmczIvaW9jdGwuYz04NTM9bG9uZyBvY2ZzMl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvb2NmczIvaW9jdGwuYy05MTktXG5mcy9vY2ZzMi9pb2N0bC5jOjkyMDpcdFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIG9sZF9wYXRoLCBuZXdfcGF0aCwgcHJlc2VydmUpO1xuZnMvb2NmczIvaW9jdGwuYy05MjEtXHR9XG4tLVxuZnMvb2NmczIvaW9jdGwuYz05NjU9bG9uZyBvY2ZzMl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvb2NmczIvaW9jdGwuYy05ODYtXG5mcy9vY2ZzMi9pb2N0bC5jOjk4NzpcdFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIGNvbXBhdF9wdHIoYXJncy5vbGRfcGF0aCksXG5mcy9vY2ZzMi9pb2N0bC5jLTk4OC1cdFx0XHRcdFx0ICAgY29tcGF0X3B0cihhcmdzLm5ld19wYXRoKSwgcHJlc2VydmUpO1xuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MTgzMT1ERUZJTkVfT0NGUzJfVUxMX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcm1feGF0dHJfY2x1c3Rlcik7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzItXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4MzM6REVGSU5FX09DRlMyX1VMTF9VSU5UX0VWRU5UKG9jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTgzNC1cbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTE4NDE9REVGSU5FX09DRlMyX1VMTF9VSU5UX0VWRU5UKG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV9yZWZjb3VudCk7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDItXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDM6REVGSU5FX09DRlMyX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0NC1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MTg0NTpERUZJTkVfT0NGUzJfVUxMX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9yZWMpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQ2LVxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQwODk9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfcmVmbGlua19ub2RlKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MTQ1LVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDE0NjpzdGF0aWMgaW50IF9fb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0Ny1cdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MjA5LVx0aWYgKG9pLVx1MDAzZWlwX2R5bl9mZWF0dXJlcyBcdTAwMjYgT0NGUzJfSEFTX1hBVFRSX0ZMKSB7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjEwOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRycyhpbm9kZSwgb2xkX2JoLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIxMS1cdFx0XHRcdFx0ICAgbmV3X2lub2RlLCBuZXdfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzNy1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyMzg6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzOS1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSlcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MjcyLVx0ZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF9hbGxvY19zZW0pO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI3MzpcdGVycm9yID0gX19vY2ZzMl9yZWZsaW5rKG9sZF9kZW50cnksIG9sZF9iaCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyNzQtXHRcdFx0XHRuZXdfb3JwaGFuX2lub2RlLCBwcmVzZXJ2ZSk7XG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDM0OD1zdGF0aWMgaW50IG9jZnMyX3Zmc19yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQzOTgtXHRpZiAoIWVycm9yKVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDM5OTpcdFx0ZXJyb3IgPSBvY2ZzMl9yZWZsaW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSwgcHJlc2VydmUpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwMC1cdGlub2RlX3VubG9jayhpbm9kZSk7XG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwNy0gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0MDg6aW50IG9jZnMyX3JlZmxpbmtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MDktXHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ1MC0vKiBVcGRhdGUgZGVzdGluYXRpb24gaW5vZGUgc2l6ZSwgaWYgbmVjZXNzYXJ5LiAqL1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDQ1MTppbnQgb2NmczJfcmVmbGlua191cGRhdGVfZGVzdChzdHJ1Y3QgaW5vZGUgKmRlc3QsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDUyLVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDg5LS8qIFJlbWFwIHRoZSByYW5nZSBwb3NfaW46bGVuIGluIHNfaW5vZGUgdG8gcG9zX291dDpsZW4gaW4gdF9pbm9kZS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0OTA6c3RhdGljIGxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDkxLVx0XHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ2MDMtLyogU2V0IHVwIHJlZmNvdW50IHRyZWUgYW5kIHJlbWFwIHNfaW5vZGUgdG8gdF9pbm9kZS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ2MDQ6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ2MDUtXHRcdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Njg1LVx0LyogQWN0dWFsbHkgcmVtYXAgZXh0ZW50cyBub3cuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Njg2Olx0cmV0ID0gb2NmczJfcmVmbGlua19yZW1hcF9leHRlbnQoc19pbm9kZSwgc19iaCwgcG9zX2luLCB0X2lub2RlLCB0X2JoLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4Ny1cdFx0XHRcdFx0IHBvc19vdXQsIGxlbiwgXHUwMDI2ZGVhbGxvYyk7XG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDcwMi0vKiBMb2NrIGFuIGlub2RlIGFuZCBncmFiIGEgYmggcG9pbnRpbmcgdG8gdGhlIGlub2RlLiAqL1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDcwMzppbnQgb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NzA0LVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3MsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDc5Ni0vKiBVbmxvY2sgYm90aCBpbm9kZXMgYW5kIHJlbGVhc2UgYnVmZmVycy4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3OTc6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDc5OC1cdFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg9OTg9aW50IG9jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTAzLVx0XHRcdCAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMDQ6aW50IG9jZnMyX3JlZmxpbmtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwNS1cdFx0XHRjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMDctXHRcdFx0Ym9vbCBwcmVzZXJ2ZSk7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMDg6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwOS1cdFx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNC1cdFx0XHRcdCAgbG9mZl90IGxlbik7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMTU6aW50IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE2LVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMSxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMTgtXHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgyKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExOTp2b2lkIG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjAtXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEyMi1cdFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRfYmgpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTIzOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEyNC1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRfYmgsXG4tLVxuZnMvb2NmczIveGF0dHIuYz02MzA4PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzEtICovXG5mcy9vY2ZzMi94YXR0ci5jOjYzMzI6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL3hhdHRyLmMtNjMzMy1cdFx0XHRcdFx0c3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02Mzg3LSAqL1xuZnMvb2NmczIveGF0dHIuYzo2Mzg4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL3hhdHRyLmMtNjM4OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjQwNy1cbmZzL29jZnMyL3hhdHRyLmM6NjQwODpcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKCh1bnNpZ25lZCBsb25nIGxvbmcpb2xkX2JoLVx1MDAzZWJfYmxvY2tucixcbmZzL29jZnMyL3hhdHRyLmMtNjQwOS1cdFx0XHRcdFx0IGxlMTZfdG9fY3B1KHhoLVx1MDAzZXhoX2NvdW50KSk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy02NTE3LVxuZnMvb2NmczIveGF0dHIuYzo2NTE4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MpXG5mcy9vY2ZzMi94YXR0ci5jLTY1MTkte1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjU0NC1cbmZzL29jZnMyL3hhdHRyLmM6NjU0NTpcdHJldCA9IG9jZnMyX3JlZmxpbmtfbG9ja194YXR0cl9hbGxvY2F0b3JzKG9zYiwgeGgsIGFyZ3MtXHUwMDNlcmVmX3Jvb3RfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDYtXHRcdFx0XHRcdFx0ICBcdTAwMjZjcmVkaXRzLCBcdTAwMjZtZXRhX2FjKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY1NzEtXG5mcy9vY2ZzMi94YXR0ci5jOjY1NzI6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtXHUwMDNlb2xkX2JoLCB4aCxcbmZzL29jZnMyL3hhdHRyLmMtNjU3My1cdFx0XHRcdFx0IGFyZ3MtXHUwMDNlbmV3X2JoLCBuZXdfeGgsIFx1MDAyNnZiLCBtZXRhX2FjLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjU5OD1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9lbXB0eV94YXR0cl9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjYzMy1cbmZzL29jZnMyL3hhdHRyLmM6NjYzNDpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYmxvY2soc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzUtXHRcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjY1NS1cbmZzL29jZnMyL3hhdHRyLmM6NjY1NjpcdHJldCA9IG9jZnMyX3JlZmxpbmtfbG9ja194YXR0cl9hbGxvY2F0b3JzKG9zYiwgeGgsIGFyZ3MtXHUwMDNlcmVmX3Jvb3RfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTY2NTctXHRcdFx0XHRcdFx0ICBcdTAwMjZjcmVkaXRzLCBcdTAwMjZtZXRhX2FjKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY2OTEtXG5mcy9vY2ZzMi94YXR0ci5jOjY2OTI6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGJsa19iaCwgeGgsXG5mcy9vY2ZzMi94YXR0ci5jLTY2OTMtXHRcdFx0XHRcdCBuZXdfYmxrX2JoLCBuZXdfeGgsIFx1MDAyNnZiLCBtZXRhX2FjLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjcxOS1cbmZzL29jZnMyL3hhdHRyLmM6NjcyMDpzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3Mge1xuZnMvb2NmczIveGF0dHIuYy02NzIxLVx0c3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKnJlZmxpbms7XG4tLVxuZnMvb2NmczIveGF0dHIuYz02NzM0PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjc0MS17XG5mcy9vY2ZzMi94YXR0ci5jOjY3NDI6XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxuZnMvb2NmczIveGF0dHIuYzo2NzQzOlx0XHRcdChzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKilwYXJhO1xuZnMvb2NmczIveGF0dHIuYy02NzQ0LVx0c3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0O1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9Njc5OT1zdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhcbmZzL29jZnMyL3hhdHRyLmM6NjgwMDpcdFx0XHRcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNjgwMS1cdFx0XHRcdHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqeHRfZXQsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02ODg0LVxuZnMvb2NmczIveGF0dHIuYzo2ODg1OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL3hhdHRyLmMtNjg4Ni1cdFx0XHRcdHU2NCBibGtubywgdTY0IG5ld19ibGtubywgdTMyIGNsdXN0ZXJzLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjg4OS1cdFx0XHRcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuZnMvb2NmczIveGF0dHIuYzo2ODkwOlx0XHRcdFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzKVxuZnMvb2NmczIveGF0dHIuYy02ODkxLXtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY5MzgtXG5mcy9vY2ZzMi94YXR0ci5jOjY5Mzk6XHRcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKGhhbmRsZSwgYXJncy1cdTAwM2VyZWZsaW5rLFxuZnMvb2NmczIveGF0dHIuYy02OTQwLVx0XHRcdFx0XHRhcmdzLVx1MDAzZW9sZF9idWNrZXQtXHUwMDNlYnVfYmhzWzBdLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjk3NS1cbmZzL29jZnMyL3hhdHRyLmM6Njk3NjpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvb2NmczIveGF0dHIuYy02OTc3LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3hhdHRyLmM6Njk3ODpcdFx0XHRcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNjk3OS1cdFx0XHRcdHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDA5LVxuZnMvb2NmczIveGF0dHIuYzo3MDEwOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldChoYW5kbGUsIGJsa25vLFxuZnMvb2NmczIveGF0dHIuYy03MDExLVx0XHRcdFx0XHRcdCBuZXdfYmxrbm8sIG51bV9jbHVzdGVycyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwMzItXG5mcy9vY2ZzMi94YXR0ci5jOjcwMzM6XHRcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cygodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubyxcbmZzL29jZnMyL3hhdHRyLmMtNzAzNC1cdFx0XHRcdFx0XHQgIG51bV9jbHVzdGVycywgcmVmbGlua19jcG9zKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwNDYtICovXG5mcy9vY2ZzMi94YXR0ci5jOjcwNDc6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvb2NmczIveGF0dHIuYy03MDQ4LVx0XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzA1NS1cdGhhbmRsZV90ICpoYW5kbGU7XG5mcy9vY2ZzMi94YXR0ci5jOjcwNTY6XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxuZnMvb2NmczIveGF0dHIuYzo3MDU3Olx0XHRcdChzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKilwYXJhO1xuZnMvb2NmczIveGF0dHIuYy03MDU4LVx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwNjItXG5mcy9vY2ZzMi94YXR0ci5jOjcwNjM6XHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYygodW5zaWduZWQgbG9uZyBsb25nKWJsa25vLCBsZW4pO1xuZnMvb2NmczIveGF0dHIuYy03MDY0LVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzA4My1cbmZzL29jZnMyL3hhdHRyLmM6NzA4NDpcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyhoYW5kbGUsIGlub2RlLCBhcmdzLCBcdTAwMjZldCxcbmZzL29jZnMyL3hhdHRyLmMtNzA4NS1cdFx0XHRcdFx0ICBtZXRhX2FjLCBkYXRhX2FjLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzEwNC0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzEwNTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNzEwNi1cdFx0XHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDktXHRpbnQgcmV0O1xuZnMvb2NmczIveGF0dHIuYzo3MTEwOlx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHBhcmE7XG5mcy9vY2ZzMi94YXR0ci5jLTcxMTEtXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTMwLVx0cmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhhcmdzLVx1MDAzZW9sZF9pbm9kZSwgYmxrX2JoLFxuZnMvb2NmczIveGF0dHIuYzo3MTMxOlx0XHRcdFx0XHQgICAgICBvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyxcbmZzL29jZnMyL3hhdHRyLmMtNzEzMi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2cGFyYSk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTQxLVxuZnMvb2NmczIveGF0dHIuYzo3MTQyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNzE0My1cdFx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTYxLVx0aWYgKCFpbmRleGVkKVxuZnMvb2NmczIveGF0dHIuYzo3MTYyOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XG5mcy9vY2ZzMi94YXR0ci5jLTcxNjMtXHRlbHNlXG5mcy9vY2ZzMi94YXR0ci5jOjcxNjQ6XHRcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZShhcmdzLCBibGtfYmgsIG5ld19ibGtfYmgpO1xuZnMvb2NmczIveGF0dHIuYy03MTY1LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXG5mcy9vY2ZzMi94YXR0ci5jOjcxNzM6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzQte1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE4MS1cbmZzL29jZnMyL3hhdHRyLmM6NzE4MjppbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTcxODMtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzIxNi1cdGVsc2VcbmZzL29jZnMyL3hhdHRyLmM6NzIxNzpcdFx0YXJncy54YXR0cl9yZWZsaW5rZWQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5O1xuZnMvb2NmczIveGF0dHIuYy03MjE4LVxuZnMvb2NmczIveGF0dHIuYy03MjE5LVx0aWYgKG9pLVx1MDAzZWlwX2R5bl9mZWF0dXJlcyBcdTAwMjYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7XG5mcy9vY2ZzMi94YXR0ci5jOjcyMjA6XHRcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5saW5lKFx1MDAyNmFyZ3MpO1xuZnMvb2NmczIveGF0dHIuYy03MjIxLVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MjM2LVxuZnMvb2NmczIveGF0dHIuYzo3MjM3Olx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhcdTAwMjZhcmdzLCBibGtfYmgpO1xuZnMvb2NmczIveGF0dHIuYy03MjM4LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTc4PWludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmgtODItXHRcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTtcbmZzL29jZnMyL3hhdHRyLmg6ODM6aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuZnMvb2NmczIveGF0dHIuaC04NC1cdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDc5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFJlZmxpbmsgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgb2NmczJfcmVmbGlua2AgZ2V0cyBpbnZva2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjYWxsIGNoYWluIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBgb2NmczJfcmVmbGlua2AgaXMgY2FsbGVkIGJ5IGBvY2ZzMl92ZnNfcmVmbGlua2AsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rX2lvY3RsYC4gQW5kIHRoYXQgYG9jZnMyX3JlZmxpbmtfaW9jdGxgIGZ1bmN0aW9uPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgb2NmczJfaW9jdGxgIGl0c2VsZiwgc3BlY2lmaWNhbGx5IHdoZW4gYW4gYE9DRlMyX0lPQ19SRUZMSU5LYCBpb2N0bCBpcyBpc3N1ZWQuIFNvLCBpbiBlZmZlY3QsIHRoaXMgcmVmbGluayBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdGhyb3VnaCBhbiBpb2N0bCBjYWxsLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBJJiMzOTttIGp1c3QgY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uOiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIEZyb20gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGxvb2sgYXQgaXRzIGNhbGwgY2hhaW4uIEl0IHNlZW1zIHRoYXQgdGhpcyBoYW5kbGUgaXMgY2FsbGVkIGZyb20gYG9jZnMyX3hhdHRyX3NldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MjE0PXN0YXRpYyBpbnQgb2NmczJfc2V0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL29jZnMyL2FjbC5jLTI0OS1cdGlmIChoYW5kbGUpXG5mcy9vY2ZzMi9hY2wuYzoyNTA6XHRcdHJldCA9IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsIG5hbWVfaW5kZXgsXG5mcy9vY2ZzMi9hY2wuYy0yNTEtXHRcdFx0XHRcdCAgICAgXCYjMzQ7XCYjMzQ7LCB2YWx1ZSwgc2l6ZSwgMCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTMzMDU9c3RhdGljIGludCBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zMzYwLVxuZnMvb2NmczIveGF0dHIuYzozMzYxOnN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjItXHRcdFx0XHQgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNTAyLSAqL1xuZnMvb2NmczIveGF0dHIuYzozNTAzOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTM1MDQtXHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTM1NjYtXG5mcy9vY2ZzMi94YXR0ci5jOjM1Njc6XHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuZnMvb2NmczIveGF0dHIuYy0zNTY4LVxuLS1cbmZzL29jZnMyL3hhdHRyLmM9MzU4Mz1pbnQgb2NmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNzAzLVxuZnMvb2NmczIveGF0dHIuYzozNzA0Olx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXHUwMDI2eGksIFx1MDAyNnhpcywgXHUwMDI2eGJzLCBcdTAwMjZjdHh0KTtcbmZzL29jZnMyL3hhdHRyLmMtMzcwNS1cdG9jZnMyX3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhjdHh0LmhhbmRsZSwgaW5vZGUsIDApO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzM3Nj1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTczODIte1xuZnMvb2NmczIveGF0dHIuYzo3MzgzOlx0cmV0dXJuIG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTczODQtXHRcdFx0XHQgICAgIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuLS1cbmZzL29jZnMyL3hhdHRyLmg9Mzg9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKixcbmZzL29jZnMyL3hhdHRyLmgtMzktXHRcdCAgICBzaXplX3QsIGludCk7XG5mcy9vY2ZzMi94YXR0ci5oOjQwOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbmZzL29jZnMyL3hhdHRyLmgtNDEtXHRcdFx0ICAgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9DRlMyIEFDTCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmb3IgT0NGUzIgQUNMcy4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9zZXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0YC4gYG9jZnMyX3NldF9hY2xgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW9wX3NldF9hY2xgLCB3aGlsZSBgb2NmczJfaW5pdF9zZWN1cml0eV9zZXRgIGlzIGNhbGxlZCBmcm9tIGBvY2ZzMl9ta25vZF9sb2NrZWRgLgoKVGhhdCBnaXZlcyBtZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcml0aWNhbDogYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBmb2N1c2luZyBvbiBgb2NmczJfaW5pdF9hY2xgIGFzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50IHRoYW4gdGhlIG1vcmUgZ2VuZXJhbCBgb2NmczJfbWtub2RgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIEkmIzM5O20gemVyb2luZyBpbiBvbiBhcmU6CgoqICAgYG9jZnMyX2luaXRfYWNsYAoqICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgCiogICBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAKKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgCiogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAKKiAgIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgb2NmczJfaW5pdF9hY2xgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIHN0YXRpYy4gSSBjYW4gc2VlIGl0JiMzOTtzIGRlZmluZWQgaW4gYGZzL29jZnMyL2FjbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGZzL29jZnMyL2FjbC5oYC4gTG9va3MgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBhcmUgaW4gYGZzL29jZnMyL2FjbC5jYCBhcyB3ZWxsLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbiBgZnMvb2NmczIveGF0dHIuY2AuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGtub3cgT0NGUzIgbmVlZHMgYE9DRlMyX0ZTYCwgYW5kIGl0IGRlcGVuZHMgb24gYENPTkZJR0ZTX0ZTYC4gQW5kIEkgc2VlIHRoYXQgYEZTX1BPU0lYX0FDTGAgaXMgc2VsZWN0ZWQgYnkgYE9DRlMyX0ZTYC4KCkkgbmVlZCB0byBjaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgYWdhaW4gdG8gY29uZmlybSBhbGwgb2YgdGhpcy4KWWVzLCB0aGUgS2NvbmZpZyBjb25maXJtczoKYGNvbmZpZyBPQ0ZTMl9GU2AKYGRlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgCmBzZWxlY3QgRlNfUE9TSVhfQUNMYAoKQWxyaWdodCwgdGhhdCBtZWFucyBJIHNob3VsZCB0cmFjayB0aGUgZm9sbG93aW5nIGNvbmZpZyBvcHRpb25zOgoKKiAgIGBPQ0ZTMl9GU2AKKiAgIGBDT05GSUdGU19GU2AKCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogYE9DRlMyX0ZTYCAqc2VsZWN0cyogYEZTX1BPU0lYX0FDTGAuIERvZXMgT0NGUzIgYWxzbyBoYXZlIGFueSBvdGhlciBzZXR0aW5ncyBmb3IgYFBPU0lYX0FDTGA/IEkmIzM5O2QgYmV0dGVyIGNoZWNrIGBmcy9vY2ZzMi9LY29uZmlnYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQT1NJWF9BQ0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4tLVxuZnMvb2NmczIvYWNsLmM9MTEzPXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0xMjItXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjEyMzpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0xMjQtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMTI1LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MTI2Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0xMjctXHRcdGJyZWFrO1xuLS1cbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMzEtXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjIzMjpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0yMzMtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMjM0LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MjM1Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0yMzYtXHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuLS1cbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzA0LVx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9vY2ZzMi9hY2wuYzozMDU6XHRpZiAoIShvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzI5LVxuZnMvb2NmczIvYWNsLmM6MzMwOlx0aWYgKCEob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxuZnMvb2NmczIvYWNsLmMtMzMxLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvYWNsLmMtMzcyLVxuZnMvb2NmczIvYWNsLmM6MzczOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy0zNzQtXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi0tXG5mcy9vY2ZzMi9hY2wuYz00MTQ9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvYWNsLmMtNDI1LVxuZnMvb2NmczIvYWNsLmM6NDI2Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00MjctXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4tLVxuZnMvb2NmczIvYWNsLmMtNDQyLVxuZnMvb2NmczIvYWNsLmM6NDQzOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00NDQtXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oPTI1Nz1lbnVtIG9jZnMyX21vdW50X29wdGlvbnNcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2Ni1cdE9DRlMyX01PVU5UX0lOT0RFNjQgPSAxIFx1MDAzY1x1MDAzYyA3LFx0LyogQWxsb3cgaW5vZGUgbnVtYmVycyBcdTAwM2UgMl4zMiAqL1xuZnMvb2NmczIvb2NmczIuaDoyNjc6XHRPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgPSAxIFx1MDAzY1x1MDAzYyA4LFx0LyogRm9yY2UgUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi9cbmZzL29jZnMyL29jZnMyLmg6MjY4Olx0T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSBcdTAwM2NcdTAwM2MgOSxcdC8qIERpc2FibGUgUE9TSVggYWNjZXNzXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2OS1cdFx0XHRcdFx0XHQgICBjb250cm9sIGxpc3RzICovXG4tLVxuZnMvb2NmczIvc3VwZXIuYz02MDc9c3RhdGljIGludCBvY2ZzMl9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvb2NmczIvc3VwZXIuYy03MTctXHRcdHNiLVx1MDAzZXNfZmxhZ3MgPSAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgflNCX1BPU0lYQUNMKSB8XG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcdFx0XHQoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/XG5mcy9vY2ZzMi9zdXBlci5jLTcxOS1cdFx0XHRcdFx0XHRcdFNCX1BPU0lYQUNMIDogMCk7XG4tLVxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjQtXHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTIzMj1zdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlx0aWYgKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTI2Ny1cdC8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi9cbmZzL29jZnMyL3N1cGVyLmM6MTI2ODpcdGlmICghKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiAoT0NGUzJfTU9VTlRfUE9TSVhfQUNMIHxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcdFx0XHRcdCAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkge1xuZnMvb2NmczIvc3VwZXIuYy0xMjcwLVx0XHRpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKVxuZnMvb2NmczIvc3VwZXIuYzoxMjcxOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3Mi1cdFx0ZWxzZVxuZnMvb2NmczIvc3VwZXIuYzoxMjczOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cdH1cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTM4NC1cdFx0aWYgKHJlc3VsdC5uZWdhdGVkKSB7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODU6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYzoxMzg2Olx0XHRcdG1vcHQtXHUwMDNlbW91bnRfb3B0IFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTM4Ny1cdFx0fSBlbHNlIHtcbmZzL29jZnMyL3N1cGVyLmM6MTM4ODpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVx0XHR9XG4tLVxuZnMvb2NmczIvc3VwZXIuYz0xNDE2PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXG5mcy9vY2ZzMi9zdXBlci5jOjE0ODU6XHRpZiAob3B0cyBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxuZnMvb2NmczIvc3VwZXIuYy0xNDg2LVx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyxhY2xcJiMzNDspO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9MTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7XG5mcy9vY2ZzMi94YXR0ci5jLTEwMi1cdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVx0XHQ9IFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcbmZzL29jZnMyL3hhdHRyLmM6MTAzOlx0W09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuZnMvb2NmczIveGF0dHIuYzoxMDQ6XHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfZGVmYXVsdCxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVx0W09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdXHRcdD0gXHUwMDI2b2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjE0PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYyNi1cbmZzL29jZnMyL3hhdHRyLmM6NjI3Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi94YXR0ci5jLTYyOC1cdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjc4LVx0fVxuZnMvb2NmczIveGF0dHIuYzo2Nzk6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL3hhdHRyLmMtNjgwLVx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYz04OTE9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIveGF0dHIuYy05MDYtXG5mcy9vY2ZzMi94YXR0ci5jOjkwNzpcdGNhc2UgT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzpcbmZzL29jZnMyL3hhdHRyLmM6OTA4Olx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcbmZzL29jZnMyL3hhdHRyLmMtOTA5LVx0XHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9QT1NJWEFDTCkpXG4tLVxuZnMvb2NmczIveGF0dHIuYz03MTczPXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE3Ny1cdHJldHVybiB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZIFx1MDAyNlx1MDAyNlxuZnMvb2NmczIveGF0dHIuYzo3MTc4Olx0ICAgICAgIHR5cGUgIT0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyBcdTAwMjZcdTAwMjZcbmZzL29jZnMyL3hhdHRyLmM6NzE3OTpcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xuZnMvb2NmczIveGF0dHIuYy03MTgwLX1cbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XG5mcy9vY2ZzMi94YXR0ci5oLTE1LVx0T0NGUzJfWEFUVFJfSU5ERVhfVVNFUiA9IDEsXG5mcy9vY2ZzMi94YXR0ci5oOjE2Olx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyxcbmZzL29jZnMyL3hhdHRyLmg6MTc6XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbmZzL29jZnMyL3hhdHRyLmgtMTgtXHRPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg2MQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBPQ0ZTMiBBQ0wgaW5pdGlhbGl6YXRpb24gY29kZSBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogaXQuICBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBob3cgQUNMcyBhcmUgaGFuZGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rIG9wZXJhdGlvbnMgc3BlY2lmaWNhbGx5LiBJdCBzZWVtcyB0aGUgbG9naWMgYXJvdW5kIGZldGNoaW5nLCBkdXBsaWNhdGluZywgYW5kIHNldHRpbmcgQUNMcyBpcyBiZWluZyByZXZpc2VkLCBhbmQgdGhlcmUmIzM5O3Mgc29tZSBsb2NraW5nIGJlaGF2aW9yIGNoYW5nZSBhcm91bmQgeGF0dHIgc2V0dGluZy4gVGhpcyBpcyAqY29yZSogZmlsZXN5c3RlbSBzdHVmZjsgd2UgKm5lZWQqIHRvIGZ1enogdGhpcyB0byBlbnN1cmUgbm8gbmFzdHkgYnVncyBzbGlwcGVkIGluLgoKRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGBGU19QT1NJWF9BQ0xgIGlmIEkgc3BlY2lmeSBgT0NGUzJfRlNgLCB3aGljaCBpcyBncmVhdCwgbGVzcyBjbHV0dGVyLiAgTGV0JiMzOTtzIHNlZSwgYE9DRlMyX0ZTYCBkZXBlbmRzIG9uIGBJTkVUYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AuICBTaW5jZSBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIHByZXR0eSBzdGFuZGFyZCwgdGhlIGltcG9ydGFudCBvbmUgdG8gZW5zdXJlIHdlIGhhdmUgZW5hYmxlZCBpcyBgQ09ORklHRlNfRlNgLiBUaHVzLCBJJiMzOTtsbCBuZWVkIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQsIGFzIHN1Y2gsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIFJlYXNvbmluZyBpcyB0aGF0IGl0IGRlYWxzIHdpdGggQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgY2FuIGxlYWQgdG8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvY2tpbmcgaXNzdWVzLiAgSSYjMzk7dmUgZGVjaWRlZCBvbiB0aGUgZm9sbG93aW5nIGBGb2N1c1N5bWJvbHNgOgoKKiAgIGBvY2ZzMl9pbml0X2FjbGAKKiAgIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYAoqICAgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgCiogICBgb2NmczJfY2FsY194YXR0cl9pbml0YAoqICAgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgCiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYAoKU28sIHRvIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgRW5hYmxlQ29uZmlnc2A6CgoqICAgYE9DRlMyX0ZTYAoqICAgYENPTkZJR0ZTX0ZTYAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiAgYElORVRgIGFuZCBgU1lTRlNgIGFyZSBjb21tb24gZW5vdWdoIHRvIG5vdCB3b3JyeSBhYm91dC4gRExNIGlzIHVzZWQgd2l0aCBgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJgLCBidXQgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgbG9jYWwgbW91bnRzIGFuZCB0aGF0IGl0IGNhbiB1c2UgbG9jYWwgbW91bnQgb3IgTzJDQi4gQXMgTzJDQiBpcyB0aGUgZGVmYXVsdCwgSSB0aGluayBJJiMzOTttIGdvb2QgdG8gZ28uCgpJIHdhcyBicmllZmx5IGNvbnNpZGVyaW5nIGBvY2ZzMl9ta25vZGAgYXMgYSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGF0IHNlZW1zIGEgYml0IHRvbyBicm9hZC4gVGhlIEFDTC1zcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7dmUgc2VsZWN0ZWQgYXJlIGRlZmluaXRlbHkgdGhlIGJldHRlciB0YXJnZXRzLiBUaHVzLCBJJiMzOTtsbCBzdGljayB0byBteSBzZWxlY3RlZCBzeW1ib2xzLiBJIGFtIG5vdyBjb25maWRlbnQgaW4gbXkgc2VsZWN0aW9uIGFuZCBJIHdpbGwgc3VibWl0IHRoaXMgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEFDTCBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBPQ0ZTMiwgc3BlY2lmaWNhbGx5IGR1cmluZyBpbm9kZSBjcmVhdGlvbiAobWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmspLiBJdCBjaGFuZ2VzIGhvdyBBQ0xzIGFyZSBmZXRjaGVkLCBkdXBsaWNhdGVkLCBhbmQgc2V0LCBhbmQgbW9kaWZpZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIHhhdHRyIHNldHRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzE6NDUuMjIzNzMyMTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0MTA1ODc1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3JlbGVhc2VcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaykuIEl0IGNoYW5nZXMgaG93IEFDTHMgYXJlIGZldGNoZWQsIGR1cGxpY2F0ZWQsIGFuZCBzZXQsIGFuZCBtb2RpZmllcyB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgeGF0dHIgc2V0dGluZy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjQ1LjIyMzczNzUxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMjU1NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWUwZjllYmZiZDUwODFhYzY4MDA3NzQ1MDZlN2EyMzg5YTY4ZTM4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjozMTo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXFxuaW5kZXggYWYxZTJjZWRiMjE3ZjEuLjA5MGVjNjBmYjU3NmE2IDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXFxuKysrIGIvZnMvb2NmczIvYWNsLmNcXG5AQCAtMTEwLDggKzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXFxuIFxcdHJldHVybiBvY2ZzMl9hY2w7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgdHlwZSxcXG4rc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKVxcbiB7XFxuIFxcdGludCBuYW1lX2luZGV4O1xcbkBAIC0zNDksNjMgKzM0OCwxMDUgQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcXG4gICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxcbiAgKi9cXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLVxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxcbi1cXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWFjbCk7XFxuK1xcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdHN0YXRlLVxcdTAwM2VhY2wgPSBOVUxMO1xcbit9XFxuK1xcbitpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMO1xcbi1cXHRpbnQgcmV0ID0gMCwgcmV0MjtcXG4tXFx0dW1vZGVfdCBtb2RlO1xcbi1cXG4tXFx0aWYgKCFTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuLVxcdFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRcXHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGRpcl9iaCk7XFxuLVxcdFxcdFxcdHVwX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0aWYgKElTX0VSUihhY2wpKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihhY2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdHN0YXRlLVxcdTAwM2VhY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlbW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuK1xcbitcXHRpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsID1cXG4rXFx0XFx0XFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xcbitcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdGlmIChJU19FUlIoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKCFhY2wpIHtcXG4tXFx0XFx0XFx0bW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGUgXFx1MDAyNiB+Y3VycmVudF91bWFzaygpO1xcbi1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xcbi1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcXHUwMDI2c3RhdGUtXFx1MDAzZWFjbCwgR0ZQX05PRlMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c3RhdGUtXFx1MDAzZW1vZGUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0XFx0XFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWFjbCk7XFxuK1xcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VhY2wgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXHRcXHRcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XFxuIFxcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZW1vZGUgXFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcXG4gXFx0fVxcbi1cXHRpZiAoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFxcdTAwMjZcXHUwMDI2IGFjbCkge1xcbi1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2NsZWFudXA6XFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4gXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfREVGQVVMVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCwgbWV0YV9hYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGFfYWMpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuLVxcdFxcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcXHUwMDI2YWNsLCBHRlBfTk9GUywgXFx1MDAyNm1vZGUpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XFxuLVxcdFxcdGlmIChyZXQyKSB7XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0Mik7XFxuLVxcdFxcdFxcdHJldCA9IHJldDI7XFxuLVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cXHUwMDNlbW9kZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cXHUwMDNlYWNsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1jbGVhbnVwOlxcbi1cXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXFxuKysrIGIvZnMvb2NmczIvYWNsLmhcXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcXG4gaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSB7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XFxuK1xcdHVtb2RlX3QgbW9kZTtcXG4rfTtcXG4rXFxuK2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuIFxcbiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZWEzN2E1MDU4MDg5MGMgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHNpZ3NldF90IG9sZHNldDtcXG4gXFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcXG4gXFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuIFxcbiBcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiBcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG5AQCAtMzMwLDEwICszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGxlYXZlO1xcbitcXG4gXFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXFxuLVxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSk7XFxuK1xcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgyLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi44NmYwMjkzNjgxZmNjZiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSxcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxcbi1cXHRcXHRcXHQgIGludCAqd2FudF9tZXRhKVxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gXFxuIFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJcXFwiLCBOVUxMLCAwKTtcXG4tXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbi1cXHRcXHRcXHRpZiAoU19JU0RJUihtb2RlKSlcXG4tXFx0XFx0XFx0XFx0YV9zaXplIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcXHUwMDI2XFx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XFxuLVxcdFxcdFxcdHJldCA9IGFjbF9sZW47XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC02ODMsMTQgKzY3NiwzMyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiBcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIFxcdH1cXG4tXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbi1cXHRcXHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXFxuLVxcdFxcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcXG4tXFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuLVxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuLVxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9XFxuK1xcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhY2xfbGVuKTtcXG4rXFx0XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz1cXG4rXFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jbHVzdGVycyk7XFxuK1xcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbitcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbitcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuK1xcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0zNDgzLDkgKzM0OTUsMTAgQEAgc3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4gfVxcbiBcXG4gLypcXG4tICogVGhpcyBmdW5jdGlvbiBvbmx5IGNhbGxlZCBkdWluZyBjcmVhdGluZyBpbm9kZVxcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXFxuLSAqIEFsbCB0cmFuc2FuY3Rpb24gY3JlZGl0cyBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gbWtub2QuXFxuKyAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlXFxuKyAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cXG4rICogT3JkaW5hcnkgeGF0dHIgdXBkYXRlcyBtdXN0IHVzZSBvY2ZzMl94YXR0cl9zZXQoKS5cXG4rICogQWxsIHRyYW5zYWN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kIG9yIHN5bWxpbmsgY2FsbGVycy5cXG4gICovXFxuIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuQEAgLTM1NDIsOCArMzU1NSw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdHhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoO1xcbiBcXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXFx1MDAzZWJfZGF0YTtcXG4gXFxuLVxcdGRvd25fd3JpdGUoXFx1MDAyNk9DRlMyX0koaW5vZGUpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXG4gXFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXFx1MDAyNnhpcyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5AQCAtMzU1Niw3ICszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuIFxcbiBjbGVhbnVwOlxcbi1cXHR1cF93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuIFxcdGJyZWxzZSh4YnMueGF0dHJfYmgpO1xcbiBcXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcXG4gXFxuQEAgLTcyNTcsNiArNzI2Nyw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcXG4rXFx0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcXG4gXFxuIFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTcyNjksMTAgKzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuLVxcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcbit1bmxvY2s6XFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIFxcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xcbiBcXHRicmVsc2UoZGlyX2JoKTtcXG4gbGVhdmU6XFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmhcXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXFxuQEAgLTU1LDkgKzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbiBcXHRcXHRcXHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4tXFx0XFx0XFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbi1cXHRcXHRcXHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xcbitcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcXG4gXFxuIC8qXFxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjQ1Ljc0NjkzODA3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2ODg3MzcxNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX3hhdHRyX3NldF9oYW5kbGVcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEFDTCBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBPQ0ZTMiwgc3BlY2lmaWNhbGx5IGR1cmluZyBpbm9kZSBjcmVhdGlvbiAobWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmspLiBJdCBjaGFuZ2VzIGhvdyBBQ0xzIGFyZSBmZXRjaGVkLCBkdXBsaWNhdGVkLCBhbmQgc2V0LCBhbmQgbW9kaWZpZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIHhhdHRyIHNldHRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZTBmOWViZmJkNTA4MWFjNjgwMDc3NDUwNmU3YTIzODlhNjhlMzg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6MzE6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMDkwZWM2MGZiNTc2YTYgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG4gICovXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuK1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuK1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbit9XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4rXHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdFx0fVxuK1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdGlmIChyZXQgPT0gMCkge1xuK1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbitcdFx0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1xuK1x0cmV0dXJuIDA7XG4rY2xlYW51cDpcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiBcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuLVx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLFxuLVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuK1x0XHRcdFx0XHQgICAgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXG4rXHRcdFx0XHRcdCAgICBkYXRhX2FjKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdGlmIChyZXQyKSB7XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQyKTtcbi1cdFx0XHRyZXQgPSByZXQyO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcbi1cdFx0XHRcdFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHN0YXRlLVx1MDAzZW1vZGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRtbG9nX2Vycm5vKHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9BQ0NFU1MsIHN0YXRlLVx1MDAzZWFjbCxcbitcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Zi4uYTkxZjljZTI3OGQ2ZDMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxuKysrIGIvZnMvb2NmczIvYWNsLmhcbkBAIC0yMCw5ICsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuK3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUge1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7XG4rXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XG4rXHR1bW9kZV90IG1vZGU7XG4rfTtcbitcbitpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbitcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4gXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi5lYTM3YTUwNTgwODkwYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNTYsNiArMjU2LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHNpZ3NldF90IG9sZHNldDtcbiBcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbitcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTMzMCwxMCArMzMxLDE0IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdH1cbiBcdH1cbiBcbitcdHN0YXR1cyA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgcGFyZW50X2ZlX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHN0YXR1cyBcdTAwM2MgMClcbitcdFx0Z290byBsZWF2ZTtcbitcbiBcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xuLVx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgcGFyZW50X2ZlX2JoLCBtb2RlLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSk7XG4rXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIFx0XHRnb3RvIGxlYXZlO1xuQEAgLTQxMSw4ICs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuK1x0XHRcdFx0XHUwMDI2YWNsX3N0YXRlKTtcbiBcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuQEAgLTQ3Nyw2ICs0ODIsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4rXG4gXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFx1MDAyNmxvb2t1cCk7XG4gXG4gXHRpZiAoaW5vZGVfYWMpXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmNcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi44NmYwMjkzNjgxZmNjZiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwiXCIsIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuK1x0XHR9XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbitcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuK1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbitcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICs9XG4rXHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbitcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM0ODMsOSArMzQ5NSwxMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiAvKlxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXG4tICogQWxsIHRyYW5zYW5jdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZC5cbisgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxuKyAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cbisgKiBPcmRpbmFyeSB4YXR0ciB1cGRhdGVzIG11c3QgdXNlIG9jZnMyX3hhdHRyX3NldCgpLlxuKyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXG4gICovXG4gaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuQEAgLTM1NDIsOCArMzU1NSw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcbiBcdGRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC1cdTAwM2ViX2RhdGE7XG4gXG4tXHRkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXG4gXHRyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBcdTAwMjZ4aXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTM1NTYsNyArMzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgKzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbit1bmxvY2s6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNWNkZDZjNmI0MDA2NGIgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSArNTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxuIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuIFx0XHRcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuLVx0XHRcdCAgaW50ICosIGludCAqLCBpbnQgKik7XG4rXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4rXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4rXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbitcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpO1xuIFxuIC8qXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjQ1Ljc0Njk0MDI5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzI1NjM1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgT0NGUzIgQUNMIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgT0NGUzIsIGFuZCBpdCBzZWVtcyBsaWtlIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSB0byBBQ0wgaW5pdGlhbGl6YXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCByZXN0cnVjdHVyaW5nIGhvdyBBQ0xzIGFyZSBoYW5kbGVkLCB3aXRoIG5ldyBmdW5jdGlvbnMgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGUgZmFjdCB0aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIG5vdyB0YWtpbmcgYW4gYG9jZnMyX2FjbF9zdGF0ZWAgaW5zdGVhZCBvZiBhIGBidWZmZXJfaGVhZGAgaW5kaWNhdGVzIGEgc2hpZnQgaW4gaG93IEFDTCBkYXRhIGlzIG1hbmFnZWQgZHVyaW5nIHhhdHRyIGNhbGN1bGF0aW9ucy4gQW5kIHRoYXQgYGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKWAgY2FsbCBpcyBnb25lIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gc29tZXRoaW5nIHRoYXQncyBwcmFjdGljYWxseSBmdXp6YWJsZS4gT0NGUzIgaXMgYSBmaWxlc3lzdGVtLCBzbyB5ZWFoLCBhYnNvbHV0ZWx5IGl0IGlzLiBJIGNhbiBzZXQgdXAgYSBsb29wYmFjayBkZXZpY2Ugb3Igc29tZXRoaW5nIHNpbWlsYXIsIG1vdW50IGl0LCBhbmQgc3RhcnQgdGhyb3dpbmcgdGhpbmdzIGF0IGl0LiBUaGUgcG90ZW50aWFsIGZvciBmdXp6aW5nIGlzIGRlZmluaXRlbHkgdGhlcmUuXG5cbkxldCBtZSBzZWUsIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBmb3IgT0NGUzI/IENsZWFybHksIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBiYXNlLCBidXQgc2luY2UgdGhpcyBwYXRjaCB0b3VjaGVzIEFDTHMsIGBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMYCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgdGhlbiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMTo1MS4wNzk1MDYyMThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNTIxNjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0NGUzJfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMTo1My4yMTQ3Mjg2NzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIzODk2MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgaW4gYGZzL29jZnMyL0tjb25maWdgKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHNvbWUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIGBmcy9vY2ZzMi9LY29uZmlnYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgYWxtb3N0IGNlcnRhaW5seSB3aGVyZSB0aGUgb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyBhcmUgZGVmaW5lZCBmb3IgT0NGUzIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgd2hlcmUgSSB3b3VsZCAqYWx3YXlzKiBiZWdpbiB3aGVuIGRpZ2dpbmcgaW50byBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIHNlZSBpZiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZXhwbGljaXRseSBzdGF0ZWQsIG9yIGlmIEkgd2lsbCBoYXZlIHRvIGRvIGEgZGVlcGVyIGRpZyBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzE6NTcuNzM4NjI3NDU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBPQ0ZTMl9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IFFVT1RBXFxuICAgOTpcXHRcXHRzZWxlY3QgUVVPVEFfVFJFRVxcbiAgMTA6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgMTE6XFx0XFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgT0NGUzIgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZXh0ZW50IGJhc2VkIHNoYXJlZCBkaXNrIGNsdXN0ZXIgZmlsZVxcbiAgMTQ6XFx0XFx0ICBzeXN0ZW0gd2l0aCBtYW55IHNpbWlsYXJpdGllcyB0byBleHQzLiBJdCBzdXBwb3J0cyA2NCBiaXQgaW5vZGVcXG4gIDE1OlxcdFxcdCAgbnVtYmVycywgYW5kIGhhcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGluZyBtZXRhZGF0YSBncm91cHMgd2hpY2ggbWF5XFxuICAxNjpcXHRcXHQgIGFsc28gbWFrZSBpdCBhdHRyYWN0aXZlIGZvciBub24tY2x1c3RlcmVkIHVzZS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBZb3UnbGwgd2FudCB0byBpbnN0YWxsIHRoZSBvY2ZzMi10b29scyBwYWNrYWdlIGluIG9yZGVyIHRvIGF0IGxlYXN0XFxuICAxOTpcXHRcXHQgIGdldCBcXFwibW91bnQub2NmczJcXFwiLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHQgIFByb2plY3Qgd2ViIHBhZ2U6ICAgIGh0dHBzOi8vb2NmczIud2lraS5rZXJuZWwub3JnL1xcbiAgMjI6XFx0XFx0ICBUb29scyB3ZWIgcGFnZTogICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFya2Zhc2hlaC9vY2ZzMi10b29sc1xcbiAgMjM6XFx0XFx0ICBPQ0ZTMiBtYWlsaW5nIGxpc3RzOiBodHRwczovL3N1YnNwYWNlLmtlcm5lbC5vcmcvbGlzdHMubGludXguZGV2Lmh0bWxcXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0ZTMiwgc2VlIHRoZSBmaWxlXFxuICAyNjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIucnN0XFx1MDAzZS5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG4gIDI5OlxcdFxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuICAzMTpcXHRcXHRkZWZhdWx0IHlcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgT0NGUzIgaW5jbHVkZXMgYSBzaW1wbGUga2VybmVsc3BhY2UgY2x1c3RlcmluZyBwYWNrYWdlLCB0aGUgT0NGUzJcXG4gIDM0OlxcdFxcdCAgQ2x1c3RlciBCYXNlLiAgSXQgb25seSByZXF1aXJlcyBhIHZlcnkgc21hbGwgdXNlcnNwYWNlIGNvbXBvbmVudFxcbiAgMzU6XFx0XFx0ICB0byBjb25maWd1cmUgaXQuIFRoaXMgY29tZXMgd2l0aCB0aGUgc3RhbmRhcmQgb2NmczItdG9vbHMgcGFja2FnZS5cXG4gIDM2OlxcdFxcdCAgTzJDQiBpcyBsaW1pdGVkIHRvIG1haW50YWluaW5nIGEgY2x1c3RlciBmb3IgT0NGUzIgZmlsZSBzeXN0ZW1zLlxcbiAgMzc6XFx0XFx0ICBJdCBjYW5ub3QgbWFuYWdlIGFueSBvdGhlciBjbHVzdGVyIGFwcGxpY2F0aW9ucy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBJdCBpcyBhbHdheXMgc2FmZSB0byBzYXkgWSBoZXJlLCBhcyB0aGUgY2x1c3RlcmluZyBtZXRob2QgaXNcXG4gIDQwOlxcdFxcdCAgcnVuLXRpbWUgc2VsZWN0YWJsZS5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuICA0MzpcXHRcXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFxcdTAwMjZcXHUwMDI2IERMTVxcbiAgNDU6XFx0XFx0ZGVmYXVsdCB5XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgT0NGUzIgdG8gdXNlIHVzZXJzcGFjZSBjbHVzdGVyaW5nIHNlcnZpY2VzXFxuICA0ODpcXHRcXHQgIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIERMTSBpbiBmcy9kbG0uICBJZiB5b3UgYXJlIHVzaW5nIGFcXG4gIDQ5OlxcdFxcdCAgdXNlcnNwYWNlIGNsdXN0ZXIgbWFuYWdlciwgc2F5IFkgaGVyZS5cXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0ICBJdCBpcyBzYWZlIHRvIHNheSBZLCBhcyB0aGUgY2x1c3RlcmluZyBtZXRob2QgaXMgcnVuLXRpbWVcXG4gIDUyOlxcdFxcdCAgc2VsZWN0YWJsZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuICA1NTpcXHRcXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcbiAgNTY6XFx0XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbiAgNTc6XFx0XFx0ZGVmYXVsdCB5XFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyBzb21lIGZzIHN0YXRpc3RpY3MgdG8gYmUgY2FwdHVyZWQuIEVuYWJsaW5nXFxuICA2MDpcXHRcXHQgIHRoaXMgb3B0aW9uIG1heSBpbmNyZWFzZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgT0NGUzJfREVCVUdfTUFTS0xPR1xcbiAgNjM6XFx0XFx0Ym9vbCBcXFwiT0NGUzIgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbiAgNjU6XFx0XFx0ZGVmYXVsdCB5XFxuICA2NjpcXHRcXHRoZWxwXFxuICA2NzpcXHRcXHQgIFRoZSBvY2ZzMiBmaWxlc3lzdGVtIGhhcyBhbiBleHRlbnNpdmUgbG9nZ2luZyBzeXN0ZW0uICBUaGUgc3lzdGVtXFxuICA2ODpcXHRcXHQgIGFsbG93cyBzZWxlY3Rpb24gb2YgZXZlbnRzIHRvIGxvZyB2aWEgZmlsZXMgaW4gL3N5cy9vMmNiL2xvZ21hc2svLlxcbiAgNjk6XFx0XFx0ICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwsIGJ1dCBpdCBhbGxvd3MgZGVidWdnaW5nIG9mXFxuICA3MDpcXHRcXHQgIG9jZnMyIGZpbGVzeXN0ZW0gaXNzdWVzLlxcbiAgNzE6XFx0XFxuICA3MjpcXHRjb25maWcgT0NGUzJfREVCVUdfRlNcXG4gIDczOlxcdFxcdGJvb2wgXFxcIk9DRlMyIGV4cGVuc2l2ZSBjaGVja3NcXFwiXFxuICA3NDpcXHRcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuICA3NTpcXHRcXHRkZWZhdWx0IG5cXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZXhwZW5zaXZlIGNvbnNpc3RlbmN5IGNoZWNrcy4gRW5hYmxlXFxuICA3ODpcXHRcXHQgIHRoaXMgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgb25seSBhcyBpdCBpcyBsaWtlbHkgdG8gZGVjcmVhc2VcXG4gIDc5OlxcdFxcdCAgcGVyZm9ybWFuY2Ugb2YgdGhlIGZpbGVzeXN0ZW0uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjU3LjczODcwNTY2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODA2OTE3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVjayBmb3IgT0NGUzIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgT0NGUzJfRlMgaXMgc2V0IHVwIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBkZXBlbmRzIG9uIElORVQsIFNZU0ZTLCBhbmQgQ09ORklHRlNfRlMuIEl0J3MgYWxzbyBzZWxlY3RpbmcgRlNfUE9TSVhfQUNMLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgbWVhbnMsIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgcHJvcGVybHkgZW5hYmxlZCwgSSByZWFsbHkgbmVlZCB0byB2ZXJpZnkgT0NGUzJfRlMsIElORVQsIFNZU0ZTLCBhbmQgQ09ORklHRlNfRlMgYXJlIGFsbCB0b2dnbGVkIG9uLlxuXG5XYWl0IGEgc2Vjb25kLCBJTkVUIGFuZCBTWVNGUyBhcmUgdXN1YWxseSBkZWZhdWx0IHNldHRpbmdzLCBzbyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlbSB0b28gbXVjaCByaWdodCBub3cuIENPTkZJR0ZTX0ZTIG1pZ2h0IGJlIHRoZSBzdGlja2luZyBwb2ludCwgdGhvdWdoLiBTbywgbXkgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdmVyaWZ5aW5nIE9DRlMyX0ZTIGFuZCBDT05GSUdGU19GUyBhcmUgZW5hYmxlZCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgYW5kIGZ1bmN0aW9uYWwgT0NGUzIgc2V0dXAuXG5cbk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gY29yZSBmdW5jdGlvbmFsaXR5LCBJJ20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgYSBsaXN0IG9mIE9DRlMyIGZ1bmN0aW9ucy4gSSB3aWxsIGZvY3VzIG9uOiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBUaGVzZSBzZWVtIGNydWNpYWwgZm9yIGZpbGUgY3JlYXRpb24sIEFDTCBoYW5kbGluZywgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLlxuXG5MZXQncyBzZWUgaWYgYG9jZnMyX21rbm9kYCBpcyByZWFjaGFibGUuIEl0IHNob3VsZCBiZSwgc2luY2UgaXQncyBhIHN0YW5kYXJkIGlub2RlIG9wZXJhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZSB0byBjaGVjayBteSBhc3N1bXB0aW9ucy4gVGhlbiwgSSBzZWUgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgY2FsbGVkIGZyb20gYG9jZnMyX3N5bWxpbmtgLiBMZXQncyBzZWUgaWYgYG9jZnMyX3N5bWxpbmtgIGlzIGNhbGxlZCBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYC4gSSB3aWxsIHZlcmlmeSBieSBjaGVja2luZyB0aGF0IHBhcnRpY3VsYXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjA0LjYxOTM5OTU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODc0MzM3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQyMzg9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cXHRpZiAoIXByZXNlcnZlKSB7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI5NzpcXHRcXHRlcnJvciA9IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChkaXIsIG5ld19vcnBoYW5faW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTcxODI9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjYzLSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzI2NDppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL3hhdHRyLmMtNzI2NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaD04Mz1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oLTg3LVxcdFxcdFxcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcXG5mcy9vY2ZzMi94YXR0ci5oOjg4OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIveGF0dHIuaC04OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjowNi42MDY4NDA2NTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0NDA2OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqT0NGUzIgU2VjdXJpdHkgQ29udGV4dCBEdXJpbmcgUmVmbGlua2luZyBhbmQgU3ltbGluayBDcmVhdGlvbioqXG5cblJpZ2h0LCBzbyBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGBvY2ZzMl9yZWZsaW5rYCBwYXRoLiBNYWtlcyBzZW5zZTsgd2UgbmVlZCB0byBwcm9wYWdhdGUgc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgQUNMcyBkdXJpbmcgYSByZWZsaW5rIG9wZXJhdGlvbi4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBzeW1ib2xpYyBsaW5rcz8gQXJlIHNlY3VyaXR5IGNvbnRleHQgYW5kIEFDTHMgaGFuZGxlZCBjb25zaXN0ZW50bHkgZm9yICp0aG9zZSogdHlwZXMgb2YgbGlua3M/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBiZWhhdmlvciBpcyBjb25zaXN0ZW50LiBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBvY2ZzMl9zeW1saW5rYCBhbHNvIGNhbGxzIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhhdCBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIEl0J3MgYSBrZXkgYXJlYSB0byBjaGVjayBmb3IgY29uc2lzdGVudCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpZiB0aGlzIHN0ZXAgaXMgbWlzc2luZyBvciBpbXByb3Blcmx5IGltcGxlbWVudGVkLiBNYWtpbmcgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIGBvY2ZzMl9zeW1saW5rYCBjYWxscyB0aGUgc2VjdXJpdHkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjoxMS4xNTEyNTAwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4MDY1MTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9zeW1saW5rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FvcHMuYy00MS1cXG5mcy9vY2ZzMi9hb3BzLmM6NDI6c3RhdGljIGludCBvY2ZzMl9zeW1saW5rX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuZnMvb2NmczIvYW9wcy5jLTQzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi0tXFxuZnMvb2NmczIvYW9wcy5jLTUxLVxcbmZzL29jZnMyL2FvcHMuYzo1MjpcXHR0cmFjZV9vY2ZzMl9zeW1saW5rX2dldF9ibG9jayhcXG5mcy9vY2ZzMi9hb3BzLmMtNTMtXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9hb3BzLmM9MTI5PWludCBvY2ZzMl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbi0tXFxuZnMvb2NmczIvYW9wcy5jLTE0Ni1cXHRcXHQvKiB0aGlzIGFsd2F5cyBkb2VzIEkvTyBmb3Igc29tZSByZWFzb24uICovXFxuZnMvb2NmczIvYW9wcy5jOjE0NzpcXHRcXHRlcnIgPSBvY2ZzMl9zeW1saW5rX2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XFxuZnMvb2NmczIvYW9wcy5jLTE0OC1cXHRcXHRnb3RvIGJhaWw7XFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxcbi0tXFxuZnMvb2NmczIvaW5vZGUuYy00NjktXFx0ICAgIGNhc2UgU19JRkxOSzpcXG5mcy9vY2ZzMi9pbm9kZS5jOjQ3MDpcXHRcXHQgICAgaW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL29jZnMyL2lub2RlLmMtNDcxLVxcdFxcdCAgICBpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0xNzE2PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3N5bWxpbmtfZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTgxMy1cXG5mcy9vY2ZzMi9uYW1laS5jOjE4MTQ6c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL29jZnMyL25hbWVpLmMtMTgxNS1cXHRcXHRcXHQgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDMtXFxuZnMvb2NmczIvbmFtZWkuYzoxODQ0OlxcdHRyYWNlX29jZnMyX3N5bWxpbmtfYmVnaW4oZGlyLCBkZW50cnksIHN5bW5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy0xODQ1LVxcdFxcdFxcdFxcdCAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lKTtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk1MS1cXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTI6XFx0dHJhY2Vfb2NmczJfc3ltbGlua19jcmVhdGUoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbixcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTMtXFx0XFx0XFx0XFx0ICAgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk2Ny1cXHRuZXdzaXplID0gbCAtIDE7XFxuZnMvb2NmczIvbmFtZWkuYzoxOTY4OlxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjktXFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjkzMz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjkzOC1cXHQucm1kaXJcXHRcXHQ9IG9jZnMyX3VubGluayxcXG5mcy9vY2ZzMi9uYW1laS5jOjI5Mzk6XFx0LnN5bWxpbmtcXHQ9IG9jZnMyX3N5bWxpbmssXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQwLVxcdC5ta2RpclxcdFxcdD0gb2NmczJfbWtkaXIsXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTExNDc9REVGSU5FX0VWRU5UKG9jZnMyX19nZXRfYmxvY2ssIG5hbWUsXFx0XFxcXFxcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xMTUxLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MTE1MjpERUZJTkVfT0NGUzJfR0VUX0JMT0NLX0VWRU5UKG9jZnMyX3N5bWxpbmtfZ2V0X2Jsb2NrKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTExNTMtXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIxOTE9REVGSU5FX09DRlMyX0RFTlRSWV9PUFMob2NmczJfdW5saW5rKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTItXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTkzOkRFRklORV9PQ0ZTMl9ERU5UUllfT1BTKG9jZnMyX3N5bWxpbmtfY3JlYXRlKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTQtXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIzMjU9REVGSU5FX09DRlMyX1VMTF9VTExfVUlOVF9FVkVOVChvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIzMjYtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMzI3OlRSQUNFX0VWRU5UKG9jZnMyX3N5bWxpbmtfYmVnaW4sXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMzI4LVxcdFRQX1BST1RPKHZvaWQgKmRpciwgdm9pZCAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lLFxcbi0tXFxuZnMvb2NmczIvc3ltbGluay5jPTgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfZmFzdF9zeW1saW5rX2FvcHMgPSB7XFxuLS1cXG5mcy9vY2ZzMi9zeW1saW5rLmMtODMtXFxuZnMvb2NmczIvc3ltbGluay5jOjg0OmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9vY2ZzMi9zeW1saW5rLmMtODUtXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbi0tXFxuZnMvb2NmczIvc3ltbGluay5oLTEyLVxcbmZzL29jZnMyL3N5bWxpbmsuaDoxMzpleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL29jZnMyL3N5bWxpbmsuaC0xNC1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvY2ZzMl9mYXN0X3N5bWxpbmtfYW9wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MTMuNjMxOTA5NzM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTY0MzIzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgb2NmczJfc3ltbGlua2AgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBtZW50aW9uIG9mIGBmcy9vY2ZzMi9uYW1laS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmUgMTgxNCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCB0aGUgYG9jZnMyX3N5bWxpbmtgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBjb2RlLiBUaGF0J3Mgd2hlcmUgc3ltYm9saWMgbGluayBjcmVhdGlvbiBpcyBoYW5kbGVkLCBzbyBpdCBtYWtlcyBzZW5zZSB3ZSdkIGJlIGRpZ2dpbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBsaW5lLCBhbmQgaWRlYWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgYnVnLCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIGV2ZW4ganVzdCBzb21lIGludGVyZXN0aW5nIGNvZGUgZmxvdyB0byBleGFtaW5lLiBMZXQncyBzZWUgd2hhdCB0aGF0IGxpbmUgaXMgZG9pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IHN5bWxpbmtzIGFyZSBoYW5kbGVkIGluIE9DRlMyOiB0aGUgaW5vZGUgYWxsb2NhdGlvbiwgdGhlIGRhdGEgYmxvY2sgYWxsb2NhdGlvbiwgdGhlIGZvcm1hdCBvZiB0aGUgbGluaydzIGNvbnRlbnQuLi4gdGhhdCBjb250ZXh0IHdpbGwgYmUga2V5IHRvIHByb3Blcmx5IHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uIG9mIHRoYXQgcGFydGljdWxhciBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjE3LjQ4ODM0NDY0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODE0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxNDpcXHRzdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuMTgxNTpcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICpkaXIsXFxuMTgxNjpcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbjE4MTc6XFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuMTgxODpcXHR7XFxuMTgxOTpcXHRcXHRpbnQgc3RhdHVzLCBsLCBjcmVkaXRzO1xcbjE4MjA6XFx0XFx0dTY0IG5ld3NpemU7XFxuMTgyMTpcXHRcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE5VTEw7XFxuMTgyMjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcXG4xODIzOlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMTgyNDpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7XFxuMTgyNTpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCA9IE5VTEw7XFxuMTgyNjpcXHRcXHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IE5VTEw7XFxuMTgyNzpcXHRcXHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTtcXG4xODI4OlxcdFxcdGhhbmRsZV90ICpoYW5kbGUgPSBOVUxMO1xcbjE4Mjk6XFx0XFx0c3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmlub2RlX2FjID0gTlVMTDtcXG4xODMwOlxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDtcXG4xODMxOlxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICp4YXR0cl9hYyA9IE5VTEw7XFxuMTgzMjpcXHRcXHRpbnQgd2FudF9jbHVzdGVycyA9IDA7XFxuMTgzMzpcXHRcXHRpbnQgeGF0dHJfY3JlZGl0cyA9IDA7XFxuMTgzNDpcXHRcXHRzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyBzaSA9IHtcXG4xODM1OlxcdFxcdFxcdC5uYW1lID0gTlVMTCxcXG4xODM2OlxcdFxcdFxcdC5lbmFibGUgPSAxLFxcbjE4Mzc6XFx0XFx0fTtcXG4xODM4OlxcdFxcdGludCBkaWRfcXVvdGEgPSAwLCBkaWRfcXVvdGFfaW5vZGUgPSAwO1xcbjE4Mzk6XFx0XFx0c3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTtcXG4xODQwOlxcdFxcdHNpZ3NldF90IG9sZHNldDtcXG4xODQxOlxcdFxcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XFxuMTg0MjpcXHRcXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0dHJhY2Vfb2NmczJfc3ltbGlua19iZWdpbihkaXIsIGRlbnRyeSwgc3ltbmFtZSxcXG4xODQ1OlxcdFxcdFxcdFxcdFxcdCAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lKTtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0c3RhdHVzID0gZHF1b3RfaW5pdGlhbGl6ZShkaXIpO1xcbjE4NDg6XFx0XFx0aWYgKHN0YXR1cykge1xcbjE4NDk6XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE4NTA6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE4NTE6XFx0XFx0fVxcbjE4NTI6XFx0XFxuMTg1MzpcXHRcXHRzYiA9IGRpci1cXHUwMDNlaV9zYjtcXG4xODU0OlxcdFxcdG9zYiA9IE9DRlMyX1NCKHNiKTtcXG4xODU1OlxcdFxcbjE4NTY6XFx0XFx0bCA9IHN0cmxlbihzeW1uYW1lKSArIDE7XFxuMTg1NzpcXHRcXG4xODU4OlxcdFxcdGNyZWRpdHMgPSBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzYik7XFxuMTg1OTpcXHRcXG4xODYwOlxcdFxcdC8qIGxvY2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi9cXG4xODYxOlxcdFxcdHN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcXHUwMDI2cGFyZW50X2ZlX2JoLCAxKTtcXG4xODYyOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuMTg2MzpcXHRcXHRcXHRpZiAoc3RhdHVzICE9IC1FTk9FTlQpXFxuMTg2NDpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuMTg2NTpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbjE4NjY6XFx0XFx0fVxcbjE4Njc6XFx0XFxuMTg2ODpcXHRcXHRkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC1cXHUwMDNlYl9kYXRhO1xcbjE4Njk6XFx0XFx0aWYgKCFvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpcmZlKSkge1xcbjE4NzA6XFx0XFx0XFx0LyogY2FuJ3QgbWFrZSBhIGZpbGUgaW4gYSBkZWxldGVkIGRpcmVjdG9yeS4gKi9cXG4xODcxOlxcdFxcdFxcdHN0YXR1cyA9IC1FTk9FTlQ7XFxuMTg3MjpcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTg3MzpcXHRcXHR9XFxuMTg3NDpcXHRcXG4xODc1OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2NoZWNrX2Rpcl9mb3JfZW50cnkoZGlyLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbjE4NzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuKTtcXG4xODc3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTg3ODpcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTg3OTpcXHRcXG4xODgwOlxcdFxcdHN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCxcXG4xODgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuMTg4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIFxcdTAwMjZsb29rdXApO1xcbjE4ODM6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4xODg0OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xODg1OlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xODg2OlxcdFxcdH1cXG4xODg3OlxcdFxcbjE4ODg6XFx0XFx0c3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9uZXdfaW5vZGUob3NiLCBcXHUwMDI2aW5vZGVfYWMpO1xcbjE4ODk6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4xODkwOlxcdFxcdFxcdGlmIChzdGF0dXMgIT0gLUVOT1NQQylcXG4xODkxOlxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xODkyOlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xODkzOlxcdFxcdH1cXG4xODk0OlxcdFxcbjE4OTU6XFx0XFx0aW5vZGUgPSBvY2ZzMl9nZXRfaW5pdF9pbm9kZShkaXIsIFNfSUZMTksgfCBTX0lSV1hVR08pO1xcbjE4OTY6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4xODk3OlxcdFxcdFxcdHN0YXR1cyA9IFBUUl9FUlIoaW5vZGUpO1xcbjE4OTg6XFx0XFx0XFx0aW5vZGUgPSBOVUxMO1xcbjE4OTk6XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE5MDA6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5MDE6XFx0XFx0fVxcbjE5MDI6XFx0XFxuMTkwMzpcXHRcXHQvKiBnZXQgc2VjdXJpdHkgeGF0dHIgKi9cXG4xOTA0OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNnNpKTtcXG4xOTA1OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4xOTA2OlxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLUVPUE5PVFNVUFApXFxuMTkwNzpcXHRcXHRcXHRcXHRzaS5lbmFibGUgPSAwO1xcbjE5MDg6XFx0XFx0XFx0ZWxzZSB7XFxuMTkwOTpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuMTkxMDpcXHRcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTkxMTpcXHRcXHRcXHR9XFxuMTkxMjpcXHRcXHR9XFxuMTkxMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MTcuNDg4NTE3MzY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzYxODE1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIE9DRlMyIFN5bWxpbmsgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IGhvdyBPQ0ZTMiBoYW5kbGVzIHN5bWxpbmsgY3JlYXRpb24sIHNwZWNpZmljYWxseSwgdGhlIGludGVyYWN0aW9uIHdpdGggc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgQUNMcy4gSSB0aG91Z2h0IGBvY2ZzMl9zeW1saW5rYCBkaXJlY3RseSBjYWxsZWQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGJ1dCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSBpdCBkb2Vzbid0LiBJbnN0ZWFkLCBpdCBzZWVtcyB0byBnbyB0aHJvdWdoIGEgY291cGxlIG9mIGludGVybWVkaWF0ZSBjYWxsczogZmlyc3QgYG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0YCwgYW5kIHRoZW4gaXQgbGVhZHMgdG8gYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuICBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3cgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgZG9pbmcsIHNvIEknbGwgY2hlY2sgaXQncyBpbXBsZW1lbnRhdGlvbiBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MjIuNDI0NzAyMTAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTE0OlxcdFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgeGF0dHIgKi9cXG4xOTE1OlxcdFxcdGlmIChzaS5lbmFibGUpIHtcXG4xOTE2OlxcdFxcdFxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChkaXIsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuMTkxNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2eGF0dHJfYWMpO1xcbjE5MTg6XFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4xOTE5OlxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xOTIwOlxcdFxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xOTIxOlxcdFxcdFxcdH1cXG4xOTIyOlxcdFxcdH1cXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0LyogZG9uJ3QgcmVzZXJ2ZSBiaXRtYXAgc3BhY2UgZm9yIGZhc3Qgc3ltbGlua3MuICovXFxuMTkyNTpcXHRcXHRpZiAobCBcXHUwMDNlIG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhzYikpXFxuMTkyNjpcXHRcXHRcXHR3YW50X2NsdXN0ZXJzICs9IDE7XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCB3YW50X2NsdXN0ZXJzLCBcXHUwMDI2ZGF0YV9hYyk7XFxuMTkyOTpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbjE5MzA6XFx0XFx0XFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDKVxcbjE5MzE6XFx0XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE5MzI6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5MzM6XFx0XFx0fVxcbjE5MzQ6XFx0XFxuMTkzNTpcXHRcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMgKyB4YXR0cl9jcmVkaXRzKTtcXG4xOTM2OlxcdFxcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcbjE5Mzc6XFx0XFx0XFx0c3RhdHVzID0gUFRSX0VSUihoYW5kbGUpO1xcbjE5Mzg6XFx0XFx0XFx0aGFuZGxlID0gTlVMTDtcXG4xOTM5OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xOTQwOlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xOTQxOlxcdFxcdH1cXG4xOTQyOlxcdFxcbjE5NDM6XFx0XFx0LyogU3RhcnRpbmcgdG8gY2hhbmdlIHRoaW5ncywgcmVzdGFydCBpcyBubyBsb25nZXIgcG9zc2libGUuICovXFxuMTk0NDpcXHRcXHRvY2ZzMl9ibG9ja19zaWduYWxzKFxcdTAwMjZvbGRzZXQpO1xcbjE5NDU6XFx0XFx0ZGlkX2Jsb2NrX3NpZ25hbHMgPSAxO1xcbjE5NDY6XFx0XFxuMTk0NzpcXHRcXHRzdGF0dXMgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7XFxuMTk0ODpcXHRcXHRpZiAoc3RhdHVzKVxcbjE5NDk6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5NTA6XFx0XFx0ZGlkX3F1b3RhX2lub2RlID0gMTtcXG4xOTUxOlxcdFxcbjE5NTI6XFx0XFx0dHJhY2Vfb2NmczJfc3ltbGlua19jcmVhdGUoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbixcXG4xOTUzOlxcdFxcdFxcdFxcdFxcdCAgIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuMTk1NDpcXHRcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuMTk1NTpcXHRcXHRcXHRcXHRcXHQgICBpbm9kZS1cXHUwMDNlaV9tb2RlKTtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcXG4xOTU4OlxcdFxcdFxcdFxcdFxcdCAgICAwLCBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4xOTU5OlxcdFxcdFxcdFxcdFxcdCAgICBpbm9kZV9hYyk7XFxuMTk2MDpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbjE5NjE6XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE5NjI6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5NjM6XFx0XFx0fVxcbjE5NjQ6XFx0XFxuMTk2NTpcXHRcXHRmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG5ld19mZV9iaC1cXHUwMDNlYl9kYXRhO1xcbjE5NjY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfcmRldiA9IDA7XFxuMTk2NzpcXHRcXHRuZXdzaXplID0gbCAtIDE7XFxuMTk2ODpcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZvY2ZzMl9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuMTk2OTpcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbjE5NzA6XFx0XFx0aWYgKGwgXFx1MDAzZSBvY2ZzMl9mYXN0X3N5bWxpbmtfY2hhcnMoc2IpKSB7XFxuMTk3MTpcXHRcXHRcXHR1MzIgb2Zmc2V0ID0gMDtcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0XFx0c3RhdHVzID0gZHF1b3RfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSxcXG4xOTc0OlxcdFxcdFxcdCAgICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItXFx1MDAzZXNiLCAxKSk7XFxuMTk3NTpcXHRcXHRcXHRpZiAoc3RhdHVzKVxcbjE5NzY6XFx0XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5Nzc6XFx0XFx0XFx0ZGlkX3F1b3RhID0gMTtcXG4xOTc4OlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm9jZnMyX2FvcHM7XFxuMTk3OTpcXHRcXHRcXHRzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShvc2IsIGlub2RlLCBcXHUwMDI2b2Zmc2V0LCAxLCAwLFxcbjE5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2ZlX2JoLFxcbjE5ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaGFuZGxlLCBkYXRhX2FjLCBOVUxMLFxcbjE5ODI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCk7XFxuMTk4MzpcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbjE5ODQ6XFx0XFx0XFx0XFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyAhPSAtRUlOVFIpIHtcXG4xOTg1OlxcdFxcdFxcdFxcdFxcdG1sb2coTUxfRVJST1IsXFxuMTk4NjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZXh0ZW5kIGZpbGUgdG8gJWxsdVxcXFxuXFxcIixcXG4xOTg3OlxcdFxcdFxcdFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdzaXplKTtcXG4xOTg4OlxcdFxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xOTg5OlxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IC1FTk9TUEM7XFxuMTk5MDpcXHRcXHRcXHRcXHR9XFxuMTk5MTpcXHRcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTk5MjpcXHRcXHRcXHR9XFxuMTk5MzpcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpO1xcbjE5OTQ6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gb2NmczJfaW5vZGVfc2VjdG9yX2NvdW50KGlub2RlKTtcXG4xOTk1OlxcdFxcdH0gZWxzZSB7XFxuMTk5NjpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZvY2ZzMl9mYXN0X3N5bWxpbmtfYW9wcztcXG4xOTk3OlxcdFxcdFxcdG1lbWNweSgoY2hhciAqKSBmZS1cXHUwMDNlaWQyLmlfc3ltbGluaywgc3ltbmFtZSwgbCk7XFxuMTk5ODpcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpO1xcbjE5OTk6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gMDtcXG4yMDAwOlxcdFxcdH1cXG4yMDAxOlxcdFxcbjIwMDI6XFx0XFx0c3RhdHVzID0gb2NmczJfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgpO1xcbjIwMDM6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4yMDA0OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4yMDA1OlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4yMDA2OlxcdFxcdH1cXG4yMDA3OlxcdFxcbjIwMDg6XFx0XFx0aWYgKCFvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSB7XFxuMjAwOTpcXHRcXHRcXHRzdGF0dXMgPSBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKG9zYiwgaGFuZGxlLCBpbm9kZSxcXG4yMDEwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN5bW5hbWUpO1xcbjIwMTE6XFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4yMDEyOlxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4yMDEzOlxcdFxcdFxcdFxcdGdvdG8gYmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MjIuNDI0OTI0MTYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjE5Mjg0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBzeW1saW5rIGNyZWF0aW9uIHBhdGgsIHNwZWNpZmljYWxseSBgb2NmczJfc3ltbGlua2AsIHdvdWxkIGFsc28gdHJpZ2dlciB0aGUgeGF0dHIgYW5kIEFDTCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IHNlZW1zIHRoYXQncyBub3QgdGhlIGNhc2UuIE15IG1lbnRhbCBtb2RlbCBtdXN0IGJlIHdyb25nIHRoZXJlLiBJIGtub3cgYG9jZnMyX21rbm9kYCAqZG9lcyogcGVyZm9ybSB0aGlzIGluaXRpYWxpemF0aW9uLlxuXG5SaWdodCwgc28gdG8gY29uZmlybSB0aGlzIGRpc2NyZXBhbmN5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGluZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIExldCdzIHRyYWNlIHRocm91Z2ggYG9jZnMyX21rbm9kYCwgd2hpY2ggaXMgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2FsbHMuIFRoZSBjb2RlIGluIGBmcy9vY2ZzMi9uYW1laS5jYCBzaG91bGQgaG9sZCB0aGUgYW5zd2VyLiBJJ2xsIHRha2UgYSBsb29rIGF0IGl0IHRvIHNlZSBpZiBgb2NmczJfY2FsY194YXR0cl9pbml0YCBvciBgb2NmczJfaW5pdF9hY2xgIGFyZSBjYWxsZWQuIFRoaXMgd2lsbCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDIxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjoyNi4wODY4NTcwMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL29jZnMyL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1NjpcXHRcXHRzaWdzZXRfdCBvbGRzZXQ7XFxuIDI1NzpcXHRcXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xcbiAyNTg6XFx0XFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuIDI1OTpcXHRcXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiAyNjI6XFx0XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuIDI2MzpcXHRcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nKWRldiwgbW9kZSk7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdHN0YXR1cyA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcXG4gMjY2OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4gMjY3OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4gMjY4OlxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDI2OTpcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdC8qIGdldCBvdXIgc3VwZXIgYmxvY2sgKi9cXG4gMjcyOlxcdFxcdG9zYiA9IE9DRlMyX1NCKGRpci1cXHUwMDNlaV9zYik7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcXHUwMDI2cGFyZW50X2ZlX2JoLCAxKTtcXG4gMjc1OlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDI3NjpcXHRcXHRcXHRpZiAoc3RhdHVzICE9IC1FTk9FTlQpXFxuIDI3NzpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDI3ODpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiAyNzk6XFx0XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRpZiAoU19JU0RJUihtb2RlKSBcXHUwMDI2XFx1MDAyNiAoZGlyLVxcdTAwM2VpX25saW5rIFxcdTAwM2U9IG9jZnMyX2xpbmtfbWF4KG9zYikpKSB7XFxuIDI4MjpcXHRcXHRcXHRzdGF0dXMgPSAtRU1MSU5LO1xcbiAyODM6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG4gMjg0OlxcdFxcdH1cXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0ZGlyZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtXFx1MDAzZWJfZGF0YTtcXG4gMjg3OlxcdFxcdGlmICghb2NmczJfcmVhZF9saW5rc19jb3VudChkaXJmZSkpIHtcXG4gMjg4OlxcdFxcdFxcdC8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovXFxuIDI4OTpcXHRcXHRcXHRzdGF0dXMgPSAtRU5PRU5UO1xcbiAyOTA6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG4gMjkxOlxcdFxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0c3RhdHVzID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4pO1xcbiAyOTU6XFx0XFx0aWYgKHN0YXR1cylcXG4gMjk2OlxcdFxcdFxcdGdvdG8gbGVhdmU7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdC8qIGdldCBhIHNwb3QgaW5zaWRlIHRoZSBkaXIuICovXFxuIDI5OTpcXHRcXHRzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsXFxuIDMwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiAzMDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBcXHUwMDI2bG9va3VwKTtcXG4gMzAyOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDMwMzpcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMwNDpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMDU6XFx0XFx0fVxcbiAzMDY6XFx0XFxuIDMwNzpcXHRcXHQvKiByZXNlcnZlIGFuIGlub2RlIHNwb3QgKi9cXG4gMzA4OlxcdFxcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X2lub2RlKG9zYiwgXFx1MDAyNmlub2RlX2FjKTtcXG4gMzA5OlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDMxMDpcXHRcXHRcXHRpZiAoc3RhdHVzICE9IC1FTk9TUEMpXFxuIDMxMTpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMxMjpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMTM6XFx0XFx0fVxcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRpbm9kZSA9IG9jZnMyX2dldF9pbml0X2lub2RlKGRpciwgbW9kZSk7XFxuIDMxNjpcXHRcXHRpZiAoSVNfRVJSKGlub2RlKSkge1xcbiAzMTc6XFx0XFx0XFx0c3RhdHVzID0gUFRSX0VSUihpbm9kZSk7XFxuIDMxODpcXHRcXHRcXHRpbm9kZSA9IE5VTEw7XFxuIDMxOTpcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMyMDpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMjE6XFx0XFx0fVxcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHQvKiBnZXQgc2VjdXJpdHkgeGF0dHIgKi9cXG4gMzI0OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNnNpKTtcXG4gMzI1OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4gMzI2OlxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLUVPUE5PVFNVUFApXFxuIDMyNzpcXHRcXHRcXHRcXHRzaS5lbmFibGUgPSAwO1xcbiAzMjg6XFx0XFx0XFx0ZWxzZSB7XFxuIDMyOTpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMzMDpcXHRcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMzE6XFx0XFx0XFx0fVxcbiAzMzI6XFx0XFx0fVxcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIDMzNTpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4gMzM2OlxcdFxcdFxcdGdvdG8gbGVhdmU7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbiAzMzk6XFx0XFx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXFx1MDAyNnNpLCBcXHUwMDI2d2FudF9jbHVzdGVycyxcXG4gMzQwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSxcXG4gMzQxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YWNsX3N0YXRlKTtcXG4gMzQyOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDM0MzpcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDM0NDpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzNDU6XFx0XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHQvKiBSZXNlcnZlIGEgY2x1c3RlciBpZiBjcmVhdGluZyBhbiBleHRlbnQgYmFzZWQgZGlyZWN0b3J5LiAqL1xcbiAzNDg6XFx0XFx0aWYgKFNfSVNESVIobW9kZSkgXFx1MDAyNlxcdTAwMjYgIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHtcXG4gMzQ5OlxcdFxcdFxcdHdhbnRfY2x1c3RlcnMgKz0gMTtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0XFx0LyogRGlyIGluZGV4aW5nIHJlcXVpcmVzIGV4dHJhIHNwYWNlIGFzIHdlbGwgKi9cXG4gMzUyOlxcdFxcdFxcdGlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSlcXG4gMzUzOlxcdFxcdFxcdFxcdHdhbnRfbWV0YSsrO1xcbiAzNTQ6XFx0XFx0fVxcbiAzNTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjI2LjA4NzE3Nzk0OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODUxODM3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBDcmVhdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgT0NGUzIgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgbmV3IGZpbGUgc3lzdGVtIG9iamVjdHMuIEkgc2VlIHRoYXQgdGhlIGBvY2ZzMl9ta25vZGAgZnVuY3Rpb24gaXMgY2VudHJhbCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHRoZSBwcmltYXJ5IHdvcmtob3JzZSwgYW5kIGl0IGNhbGxzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIFNlZW1zIGxvZ2ljYWw7IHNldHRpbmcgdXAgQUNMcyBhbmQgaW5pdGlhbGl6aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGltcG9ydGFudCBzdGVwcyBkdXJpbmcgb2JqZWN0IGNyZWF0aW9uLlxuXG5CdXQgaG9sZCBvbi4uLiBgb2NmczJfbWtub2RgIGlzIHVzZWQgZm9yIG1vcmUgdGhhbiBqdXN0IHNpbXBsZSBmaWxlcy4gSXQgY3JlYXRlcyBkZXZpY2VzLCB0b28uIE5vdywgSSdtIGdldHRpbmcgYSBodW5jaCB0aGF0IGl04oCZcyBtb3JlIHdpZGVseSB1c2VkIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBob3cgb3RoZXIgY3JlYXRpb24gZnVuY3Rpb25zIG1pZ2h0IHJlbGF0ZS5cblxuQWhhISBOb3cgSSdtIHdvbmRlcmluZyBpZiBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYCBhcmUgYWN0dWFsbHkgbGV2ZXJhZ2luZyBgb2NmczJfbWtub2RgIHVuZGVyIHRoZSBob29kLiBJdCB3b3VsZCBtYWtlIHNlbnNlIHRvIGNvbnNvbGlkYXRlIHRoZSBjb3JlIGNyZWF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgZm9yIGBvY2ZzMl9jcmVhdGVgIGFuZCBgb2NmczJfbWtkaXJgIGRpcmVjdGx5IGFuZCB2ZXJpZnkgdGhpcyByZWxhdGlvbnNoaXAuIFRoYXQncyB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjMyLjkzOTAxODg0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NzY3MTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9ta25vZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzQ4LSAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxcbmZzL29jZnMyL2FjbC5jOjM0OTogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXFxuZnMvb2NmczIvYWNsLmMtMzUwLSAqL1xcbi0tXFxuZnMvb2NmczIvZGlyLmM9MjIxMj1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2Rpci5jLTIyMzYtLypcXG5mcy9vY2ZzMi9kaXIuYzoyMjM3OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcXG5mcy9vY2ZzMi9kaXIuYy0yMjM4LSAqIHRoZSBpbmxpbmUtZGF0YSBmbGFnIGFuZCBpbml0aWFsaXplcyB0aGUgaW5saW5lLWRhdGEgc2VjdGlvbi5cXG4tLVxcbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4Ny1cXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxcbmZzL29jZnMyL2lub2RlLmM6Mzg4OlxcdCAqIGJ5IG9jZnMyX21rbm9kX2xvY2tlZCgpLCBzbyBhIGZhaWx1cmUgaXMgYSBjb2RlIGJ1Zy5cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cXHQgKi9cXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDIzLSAqIGJsb2NrcyArIHF1b3RhIHVwZGF0ZSAqL1xcbmZzL29jZnMyL2pvdXJuYWwuaDo0MjQ6c3RhdGljIGlubGluZSBpbnQgb2NmczJfbWtub2RfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaXNfZGlyLFxcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXFx0XFx0XFx0XFx0ICAgICAgaW50IHhhdHRyX2NyZWRpdHMpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvb2NmczIvam91cm5hbC5oLTU1MC17XFxuZnMvb2NmczIvam91cm5hbC5oOjU1MTpcXHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XFxuZnMvb2NmczIvam91cm5hbC5oLTU1Mi1cXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTUtXFxuZnMvb2NmczIvbmFtZWkuYzo1NjpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTU3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yMTU9c3RhdGljIHZvaWQgb2NmczJfY2xlYW51cF9hZGRfZW50cnlfZmFpbHVyZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjI5LVxcbmZzL29jZnMyL25hbWVpLmM6MjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy0yMzEtXFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNjAtXFxuZnMvb2NmczIvbmFtZWkuYzoyNjE6XFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI2Mi1cXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzY5LVxcbmZzL29jZnMyL25hbWVpLmM6MzcwOlxcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXFx1MDAzZXNiLFxcbmZzL29jZnMyL25hbWVpLmMtMzcxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBTX0lTRElSKG1vZGUpLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0zODktXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzozOTA6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxcbmZzL29jZnMyL25hbWVpLmMtMzkxLVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTE3LVxcbmZzL29jZnMyL25hbWVpLmM6NTE4OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvbmFtZWkuYy01MTktXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjI5LVxcbmZzL29jZnMyL25hbWVpLmM6NjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbmZzL29jZnMyL25hbWVpLmMtNjMxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02NTItXFxuZnMvb2NmczIvbmFtZWkuYzo2NTM6XFx0cmV0dXJuIF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsIGRldiwgbmV3X2ZlX2JoLFxcbmZzL29jZnMyL25hbWVpLmMtNjU0LVxcdFxcdFxcdFxcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9NjU4PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjY2LVxcdFxcdFxcdCAgT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2Njc6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02NjgtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9Njc0PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02ODMtXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcXG5mcy9vY2ZzMi9uYW1laS5jOjY4NDpcXHRyZXQgPSBvY2ZzMl9ta25vZChcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTY4NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0xODE0PXN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk1Ni1cXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTc6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTgtXFx0XFx0XFx0XFx0ICAgIDAsIFxcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yNTIxPWludCBvY2ZzMl9jcmVhdGVfaW5vZGVfaW5fb3JwaGFuKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNTYxLVxcbmZzL29jZnMyL25hbWVpLmM6MjU2MjpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYiwgMCwgMCkpO1xcbmZzL29jZnMyL25hbWVpLmMtMjU2My1cXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU4NC1cXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cXG5mcy9vY2ZzMi9uYW1laS5jOjI1ODU6XFx0c3RhdHVzID0gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODYtXFx0XFx0XFx0XFx0ICAgICAgMCwgXFx1MDAyNm5ld19kaV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQwLVxcdC5ta2RpclxcdFxcdD0gb2NmczJfbWtkaXIsXFxuZnMvb2NmczIvbmFtZWkuYzoyOTQxOlxcdC5ta25vZFxcdFxcdD0gb2NmczJfbWtub2QsXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQyLVxcdC5yZW5hbWVcXHRcXHQ9IG9jZnMyX3JlbmFtZSxcXG4tLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTgtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTk5OlRSQUNFX0VWRU5UKG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cXHRUUF9QUk9UTyh2b2lkICpkaXIsIHZvaWQgKmRlbnRyeSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjozNS45MDY2OTc5NDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMDE4ODYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBsb2dpY2FsbHk6XG5cbioqUmVhY2hpbmcgYG9jZnMyX21rbm9kYCoqXG5cbkFscmlnaHQsIHNvIGBvY2ZzMl9ta25vZGAuLi4gaXQncyB0aGUgaW5vZGUgb3BlcmF0aW9uIGZvciBtYWtpbmcgbm9kZXMsIGdvdCBpdC4gTXkgbWVudGFsIG1hcCBzaG93cyBpdCdzIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIChjcmVhdGluZyBkaXJlY3RvcmllcyksIGFuZCBgb2NmczJfY3JlYXRlYCAoY3JlYXRpbmcgZmlsZXMsIG9idmlvdXNseSkuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBObyBxdWVzdGlvbiB0aGVyZS4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBpdCdzICpiZWluZyogcmVhY2hlZCwgcGVyaGFwcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IgaXMgcG9zc2libGUuXG5cbk5vdywgSSBuZWVkIHRvIGxvb2sgaW50byBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHNvbWV0aGluZyB0byBkbyB3aXRoIGZpbGUgc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSwgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBTbyBsZXQncyBjaGVjayBpdC4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6NDEuMjM2ODg4ODI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjY0OlxcdGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuNzI2NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjcyNjY6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpXFxuNzI2NzpcXHR7XFxuNzI2ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG43MjY5OlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcXG43MjcwOlxcdFxcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuNzI3MTpcXHRcXG43MjcyOlxcdFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbjcyNzM6XFx0XFx0aWYgKHJldCkge1xcbjcyNzQ6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbjcyNzU6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG43Mjc2OlxcdFxcdH1cXG43Mjc3OlxcdFxcbjcyNzg6XFx0XFx0cmV0ID0gb2NmczJfaW5vZGVfbG9jayhkaXIsIFxcdTAwMjZkaXJfYmgsIDApO1xcbjcyNzk6XFx0XFx0aWYgKHJldCkge1xcbjcyODA6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbjcyODE6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG43MjgyOlxcdFxcdH1cXG43MjgzOlxcdFxcbjcyODQ6XFx0XFx0cmV0ID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBkaXJfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbjcyODU6XFx0XFx0aWYgKHJldClcXG43Mjg2OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjcyODc6XFx0XFxuNzI4ODpcXHRcXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuNzI4OTpcXHRcXHRpZiAocmV0KVxcbjcyOTA6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbjcyOTE6XFx0XFxuNzI5MjpcXHR1bmxvY2s6XFxuNzI5MzpcXHRcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFxcdTAwMjZhY2xfc3RhdGUpO1xcbjcyOTQ6XFx0XFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XFxuNzI5NTpcXHRcXHRicmVsc2UoZGlyX2JoKTtcXG43Mjk2OlxcdGxlYXZlOlxcbjcyOTc6XFx0XFx0cmV0dXJuIHJldDtcXG43Mjk4OlxcdH1cXG43Mjk5OlxcdFxcbjczMDA6XFx0LypcXG43MzAxOlxcdCAqICdzZWN1cml0eScgYXR0cmlidXRlcyBzdXBwb3J0XFxuNzMwMjpcXHQgKi9cXG43MzAzOlxcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbjczMDQ6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSxcXG43MzA1OlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxcbjczMDY6XFx0e1xcbjczMDc6XFx0XFx0cmV0dXJuIG9jZnMyX3hhdHRyX2dldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuNzMwODpcXHRcXHRcXHRcXHQgICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTtcXG43MzA5OlxcdH1cXG43MzEwOlxcdFxcbjczMTE6XFx0c3RhdGljIGludCBvY2ZzMl94YXR0cl9zZWN1cml0eV9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuNzMxMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuNzMxMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjczMTQ6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbjczMTU6XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXFxuNzMxNjpcXHR7XFxuNzMxNzpcXHRcXHRyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcXG43MzE4OlxcdFxcdFxcdFxcdCAgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbjczMTk6XFx0fVxcbjczMjA6XFx0XFxuNzMyMTpcXHRzdGF0aWMgaW50IG9jZnMyX2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IHhhdHRyICp4YXR0cl9hcnJheSxcXG43MzIyOlxcdFxcdFxcdCAgICAgdm9pZCAqZnNfaW5mbylcXG43MzIzOlxcdHtcXG43MzI0OlxcdFxcdHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSA9IGZzX2luZm87XFxuNzMyNTpcXHRcXHRjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xcbjczMjY6XFx0XFx0aW50IGVyciA9IDA7XFxuNzMyNzpcXHRcXG43MzI4OlxcdFxcdGlmIChzaSkge1xcbjczMjk6XFx0XFx0XFx0c2ktXFx1MDAzZXZhbHVlID0ga21lbWR1cCh4YXR0cl9hcnJheS1cXHUwMDNldmFsdWUsIHhhdHRyX2FycmF5LVxcdTAwM2V2YWx1ZV9sZW4sXFxuNzMzMDpcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuNzMzMTpcXHRcXHRcXHRpZiAoIXNpLVxcdTAwM2V2YWx1ZSlcXG43MzMyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjczMzM6XFx0XFxuNzMzNDpcXHRcXHRcXHRzaS1cXHUwMDNlbmFtZSA9IHhhdHRyX2FycmF5LVxcdTAwM2VuYW1lO1xcbjczMzU6XFx0XFx0XFx0c2ktXFx1MDAzZXZhbHVlX2xlbiA9IHhhdHRyX2FycmF5LVxcdTAwM2V2YWx1ZV9sZW47XFxuNzMzNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MzM3OlxcdFxcdH1cXG43MzM4OlxcdFxcbjczMzk6XFx0XFx0Zm9yICh4YXR0ciA9IHhhdHRyX2FycmF5OyB4YXR0ci1cXHUwMDNlbmFtZSAhPSBOVUxMOyB4YXR0cisrKSB7XFxuNzM0MDpcXHRcXHRcXHRlcnIgPSBvY2ZzMl94YXR0cl9zZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxcbjczNDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgeGF0dHItXFx1MDAzZW5hbWUsIHhhdHRyLVxcdTAwM2V2YWx1ZSxcXG43MzQyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHhhdHRyLVxcdTAwM2V2YWx1ZV9sZW4sIFhBVFRSX0NSRUFURSk7XFxuNzM0MzpcXHRcXHRcXHRpZiAoZXJyKVxcbjczNDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzM0NTpcXHRcXHR9XFxuNzM0NjpcXHRcXHRyZXR1cm4gZXJyO1xcbjczNDc6XFx0fVxcbjczNDg6XFx0XFxuNzM0OTpcXHRpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSxcXG43MzUwOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG43MzUxOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG43MzUyOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2kpXFxuNzM1MzpcXHR7XFxuNzM1NDpcXHRcXHRpbnQgcmV0O1xcbjczNTU6XFx0XFxuNzM1NjpcXHRcXHQvKiBjaGVjayB3aGV0aGVyIG9jZnMyIHN1cHBvcnQgZmVhdHVyZSB4YXR0ciAqL1xcbjczNTc6XFx0XFx0aWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihkaXItXFx1MDAzZWlfc2IpKSlcXG43MzU4OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG43MzU5OlxcdFxcdGlmIChzaSkge1xcbjczNjA6XFx0XFx0XFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbjczNjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm9jZnMyX2luaXR4YXR0cnMsIHNpKTtcXG43MzYyOlxcdFxcdFxcdC8qXFxuNzM2MzpcXHRcXHRcXHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZG9lcyBub3QgcmV0dXJuIC1FT1BOT1RTVVBQLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjo0MS4yMzcxMzQ1ODRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NDQxMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgT0NGUzIgUmVmbGluayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgSSBzZWUgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgYmVpbmcgY2FsbGVkIGZyb20gYG9jZnMyX3JlZmxpbmtgLiBSaWdodCwgYG9jZnMyX3JlZmxpbmtgLi4uIEkgYmVsaWV2ZSB0aGF0J3MgYW4gYGlvY3RsYCBjYWxsLCByaWdodD8gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgZGF0YSBmbG93IGhlcmUuIExldCdzIG1ha2Ugc3VyZSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9vY2ZzMi9yZWZjb3VudHRyZWUuY2AsIHRvIGNvbmZpcm0gdGhhdCBgb2NmczJfcmVmbGlua2AgaXMgZGVmaW5lZCB0aGVyZSBhbmQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIHJlZmxpbmsgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGRpZ2dpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0uIEtub3dpbmcgdGhhdCBgb2NmczJfcmVmbGlua2AgaXMgYW4gYGlvY3RsYCBnaXZlcyBtZSBhbiBpbXBvcnRhbnQgY29udGV4dCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzE0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjo0NS4zMzE1NTE0NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTgzMTE1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfcmVmbGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjcyNS1cXHQvKiBMb2NrIGJvdGggZmlsZXMgYWdhaW5zdCBJTyAqL1xcbmZzL29jZnMyL2ZpbGUuYzoyNzI2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soaW5vZGVfaW4sIFxcdTAwMjZpbl9iaCwgaW5vZGVfb3V0LCBcXHUwMDI2b3V0X2JoKTtcXG5mcy9vY2ZzMi9maWxlLmMtMjcyNy1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvZmlsZS5jLTI3NTEtXFxuZnMvb2NmczIvZmlsZS5jOjI3NTI6XFx0cmVtYXBwZWQgPSBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2Nrcyhpbm9kZV9pbiwgaW5fYmgsIHBvc19pbixcXG5mcy9vY2ZzMi9maWxlLmMtMjc1My1cXHRcXHRcXHRpbm9kZV9vdXQsIG91dF9iaCwgcG9zX291dCwgbGVuKTtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzY5LVxcbmZzL29jZnMyL2ZpbGUuYzoyNzcwOlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3QoaW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQgKyBsZW4pO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzcxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzc2LW91dF91bmxvY2s6XFxuZnMvb2NmczIvZmlsZS5jOjI3Nzc6XFx0b2NmczJfcmVmbGlua19pbm9kZXNfdW5sb2NrKGlub2RlX2luLCBpbl9iaCwgaW5vZGVfb3V0LCBvdXRfYmgpO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzc4LVxcdHJldHVybiByZW1hcHBlZCBcXHUwMDNlIDAgPyByZW1hcHBlZCA6IHJldDtcXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05MTktXFxuZnMvb2NmczIvaW9jdGwuYzo5MjA6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIG9sZF9wYXRoLCBuZXdfcGF0aCwgcHJlc2VydmUpO1xcbmZzL29jZnMyL2lvY3RsLmMtOTIxLVxcdH1cXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9OTY1PWxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05ODYtXFxuZnMvb2NmczIvaW9jdGwuYzo5ODc6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIGNvbXBhdF9wdHIoYXJncy5vbGRfcGF0aCksXFxuZnMvb2NmczIvaW9jdGwuYy05ODgtXFx0XFx0XFx0XFx0XFx0ICAgY29tcGF0X3B0cihhcmdzLm5ld19wYXRoKSwgcHJlc2VydmUpO1xcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODMxPURFRklORV9PQ0ZTMl9VTExfVUxMX1VJTlRfVUlOVF9FVkVOVChvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzItXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODMzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcik7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODM0LVxcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODQxPURFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQpO1xcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0Mi1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDM6REVGSU5FX09DRlMyX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDQtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODQ1OkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyk7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQ2LVxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDA4OT1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9yZWZsaW5rX25vZGUoc3RydWN0IGlub2RlICpzX2lub2RlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0NS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MTQ2OnN0YXRpYyBpbnQgX19vY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMDktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9IQVNfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjEwOlxcdFxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJzKGlub2RlLCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIxMS1cXHRcXHRcXHRcXHRcXHQgICBuZXdfaW5vZGUsIG5ld19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzctXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDIzODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzOS1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSlcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyNzItXFx0ZG93bl93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX2FsbG9jX3NlbSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI3MzpcXHRlcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI3NC1cXHRcXHRcXHRcXHRuZXdfb3JwaGFuX2lub2RlLCBwcmVzZXJ2ZSk7XFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzQ4PXN0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mzk4LVxcdGlmICghZXJyb3IpXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDM5OTpcXHRcXHRlcnJvciA9IG9jZnMyX3JlZmxpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5LCBwcmVzZXJ2ZSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwMC1cXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwNy0gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDA4OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwOS1cXHRcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0NTAtLyogVXBkYXRlIGRlc3RpbmF0aW9uIGlub2RlIHNpemUsIGlmIG5lY2Vzc2FyeS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDUxOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDUyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0ODktLyogUmVtYXAgdGhlIHJhbmdlIHBvc19pbjpsZW4gaW4gc19pbm9kZSB0byBwb3Nfb3V0OmxlbiBpbiB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0OTA6c3RhdGljIGxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ5MS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDYwMy0vKiBTZXQgdXAgcmVmY291bnQgdHJlZSBhbmQgcmVtYXAgc19pbm9kZSB0byB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ2MDQ6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjA1LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4NS1cXHQvKiBBY3R1YWxseSByZW1hcCBleHRlbnRzIG5vdy4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Njg2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfZXh0ZW50KHNfaW5vZGUsIHNfYmgsIHBvc19pbiwgdF9pbm9kZSwgdF9iaCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Njg3LVxcdFxcdFxcdFxcdFxcdCBwb3Nfb3V0LCBsZW4sIFxcdTAwMjZkZWFsbG9jKTtcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3MDItLyogTG9jayBhbiBpbm9kZSBhbmQgZ3JhYiBhIGJoIHBvaW50aW5nIHRvIHRoZSBpbm9kZS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NzAzOmludCBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NzA0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3MsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Nzk2LS8qIFVubG9jayBib3RoIGlub2RlcyBhbmQgcmVsZWFzZSBidWZmZXJzLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3OTc6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oPTk4PWludCBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTAzLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA0OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA1LVxcdFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA3LVxcdFxcdFxcdGJvb2wgcHJlc2VydmUpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjEwODpsb2ZmX3Qgb2NmczJfcmVmbGlua19yZW1hcF9ibG9ja3Moc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNC1cXHRcXHRcXHRcXHQgIGxvZmZfdCBsZW4pO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExNTppbnQgb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDIpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExOTp2b2lkIG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjItXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTIzOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MzA4PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjMzMS0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjYzMzI6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTYzODctICovXFxuZnMvb2NmczIveGF0dHIuYzo2Mzg4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzODktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDctXFxuZnMvb2NmczIveGF0dHIuYzo2NDA4OlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKCh1bnNpZ25lZCBsb25nIGxvbmcpb2xkX2JoLVxcdTAwM2ViX2Jsb2NrbnIsXFxuZnMvb2NmczIveGF0dHIuYy02NDA5LVxcdFxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdSh4aC1cXHUwMDNleGhfY291bnQpKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjUxNy1cXG5mcy9vY2ZzMi94YXR0ci5jOjY1MTg6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2lubGluZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncylcXG5mcy9vY2ZzMi94YXR0ci5jLTY1MTkte1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTQ0LVxcbmZzL29jZnMyL3hhdHRyLmM6NjU0NTpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVxcdTAwM2VyZWZfcm9vdF9iaCxcXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3JlZGl0cywgXFx1MDAyNm1ldGFfYWMpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTcxLVxcbmZzL29jZnMyL3hhdHRyLmM6NjU3MjpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtXFx1MDAzZW9sZF9iaCwgeGgsXFxuZnMvb2NmczIveGF0dHIuYy02NTczLVxcdFxcdFxcdFxcdFxcdCBhcmdzLVxcdTAwM2VuZXdfYmgsIG5ld194aCwgXFx1MDAyNnZiLCBtZXRhX2FjLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NTk4PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzMtXFxuZnMvb2NmczIveGF0dHIuYzo2NjM0OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY1NS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2NTY6XFx0cmV0ID0gb2NmczJfcmVmbGlua19sb2NrX3hhdHRyX2FsbG9jYXRvcnMob3NiLCB4aCwgYXJncy1cXHUwMDNlcmVmX3Jvb3RfYmgsXFxuZnMvb2NmczIveGF0dHIuYy02NjU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNyZWRpdHMsIFxcdTAwMjZtZXRhX2FjKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY5MS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2OTI6XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBibGtfYmgsIHhoLFxcbmZzL29jZnMyL3hhdHRyLmMtNjY5My1cXHRcXHRcXHRcXHRcXHQgbmV3X2Jsa19iaCwgbmV3X3hoLCBcXHUwMDI2dmIsIG1ldGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY3MTktXFxuZnMvb2NmczIveGF0dHIuYzo2NzIwOnN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyB7XFxuZnMvb2NmczIveGF0dHIuYy02NzIxLVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICpyZWZsaW5rO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NzM0PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NzQxLXtcXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDI6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDM6XFx0XFx0XFx0KHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqKXBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy02NzQ0LVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9Njc5OT1zdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhcXG5mcy9vY2ZzMi94YXR0ci5jOjY4MDA6XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNjgwMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnh0X2V0LFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg0LVxcbmZzL29jZnMyL3hhdHRyLmM6Njg4NTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02ODg2LVxcdFxcdFxcdFxcdHU2NCBibGtubywgdTY0IG5ld19ibGtubywgdTMyIGNsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg5LVxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbmZzL29jZnMyL3hhdHRyLmM6Njg5MDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MpXFxuZnMvb2NmczIveGF0dHIuYy02ODkxLXtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjkzOC1cXG5mcy9vY2ZzMi94YXR0ci5jOjY5Mzk6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLVxcdTAwM2VyZWZsaW5rLFxcbmZzL29jZnMyL3hhdHRyLmMtNjk0MC1cXHRcXHRcXHRcXHRcXHRhcmdzLVxcdTAwM2VvbGRfYnVja2V0LVxcdTAwM2VidV9iaHNbMF0sXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzUtXFxuZnMvb2NmczIveGF0dHIuYzo2OTc2OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02OTc3LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYzo2OTc4OlxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzktXFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzAwOS1cXG5mcy9vY2ZzMi94YXR0ci5jOjcwMTA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlLCBibGtubyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcwMTEtXFx0XFx0XFx0XFx0XFx0XFx0IG5ld19ibGtubywgbnVtX2NsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDMyLVxcbmZzL29jZnMyL3hhdHRyLmM6NzAzMzpcXHRcXHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfYmxrbm8sXFxuZnMvb2NmczIveGF0dHIuYy03MDM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX2NsdXN0ZXJzLCByZWZsaW5rX2Nwb3MpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDQ2LSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzA0NzpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYy03MDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzA1NS1cXHRoYW5kbGVfdCAqaGFuZGxlO1xcbmZzL29jZnMyL3hhdHRyLmM6NzA1NjpcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxcbmZzL29jZnMyL3hhdHRyLmM6NzA1NzpcXHRcXHRcXHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcXG5mcy9vY2ZzMi94YXR0ci5jLTcwNTgtXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcwNjItXFxuZnMvb2NmczIveGF0dHIuYzo3MDYzOlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKCh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGxlbik7XFxuZnMvb2NmczIveGF0dHIuYy03MDY0LVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDgzLVxcbmZzL29jZnMyL3hhdHRyLmM6NzA4NDpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBpbm9kZSwgYXJncywgXFx1MDAyNmV0LFxcbmZzL29jZnMyL3hhdHRyLmMtNzA4NS1cXHRcXHRcXHRcXHRcXHQgIG1ldGFfYWMsIGRhdGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDQtICovXFxuZnMvb2NmczIveGF0dHIuYzo3MTA1OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl90cmVlKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEwNi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDktXFx0aW50IHJldDtcXG5mcy9vY2ZzMi94YXR0ci5jOjcxMTA6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy03MTExLVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MTMwLVxcdHJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soYXJncy1cXHUwMDNlb2xkX2lub2RlLCBibGtfYmgsXFxuZnMvb2NmczIveGF0dHIuYzo3MTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEzMi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGFyYSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTQyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNjEtXFx0aWYgKCFpbmRleGVkKVxcbmZzL29jZnMyL3hhdHRyLmM6NzE2MjpcXHRcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTYzLVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcxNjQ6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl90cmVlKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTY1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXFxuZnMvb2NmczIveGF0dHIuYzo3MTczOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxcbmZzL29jZnMyL3hhdHRyLmMtNzE3NC17XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxODEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTgyOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxODMtXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjE2LVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMTc6XFx0XFx0YXJncy54YXR0cl9yZWZsaW5rZWQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5O1xcbmZzL29jZnMyL3hhdHRyLmMtNzIxOC1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMTktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMjA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoXFx1MDAyNmFyZ3MpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzIyMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMzYtXFxuZnMvb2NmczIveGF0dHIuYzo3MjM3OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soXFx1MDAyNmFyZ3MsIGJsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MjM4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTc4PWludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaC04Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTtcXG5mcy9vY2ZzMi94YXR0ci5oOjgzOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTg0LVxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6NDcuMjg5ODcwNzEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzkwNjkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgUmVmbGluayBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgb2NmczJfcmVmbGlua2AgZ2V0cyBpbnZva2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjYWxsIGNoYWluIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBgb2NmczJfcmVmbGlua2AgaXMgY2FsbGVkIGJ5IGBvY2ZzMl92ZnNfcmVmbGlua2AsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rX2lvY3RsYC4gQW5kIHRoYXQgYG9jZnMyX3JlZmxpbmtfaW9jdGxgIGZ1bmN0aW9uPyBJdCdzIGNhbGxlZCBmcm9tIGBvY2ZzMl9pb2N0bGAgaXRzZWxmLCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBgT0NGUzJfSU9DX1JFRkxJTktgIGlvY3RsIGlzIGlzc3VlZC4gU28sIGluIGVmZmVjdCwgdGhpcyByZWZsaW5rIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIGFuIGlvY3RsIGNhbGwsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5vdywgSSdtIGp1c3QgY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uOiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIEZyb20gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGxvb2sgYXQgaXRzIGNhbGwgY2hhaW4uIEl0IHNlZW1zIHRoYXQgdGhpcyBoYW5kbGUgaXMgY2FsbGVkIGZyb20gYG9jZnMyX3hhdHRyX3NldGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDc5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjUxLjAyODk0Mjk3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NjA3MjkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTI0OS1cXHRpZiAoaGFuZGxlKVxcbmZzL29jZnMyL2FjbC5jOjI1MDpcXHRcXHRyZXQgPSBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIGRpX2JoLCBuYW1lX2luZGV4LFxcbmZzL29jZnMyL2FjbC5jLTI1MS1cXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJcXFwiLCB2YWx1ZSwgc2l6ZSwgMCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9MzMwNT1zdGF0aWMgaW50IG9jZnMyX2luaXRfeGF0dHJfc2V0X2N0eHQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzM2MC1cXG5mcy9vY2ZzMi94YXR0ci5jOjMzNjE6c3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNTAyLSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6MzUwMzppbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL29jZnMyL3hhdHRyLmMtMzUwNC1cXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNTY2LVxcbmZzL29jZnMyL3hhdHRyLmM6MzU2NzpcXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcXHUwMDI2eGksIFxcdTAwMjZ4aXMsIFxcdTAwMjZ4YnMsIFxcdTAwMjZjdHh0KTtcXG5mcy9vY2ZzMi94YXR0ci5jLTM1NjgtXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTM1ODM9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNzAzLVxcbmZzL29jZnMyL3hhdHRyLmM6MzcwNDpcXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcXHUwMDI2eGksIFxcdTAwMjZ4aXMsIFxcdTAwMjZ4YnMsIFxcdTAwMjZjdHh0KTtcXG5mcy9vY2ZzMi94YXR0ci5jLTM3MDUtXFx0b2NmczJfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGN0eHQuaGFuZGxlLCBpbm9kZSwgMCk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTczNzY9aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTczODIte1xcbmZzL29jZnMyL3hhdHRyLmM6NzM4MzpcXHRyZXR1cm4gb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG5mcy9vY2ZzMi94YXR0ci5jLTczODQtXFx0XFx0XFx0XFx0ICAgICBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9Mzg9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKixcXG5mcy9vY2ZzMi94YXR0ci5oLTM5LVxcdFxcdCAgICBzaXplX3QsIGludCk7XFxuZnMvb2NmczIveGF0dHIuaDo0MDppbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuZnMvb2NmczIveGF0dHIuaC00MS1cXHRcXHRcXHQgICBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6NTMuMDE1MDIxNjI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNjUzNzQ4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmb3IgT0NGUzIgQUNMcy4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9zZXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0YC4gYG9jZnMyX3NldF9hY2xgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW9wX3NldF9hY2xgLCB3aGlsZSBgb2NmczJfaW5pdF9zZWN1cml0eV9zZXRgIGlzIGNhbGxlZCBmcm9tIGBvY2ZzMl9ta25vZF9sb2NrZWRgLlxuXG5UaGF0IGdpdmVzIG1lIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIGNyaXRpY2FsOiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBJJ20gbGVhbmluZyB0b3dhcmQgZm9jdXNpbmcgb24gYG9jZnMyX2luaXRfYWNsYCBhcyBhIGJldHRlciBzdGFydGluZyBwb2ludCB0aGFuIHRoZSBtb3JlIGdlbmVyYWwgYG9jZnMyX21rbm9kYC5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEknbSB6ZXJvaW5nIGluIG9uIGFyZTpcblxuKiAgIGBvY2ZzMl9pbml0X2FjbGBcbiogICBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWBcbiogICBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWBcbiogICBgb2NmczJfY2FsY194YXR0cl9pbml0YFxuKiAgIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYFxuKiAgIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBvY2ZzMl9pbml0X2FjbGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgb3IgaWYgaXQncyBzdGF0aWMuIEkgY2FuIHNlZSBpdCdzIGRlZmluZWQgaW4gYGZzL29jZnMyL2FjbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGZzL29jZnMyL2FjbC5oYC4gTG9va3MgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBhcmUgaW4gYGZzL29jZnMyL2FjbC5jYCBhcyB3ZWxsLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbiBgZnMvb2NmczIveGF0dHIuY2AuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBrbm93IE9DRlMyIG5lZWRzIGBPQ0ZTMl9GU2AsIGFuZCBpdCBkZXBlbmRzIG9uIGBDT05GSUdGU19GU2AuIEFuZCBJIHNlZSB0aGF0IGBGU19QT1NJWF9BQ0xgIGlzIHNlbGVjdGVkIGJ5IGBPQ0ZTMl9GU2AuXG5cbkkgbmVlZCB0byBjaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgYWdhaW4gdG8gY29uZmlybSBhbGwgb2YgdGhpcy5cblllcywgdGhlIEtjb25maWcgY29uZmlybXM6XG5gY29uZmlnIE9DRlMyX0ZTYFxuYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTYFxuYHNlbGVjdCBGU19QT1NJWF9BQ0xgXG5cbkFscmlnaHQsIHRoYXQgbWVhbnMgSSBzaG91bGQgdHJhY2sgdGhlIGZvbGxvd2luZyBjb25maWcgb3B0aW9uczpcblxuKiAgIGBPQ0ZTMl9GU2BcbiogICBgQ09ORklHRlNfRlNgXG5cbkJ1dCBoZXJlJ3MgYSB3cmlua2xlOiBgT0NGUzJfRlNgICpzZWxlY3RzKiBgRlNfUE9TSVhfQUNMYC4gRG9lcyBPQ0ZTMiBhbHNvIGhhdmUgYW55IG90aGVyIHNldHRpbmdzIGZvciBgUE9TSVhfQUNMYD8gSSdkIGJldHRlciBjaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzM6MDIuMDgwMzk5NDkzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5ODA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUE9TSVhfQUNMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTktXFx0c2VsZWN0IFFVT1RBX1RSRUVcXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5mcy9vY2ZzMi9LY29uZmlnLTExLVxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0xMTM9c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMTIyLVxcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxcbmZzL29jZnMyL2FjbC5jOjEyMzpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcXG5mcy9vY2ZzMi9hY2wuYy0xMjQtXFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmMtMTI1LVxcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcXG5mcy9vY2ZzMi9hY2wuYzoxMjY6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL2FjbC5jLTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTIzMS1cXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcXG5mcy9vY2ZzMi9hY2wuYzoyMzI6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XFxuZnMvb2NmczIvYWNsLmMtMjMzLVxcdFxcdGJyZWFrO1xcbmZzL29jZnMyL2FjbC5jLTIzNC1cXHRjYXNlIEFDTF9UWVBFX0RFRkFVTFQ6XFxuZnMvb2NmczIvYWNsLmM6MjM1OlxcdFxcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcXG5mcy9vY2ZzMi9hY2wuYy0yMzYtXFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbi0tXFxuZnMvb2NmczIvYWNsLmM9MjkzPXN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2lvcF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBib29sIHJjdSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTMwNC1cXHRvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuZnMvb2NmczIvYWNsLmM6MzA1OlxcdGlmICghKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxcbmZzL29jZnMyL2FjbC5jLTMwNi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMjktXFxuZnMvb2NmczIvYWNsLmM6MzMwOlxcdGlmICghKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxcbmZzL29jZnMyL2FjbC5jLTMzMS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTM1OT1pbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTM3Mi1cXG5mcy9vY2ZzMi9hY2wuYzozNzM6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi9hY2wuYy0zNzQtXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz00MTQ9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy00MjUtXFxuZnMvb2NmczIvYWNsLmM6NDI2OlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIvYWNsLmMtNDI3LVxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkge1xcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDQyLVxcbmZzL29jZnMyL2FjbC5jOjQ0MzpcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbmZzL29jZnMyL2FjbC5jLTQ0NC1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbi0tXFxuZnMvb2NmczIvb2NmczIuaD0yNTc9ZW51bSBvY2ZzMl9tb3VudF9vcHRpb25zXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2Ni1cXHRPQ0ZTMl9NT1VOVF9JTk9ERTY0ID0gMSBcXHUwMDNjXFx1MDAzYyA3LFxcdC8qIEFsbG93IGlub2RlIG51bWJlcnMgXFx1MDAzZSAyXjMyICovXFxuZnMvb2NmczIvb2NmczIuaDoyNjc6XFx0T0NGUzJfTU9VTlRfUE9TSVhfQUNMID0gMSBcXHUwMDNjXFx1MDAzYyA4LFxcdC8qIEZvcmNlIFBPU0lYIGFjY2VzcyBjb250cm9sIGxpc3RzICovXFxuZnMvb2NmczIvb2NmczIuaDoyNjg6XFx0T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSBcXHUwMDNjXFx1MDAzYyA5LFxcdC8qIERpc2FibGUgUE9TSVggYWNjZXNzXFxuZnMvb2NmczIvb2NmczIuaC0yNjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29udHJvbCBsaXN0cyAqL1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz02MDc9c3RhdGljIGludCBvY2ZzMl9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTcxNy1cXHRcXHRzYi1cXHUwMDNlc19mbGFncyA9IChzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IH5TQl9QT1NJWEFDTCkgfFxcbmZzL29jZnMyL3N1cGVyLmM6NzE4OlxcdFxcdFxcdCgob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgP1xcbmZzL29jZnMyL3N1cGVyLmMtNzE5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFNCX1BPU0lYQUNMIDogMCk7XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTk3Mz1zdGF0aWMgaW50IG9jZnMyX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMDI0LVxcdHNiLVxcdTAwM2VzX2ZsYWdzID0gKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgfihTQl9QT1NJWEFDTCB8IFNCX05PU0VDKSkgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8gU0JfUE9TSVhBQ0wgOiAwKTtcXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjYtXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyMzI9c3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVxcdH1cXG5mcy9vY2ZzMi9zdXBlci5jOjEyNjE6XFx0aWYgKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3N1cGVyLmMtMTI2Mi1cXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMjY3LVxcdC8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi9cXG5mcy9vY2ZzMi9zdXBlci5jOjEyNjg6XFx0aWYgKCEob3B0aW9ucy1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjYgKE9DRlMyX01PVU5UX1BPU0lYX0FDTCB8XFxuZnMvb2NmczIvc3VwZXIuYzoxMjY5OlxcdFxcdFxcdFxcdCAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkge1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3MC1cXHRcXHRpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKVxcbmZzL29jZnMyL3N1cGVyLmM6MTI3MTpcXHRcXHRcXHRvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3Mi1cXHRcXHRlbHNlXFxuZnMvb2NmczIvc3VwZXIuYzoxMjczOlxcdFxcdFxcdG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYy0xMjc0LVxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTI3OD1zdGF0aWMgaW50IG9jZnMyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTEzODQtXFx0XFx0aWYgKHJlc3VsdC5uZWdhdGVkKSB7XFxuZnMvb2NmczIvc3VwZXIuYzoxMzg1OlxcdFxcdFxcdG1vcHQtXFx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYzoxMzg2OlxcdFxcdFxcdG1vcHQtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2PSB+T0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTM4Ny1cXHRcXHR9IGVsc2Uge1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4ODpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4OTpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNj0gfk9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEzOTAtXFx0XFx0fVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz0xNDE2PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTQ4NC1cXG5mcy9vY2ZzMi9zdXBlci5jOjE0ODU6XFx0aWYgKG9wdHMgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpXFxuZnMvb2NmczIvc3VwZXIuYy0xNDg2LVxcdFxcdHNlcV9wcmludGYocywgXFxcIixhY2xcXFwiKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9MTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7XFxuZnMvb2NmczIveGF0dHIuYy0xMDItXFx0W09DRlMyX1hBVFRSX0lOREVYX1VTRVJdXFx0XFx0PSBcXHUwMDI2b2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLFxcbmZzL29jZnMyL3hhdHRyLmM6MTAzOlxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXVxcdD0gXFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxcbmZzL29jZnMyL3hhdHRyLmM6MTA0OlxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVF1cXHQ9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2RlZmF1bHQsXFxuZnMvb2NmczIveGF0dHIuYy0xMDUtXFx0W09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdXFx0XFx0PSBcXHUwMDI2b2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MTQ9aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02MjYtXFxuZnMvb2NmczIveGF0dHIuYzo2Mjc6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi94YXR0ci5jLTYyOC1cXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCBcXHUwMDI2XFx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY3OC1cXHR9XFxuZnMvb2NmczIveGF0dHIuYzo2Nzk6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi94YXR0ci5jLTY4MC1cXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCBcXHUwMDI2XFx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTg5MT1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtOTA2LVxcbmZzL29jZnMyL3hhdHRyLmM6OTA3OlxcdGNhc2UgT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzpcXG5mcy9vY2ZzMi94YXR0ci5jOjkwODpcXHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUOlxcbmZzL29jZnMyL3hhdHRyLmMtOTA5LVxcdFxcdGlmICghKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfUE9TSVhBQ0wpKVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz03MTczPXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MTc3LVxcdHJldHVybiB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2XFxuZnMvb2NmczIveGF0dHIuYzo3MTc4OlxcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MgXFx1MDAyNlxcdTAwMjZcXG5mcy9vY2ZzMi94YXR0ci5jOjcxNzk6XFx0ICAgICAgIHR5cGUgIT0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XFxuZnMvb2NmczIveGF0dHIuYy03MTgwLX1cXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9MTQ9ZW51bSBvY2ZzMl94YXR0cl90eXBlIHtcXG5mcy9vY2ZzMi94YXR0ci5oLTE1LVxcdE9DRlMyX1hBVFRSX0lOREVYX1VTRVIgPSAxLFxcbmZzL29jZnMyL3hhdHRyLmg6MTY6XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyxcXG5mcy9vY2ZzMi94YXR0ci5oOjE3OlxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULFxcbmZzL29jZnMyL3hhdHRyLmgtMTgtXFx0T0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzM6MDIuMjk3Mzg1MTU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjUxNjY1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE9DRlMyIEFDTCBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiBpdC4gIFRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGhvdyBBQ0xzIGFyZSBoYW5kbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbiDigJMgbWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmsgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkuIEl0IHNlZW1zIHRoZSBsb2dpYyBhcm91bmQgZmV0Y2hpbmcsIGR1cGxpY2F0aW5nLCBhbmQgc2V0dGluZyBBQ0xzIGlzIGJlaW5nIHJldmlzZWQsIGFuZCB0aGVyZSdzIHNvbWUgbG9ja2luZyBiZWhhdmlvciBjaGFuZ2UgYXJvdW5kIHhhdHRyIHNldHRpbmcuIFRoaXMgaXMgKmNvcmUqIGZpbGVzeXN0ZW0gc3R1ZmY7IHdlICpuZWVkKiB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIG5vIG5hc3R5IGJ1Z3Mgc2xpcHBlZCBpbi5cblxuRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBJIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgYEZTX1BPU0lYX0FDTGAgaWYgSSBzcGVjaWZ5IGBPQ0ZTMl9GU2AsIHdoaWNoIGlzIGdyZWF0LCBsZXNzIGNsdXR0ZXIuICBMZXQncyBzZWUsIGBPQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVGAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiAgU2luY2UgYElORVRgIGFuZCBgU1lTRlNgIGFyZSBwcmV0dHkgc3RhbmRhcmQsIHRoZSBpbXBvcnRhbnQgb25lIHRvIGVuc3VyZSB3ZSBoYXZlIGVuYWJsZWQgaXMgYENPTkZJR0ZTX0ZTYC4gVGh1cywgSSdsbCBuZWVkIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuXG5cbkknbSB0aGlua2luZywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kLCBhcyBzdWNoLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIFJlYXNvbmluZyBpcyB0aGF0IGl0IGRlYWxzIHdpdGggQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgY2FuIGxlYWQgdG8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvY2tpbmcgaXNzdWVzLiAgSSd2ZSBkZWNpZGVkIG9uIHRoZSBmb2xsb3dpbmcgYEZvY3VzU3ltYm9sc2A6XG5cbiogICBgb2NmczJfaW5pdF9hY2xgXG4qICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgXG4qICAgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgXG4qICAgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGBcbiogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWBcbiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYFxuXG5TbywgdG8gZW5hYmxlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIEknbSBnb2luZyB0byBzZXQgYEVuYWJsZUNvbmZpZ3NgOlxuXG4qICAgYE9DRlMyX0ZTYFxuKiAgIGBDT05GSUdGU19GU2BcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuICBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIGNvbW1vbiBlbm91Z2ggdG8gbm90IHdvcnJ5IGFib3V0LiBETE0gaXMgdXNlZCB3aXRoIGBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUmAsIGJ1dCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIGxvY2FsIG1vdW50cyBhbmQgdGhhdCBpdCBjYW4gdXNlIGxvY2FsIG1vdW50IG9yIE8yQ0IuIEFzIE8yQ0IgaXMgdGhlIGRlZmF1bHQsIEkgdGhpbmsgSSdtIGdvb2QgdG8gZ28uXG5cbkkgd2FzIGJyaWVmbHkgY29uc2lkZXJpbmcgYG9jZnMyX21rbm9kYCBhcyBhIGZvY3VzIHN5bWJvbCwgYnV0IHRoYXQgc2VlbXMgYSBiaXQgdG9vIGJyb2FkLiBUaGUgQUNMLXNwZWNpZmljIGZ1bmN0aW9ucyBJJ3ZlIHNlbGVjdGVkIGFyZSBkZWZpbml0ZWx5IHRoZSBiZXR0ZXIgdGFyZ2V0cy4gVGh1cywgSSdsbCBzdGljayB0byBteSBzZWxlY3RlZCBzeW1ib2xzLiBJIGFtIG5vdyBjb25maWRlbnQgaW4gbXkgc2VsZWN0aW9uIGFuZCBJIHdpbGwgc3VibWl0IHRoaXMgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NjEsIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMzOjEyLjU0OTA1NTMxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjUxNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcmVsZWFzZVwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCIsXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcmVsZWFzZVwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCIsXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 12:04:58 +0000 UTC FinishedAt: 2026-07-27 12:33:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS", "CONFIGFS_FS" ], "series_id": "741c36f8-3725-4dcd-a5a2-46b216e94cfb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_init_acl", "ocfs2_acl_init_prepare", "ocfs2_acl_init_release", "ocfs2_calc_xattr_init", "ocfs2_xattr_set_handle", "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+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVlMGY5ZWJmYmQ1MDgxYWM2ODAwNzc0NTA2ZTdhMjM4OWE2OGUzODRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjozMTo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMDkwZWM2MGZiNTc2YTYgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCAmIzQzOzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gb2NmczJfYWNsO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdFx0ICAgICAgaW50IHR5cGUsXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaClcbiB7XG4gXHRpbnQgbmFtZV9pbmRleDtcbkBAIC0zNDksNjMgJiM0MzszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG4gICovXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuJiM0Mzt2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4mIzQzO1x0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbiYjNDM7XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbiB7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0c3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDtcbi1cdGludCByZXQgPSAwLCByZXQyO1xuLVx0dW1vZGVfdCBtb2RlO1xuLVxuLVx0aWYgKCFTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbi1cdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCxcbi1cdFx0XHRcdFx0XHQgICBkaXJfYmgpO1xuLVx0XHRcdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShkaXIpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXHRcdFx0aWYgKElTX0VSUihhY2wpKVxuLVx0XHRcdFx0cmV0dXJuIFBUUl9FUlIoYWNsKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuJiM0MztcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4mIzQzO1x0c3RhdGUtXHUwMDNlbW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID1cbiYjNDM7XHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuJiM0MztcdFx0dXBfcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4gXHRcdH1cbi1cdFx0aWYgKCFhY2wpIHtcbi1cdFx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlIFx1MDAyNiB+Y3VycmVudF91bWFzaygpO1xuLVx0XHRcdHJldCA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0bWxvZ19lcnJubyhyZXQpO1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRpZiAoIXN0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdFx0fVxuJiM0MztcdFx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2c3RhdGUtXHUwMDNlYWNsLCBHRlBfTk9GUyxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNnN0YXRlLVx1MDAzZW1vZGUpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdFx0aWYgKHJldCA9PSAwKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbiYjNDM7XHRcdFx0XHRzdGF0ZS1cdTAwM2VhY2wgPSBOVUxMO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4mIzQzO1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuJiM0MztcdFx0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlbW9kZSBcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XG4gXHR9XG4tXHRpZiAoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSBcdTAwMjZcdTAwMjYgYWNsKSB7XG4tXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpIHtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO2NsZWFudXA6XG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShzdGF0ZSk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4gXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbi1cdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcbi1cdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXG4mIzQzO1x0XHRcdFx0XHQgICAgZGF0YV9hYyk7XG4gXHRcdFx0aWYgKHJldClcbi1cdFx0XHRcdGdvdG8gY2xlYW51cDtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdG1vZGUgPSBpbm9kZS1cdTAwM2VpX21vZGU7XG4tXHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZhY2wsIEdGUF9OT0ZTLCBcdTAwMjZtb2RlKTtcbi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbi1cdFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdGlmIChyZXQyKSB7XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQyKTtcbi1cdFx0XHRyZXQgPSByZXQyO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcbi1cdFx0XHRcdFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XG4mIzQzO1x0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cdTAwM2Vtb2RlKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRtbG9nX2Vycm5vKHJldCk7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4mIzQzO1x0XHRcdFx0XHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cdTAwM2VhY2wsXG4mIzQzO1x0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4gXHRcdH1cbiBcdH1cbi1jbGVhbnVwOlxuLVx0cG9zaXhfYWNsX3JlbGVhc2UoYWNsKTtcbiYjNDM7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Zi4uYTkxZjljZTI3OGQ2ZDMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmhcbkBAIC0yMCw5ICYjNDM7MjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcbiBpbnQgb2NmczJfaW9wX3NldF9hY2woc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbiBcdFx0ICAgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBpbnQgdHlwZSk7XG4gZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTtcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosXG4tXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcbiYjNDM7c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSB7XG4mIzQzO1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7XG4mIzQzO1x0c3RydWN0IHBvc2l4X2FjbCAqYWNsO1xuJiM0MztcdHVtb2RlX3QgbW9kZTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbiYjNDM7XHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuJiM0Mzt2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiYjNDM7XHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4mIzQzO1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYyxcbiYjNDM7XHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuJiM0MztcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xuIFxuICNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZWEzN2E1MDU4MDg5MGMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9uYW1laS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jXG5AQCAtMjU2LDYgJiM0MzsyNTYsNyBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0c2lnc2V0X3Qgb2xkc2V0O1xuIFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9kZW50cnlfbG9jayAqZGwgPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTMzMCwxMCAmIzQzOzMzMSwxNCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHR9XG4gXHR9XG4gXG4mIzQzO1x0c3RhdHVzID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBwYXJlbnRfZmVfYmgsIFx1MDAyNmFjbF9zdGF0ZSk7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gbGVhdmU7XG4mIzQzO1xuIFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG4tXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBwYXJlbnRfZmVfYmgsIG1vZGUsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhKTtcbiYjNDM7XHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLFxuJiM0MztcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gXHRcdGdvdG8gbGVhdmU7XG5AQCAtNDExLDggJiM0Mzs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuJiM0MztcdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIG5ld19mZV9iaCwgbWV0YV9hYywgZGF0YV9hYyxcbiYjNDM7XHRcdFx0XHRcdTAwMjZhY2xfc3RhdGUpO1xuIFxuIFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG5AQCAtNDc3LDYgJiM0Mzs0ODIsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuJiM0MztcbiBcdG9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoXHUwMDI2bG9va3VwKTtcbiBcbiBcdGlmIChpbm9kZV9hYylcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggZmNkZGQzYzEzYWNkZGQuLjg2ZjAyOTM2ODFmY2NmIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuJiM0MztpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4tXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXG4tXHRcdFx0ICBpbnQgKnhhdHRyX2NyZWRpdHMsXG4tXHRcdFx0ICBpbnQgKndhbnRfbWV0YSlcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiYjNDM7XHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICYjNDM7NjI1LDE1IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4gXHRcdFx0XHRcdFx0ICAgICBzaS1cdTAwM2V2YWx1ZV9sZW4pO1xuIFxuIFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4tXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0YWNsX2xlbiA9IG9jZnMyX3hhdHRyX2dldF9ub2xvY2soZGlyLCBkaXJfYmgsXG4tXHRcdFx0XHRcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULFxuLVx0XHRcdFx0XHRcJiMzNDtcJiMzNDssIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0YV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuJiM0MztcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0YV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC02ODMsMTQgJiM0Mzs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4gXHR9XG4tXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG4tXHQgICAgYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbi1cdFx0LyogZm9yIGRpcmVjdG9yeSwgaXQgaGFzIERFRkFVTFQgYW5kIEFDQ0VTUyB0d28gdHlwZXMgb2YgYWNscyAqL1xuLVx0XHRuZXdfY2x1c3RlcnMgPSAoU19JU0RJUihtb2RlKSA/IDIgOiAxKSAqXG4tXHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsIGFjbF9sZW4pO1xuLVx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuLVx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbi1cdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiYjNDM7XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbiYjNDM7XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiYjNDM7XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiYjNDM7XHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4mIzQzO1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbiYjNDM7XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiYjNDM7XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuJiM0MztcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4mIzQzO1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuJiM0MztcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiYjNDM7XHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuJiM0MztcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0IGFjbF9sZW4pO1xuJiM0MztcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PVxuJiM0MztcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4mIzQzO1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0zNDgzLDkgJiM0MzszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gfVxuIFxuIC8qXG4tICogVGhpcyBmdW5jdGlvbiBvbmx5IGNhbGxlZCBkdWluZyBjcmVhdGluZyBpbm9kZVxuLSAqIGZvciBpbml0IHNlY3VyaXR5L2FjbCB4YXR0cnMgb2YgdGhlIG5ldyBpbm9kZS5cbi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLlxuJiM0MzsgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxuJiM0MzsgKiB0aGF0IGlzIHN0aWxsIHVucHVibGlzaGVkLCB1bmhhc2hlZCwgYW5kIHVuYXR0YWNoZWQgdG8gYSBkZW50cnkuXG4mIzQzOyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuXG4mIzQzOyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXG4gICovXG4gaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuQEAgLTM1NDIsOCAmIzQzOzM1NTUsNiBAQCBpbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0eGlzLmlub2RlX2JoID0geGJzLmlub2RlX2JoID0gZGlfYmg7XG4gXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXHUwMDNlYl9kYXRhO1xuIFxuLVx0ZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVxuIFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXHUwMDI2eGlzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gY2xlYW51cDtcbkBAIC0zNTU2LDcgJiM0MzszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdHJldCA9IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShpbm9kZSwgZGksIFx1MDAyNnhpLCBcdTAwMjZ4aXMsIFx1MDAyNnhicywgXHUwMDI2Y3R4dCk7XG4gXG4gY2xlYW51cDpcbi1cdHVwX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4gXHRicmVsc2UoeGJzLnhhdHRyX2JoKTtcbiBcdG9jZnMyX3hhdHRyX2J1Y2tldF9mcmVlKHhicy5idWNrZXQpO1xuIFxuQEAgLTcyNTcsNiAmIzQzOzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHRyZXQgPSBvY2ZzMl9pbml0X3NlY3VyaXR5X2dldChpbm9kZSwgZGlyLCBxc3RyLCBOVUxMKTtcbiBcdGlmIChyZXQpIHtcbkBAIC03MjY5LDEwICYjNDM7NzI4MCwxNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0XHRtbG9nX2Vycm5vKHJldCk7XG4gXHRcdGdvdG8gbGVhdmU7XG4gXHR9XG4tXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byB1bmxvY2s7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCBcdTAwMjZhY2xfc3RhdGUpO1xuIFx0aWYgKHJldClcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFxuJiM0Mzt1bmxvY2s6XG4mIzQzO1x0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuIFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG4gXHRicmVsc2UoZGlyX2JoKTtcbiBsZWF2ZTpcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5oIGIvZnMvb2NmczIveGF0dHIuaFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIveGF0dHIuaFxuQEAgLTU1LDkgJiM0Mzs1NSwxMiBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcbiBcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4gXHRcdFx0ICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTtcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbi1cdFx0XHQgIHVtb2RlX3QsIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICosXG4tXHRcdFx0ICBpbnQgKiwgaW50ICosIGludCAqKTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG4mIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiYjNDM7XHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4mIzQzO1x0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSk7XG4gXG4gLypcbiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7LAogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2luaXRfYWNsJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3ByZXBhcmUmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfeGF0dHJfc2V0X2hhbmRsZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaykuIEl0IGNoYW5nZXMgaG93IEFDTHMgYXJlIGZldGNoZWQsIGR1cGxpY2F0ZWQsIGFuZCBzZXQsIGFuZCBtb2RpZmllcyB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgeGF0dHIgc2V0dGluZy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZTBmOWViZmJkNTA4MWFjNjgwMDc3NDUwNmU3YTIzODlhNjhlMzg0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdWwgMjcgMTI6MzE6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jCmluZGV4IGFmMWUyY2VkYjIxN2YxLi4wOTBlYzYwZmI1NzZhNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmMKQEAgLTExMCw4ICYjNDM7MTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gb2NmczJfYWNsOwogfQogCi1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgICAgaW50IHR5cGUsCiYjNDM7c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLAogCQkJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKQogewogCWludCBuYW1lX2luZGV4OwpAQCAtMzQ5LDYzICYjNDM7MzQ4LDEwNSBAQCBpbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCwKICAqIHRoZW4gY2xvbmUgdG8gbmV3IGlub2RlLiBDYWxsZWQgZnJvbSBvY2ZzMl9ta25vZC4KICAqLwotaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgIHN0cnVjdCBpbm9kZSAqZGlyLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAotCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKLQkJICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKQomIzQzO3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPSBOVUxMOwomIzQzOwlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsCiYjNDM7CQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsCiYjNDM7CQkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0mZ3Q7aV9zYik7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgcmV0MjsKLQl1bW9kZV90IG1vZGU7Ci0KLQlpZiAoIVNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpIHsKLQkJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7Ci0JCQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7Ci0JCQlhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsCi0JCQkJCQkgICBkaXJfYmgpOwotCQkJdXBfcmVhZCgmYW1wO09DRlMyX0koZGlyKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQkJCWlmIChJU19FUlIoYWNsKSkKLQkJCQlyZXR1cm4gUFRSX0VSUihhY2wpOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJc3RhdGUtJmd0O2FjbCA9IE5VTEw7CiYjNDM7CXN0YXRlLSZndDttb2RlID0gaW5vZGUtJmd0O2lfbW9kZTsKJiM0MzsKJiM0MzsJaWYgKFNfSVNMTksoaW5vZGUtJmd0O2lfbW9kZSkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlkb3duX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wgPQomIzQzOwkJCW9jZnMyX2dldF9hY2xfbm9sb2NrKGRpciwgQUNMX1RZUEVfREVGQVVMVCwgZGlyX2JoKTsKJiM0MzsJCXVwX3JlYWQoJmFtcDtPQ0ZTMl9JKGRpciktJmd0O2lwX3hhdHRyX3NlbSk7CiYjNDM7CQlpZiAoSVNfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCkpIHsKJiM0MzsJCQlyZXQgPSBQVFJfRVJSKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJc3RhdGUtJmd0O2RlZmF1bHRfYWNsID0gTlVMTDsKJiM0MzsJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCWlmICghYWNsKSB7Ci0JCQltb2RlID0gaW5vZGUtJmd0O2lfbW9kZSAmYW1wOyB+Y3VycmVudF91bWFzaygpOwotCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJCWlmIChyZXQpIHsKLQkJCQltbG9nX2Vycm5vKHJldCk7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKSB7CiYjNDM7CQkJc3RhdGUtJmd0O2FjbCA9IHBvc2l4X2FjbF9kdXAoc3RhdGUtJmd0O2RlZmF1bHRfYWNsKTsKJiM0MzsJCQlpZiAoIXN0YXRlLSZndDthY2wpIHsKJiM0MzsJCQkJcmV0ID0gLUVOT01FTTsKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiYjNDM7CQkJcmV0ID0gX19wb3NpeF9hY2xfY3JlYXRlKCZhbXA7c3RhdGUtJmd0O2FjbCwgR0ZQX05PRlMsCiYjNDM7CQkJCQkJICZhbXA7c3RhdGUtJmd0O21vZGUpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGNsZWFudXA7CiYjNDM7CQkJaWYgKHJldCA9PSAwKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDthY2wpOwomIzQzOwkJCQlzdGF0ZS0mZ3Q7YWNsID0gTlVMTDsKJiM0MzsJCQl9CiYjNDM7CQkJaWYgKCFTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CQkJCXBvc2l4X2FjbF9yZWxlYXNlKHN0YXRlLSZndDtkZWZhdWx0X2FjbCk7CiYjNDM7CQkJCXN0YXRlLSZndDtkZWZhdWx0X2FjbCA9IE5VTEw7CiYjNDM7CQkJfQomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdGF0ZS0mZ3Q7bW9kZSAmYW1wOz0gfmN1cnJlbnRfdW1hc2soKTsKIAkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RhdGUtJmd0O21vZGUgJmFtcDs9IH5jdXJyZW50X3VtYXNrKCk7CiAJfQotCWlmICgob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpICZhbXA7JmFtcDsgYWNsKSB7Ci0JCWlmIChTX0lTRElSKGlub2RlLSZndDtpX21vZGUpKSB7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO2NsZWFudXA6CiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CWlmIChTX0lTTE5LKGlub2RlLSZndDtpX21vZGUpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWlmIChvc2ItJmd0O3NfbW91bnRfb3B0ICZhbXA7IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgewomIzQzOwkJaWYgKFNfSVNESVIoaW5vZGUtJmd0O2lfbW9kZSkgJmFtcDsmYW1wOyBzdGF0ZS0mZ3Q7ZGVmYXVsdF9hY2wpIHsKIAkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCi0JCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULCBhY2wsCi0JCQkJCSAgICBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJCQkJCSAgICBBQ0xfVFlQRV9ERUZBVUxULAomIzQzOwkJCQkJICAgIHN0YXRlLSZndDtkZWZhdWx0X2FjbCwgbWV0YV9hYywKJiM0MzsJCQkJCSAgICBkYXRhX2FjKTsKIAkJCWlmIChyZXQpCi0JCQkJZ290byBjbGVhbnVwOwomIzQzOwkJCQlyZXR1cm4gcmV0OwogCQl9Ci0JCW1vZGUgPSBpbm9kZS0mZ3Q7aV9tb2RlOwotCQlyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoJmFtcDthY2wsIEdGUF9OT0ZTLCAmYW1wO21vZGUpOwotCQlpZiAocmV0ICZsdDsgMCkKLQkJCXJldHVybiByZXQ7CiYjNDM7CX0KIAotCQlyZXQyID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBtb2RlKTsKLQkJaWYgKHJldDIpIHsKLQkJCW1sb2dfZXJybm8ocmV0Mik7Ci0JCQlyZXQgPSByZXQyOwotCQkJZ290byBjbGVhbnVwOwotCQl9Ci0JCWlmIChyZXQgJmd0OyAwKSB7Ci0JCQlyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsCi0JCQkJCSAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLAotCQkJCQkgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS0mZ3Q7bW9kZSk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW1sb2dfZXJybm8ocmV0KTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7CiYjNDM7CQlpZiAoc3RhdGUtJmd0O2FjbCkgewomIzQzOwkJCXJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsCiYjNDM7CQkJCQkgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS0mZ3Q7YWNsLAomIzQzOwkJCQkJICAgIG1ldGFfYWMsIGRhdGFfYWMpOwogCQl9CiAJfQotY2xlYW51cDoKLQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwomIzQzOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oCmluZGV4IDY2N2M2ZjAzZmE2MDZmLi5hOTFmOWNlMjc4ZDZkMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvb2NmczIvYWNsLmgKQEAgLTIwLDkgJiM0MzsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpOwogaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpOwogZXh0ZXJuIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICosCi0JCQkgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopOwomIzQzO3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgewomIzQzOwlzdHJ1Y3QgcG9zaXhfYWNsICpkZWZhdWx0X2FjbDsKJiM0MzsJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwomIzQzOwl1bW9kZV90IG1vZGU7CiYjNDM7fTsKJiM0MzsKJiM0MztpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpciwKJiM0MzsJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCwKJiM0MzsJCQkgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7CiYjNDM7dm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTsKJiM0MztpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKJiM0MzsJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCiYjNDM7CQkgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqbWV0YV9hYywKJiM0MzsJCSAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLAomIzQzOwkJICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpOwogCiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDEyNzc2NjZjNzdjZDJkLi5lYTM3YTUwNTgwODkwYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbmFtZWkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi9uYW1laS5jCkBAIC0yNTYsNiAmIzQzOzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJc2lnc2V0X3Qgb2xkc2V0OwogCWludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7CiAJc3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7CiYjNDM7CXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07CiAKIAl0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LSZndDtkX25hbWUubGVuLCBkZW50cnktJmd0O2RfbmFtZS5uYW1lLAogCQkJICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0mZ3Q7aXBfYmxrbm8sCkBAIC0zMzAsMTAgJiM0MzszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJfQogCX0KIAomIzQzOwlzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgJmFtcDthY2xfc3RhdGUpOwomIzQzOwlpZiAoc3RhdHVzICZsdDsgMCkKJiM0MzsJCWdvdG8gbGVhdmU7CiYjNDM7CiAJLyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovCi0Jc3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgcGFyZW50X2ZlX2JoLCBtb2RlLAotCQkJCSAgICAgICAmYW1wO3NpLCAmYW1wO3dhbnRfY2x1c3RlcnMsCi0JCQkJICAgICAgICZhbXA7eGF0dHJfY3JlZGl0cywgJmFtcDt3YW50X21ldGEpOwomIzQzOwlzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCAmYW1wO3NpLCAmYW1wO3dhbnRfY2x1c3RlcnMsCiYjNDM7CQkJCSAgICAgICAmYW1wO3hhdHRyX2NyZWRpdHMsICZhbXA7d2FudF9tZXRhLAomIzQzOwkJCQkgICAgICAgJmFtcDthY2xfc3RhdGUpOwogCWlmIChzdGF0dXMgJmx0OyAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBsZWF2ZTsKQEAgLTQxMSw4ICYjNDM7NDE2LDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwKIAkJaW5jX25saW5rKGRpcik7CiAJfQogCi0Jc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwKLQkJCSBtZXRhX2FjLCBkYXRhX2FjKTsKJiM0MzsJc3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLAomIzQzOwkJCQkmYW1wO2FjbF9zdGF0ZSk7CiAKIAlpZiAoc3RhdHVzICZsdDsgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC00NzcsNiAmIzQzOzQ4Miw4IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJYnJlbHNlKHBhcmVudF9mZV9iaCk7CiAJa2ZyZWUoc2kudmFsdWUpOwogCiYjNDM7CW9jZnMyX2FjbF9pbml0X3JlbGVhc2UoJmFtcDthY2xfc3RhdGUpOwomIzQzOwogCW9jZnMyX2ZyZWVfZGlyX2xvb2t1cF9yZXN1bHQoJmFtcDtsb29rdXApOwogCiAJaWYgKGlub2RlX2FjKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggZmNkZGQzYzEzYWNkZGQuLjg2ZjAyOTM2ODFmY2NmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTYxMSwxMyAmIzQzOzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAogCXJldHVybiByZXQ7CiB9CiAKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLAotCQkJICB1bW9kZV90IG1vZGUsCiYjNDM7aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLAogCQkJICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksCi0JCQkgIGludCAqd2FudF9jbHVzdGVycywKLQkJCSAgaW50ICp4YXR0cl9jcmVkaXRzLAotCQkJICBpbnQgKndhbnRfbWV0YSkKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci0mZ3Q7aV9zYik7CkBAIC02MjgsMTkgJiM0Mzs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJCQkJCSAgICAgc2ktJmd0O3ZhbHVlX2xlbik7CiAKIAlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKLQkJZG93bl9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCwKLQkJCQkJT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsCi0JCQkJCSYjMzQ7JiMzNDssIE5VTEwsIDApOwotCQl1cF9yZWFkKCZhbXA7T0NGUzJfSShkaXIpLSZndDtpcF94YXR0cl9zZW0pOwotCQlpZiAoYWNsX2xlbiAmZ3Q7IDApIHsKLQkJCWFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKLQkJCWlmIChTX0lTRElSKG1vZGUpKQotCQkJCWFfc2l6ZSAmbHQ7Jmx0Oz0gMTsKLQkJfSBlbHNlIGlmIChhY2xfbGVuICE9IDAgJmFtcDsmYW1wOyBhY2xfbGVuICE9IC1FTk9EQVRBKSB7Ci0JCQlyZXQgPSBhY2xfbGVuOwotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJYV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7CiYjNDM7CQl9CiYjNDM7CQlpZiAoYWNsX3N0YXRlLSZndDthY2wpIHsKJiM0MzsJCQlhY2xfbGVuID0gYWNsX3N0YXRlLSZndDthY2wtJmd0O2FfY291bnQgKgomIzQzOwkJCQkgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTsKJiM0MzsJCQlhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTsKIAkJfQogCX0KIApAQCAtNjgzLDE0ICYjNDM7Njc2LDMzIEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCQkJICAgbmV3X2NsdXN0ZXJzKTsKIAkJKndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVyczsKIAl9Ci0JaWYgKG9zYi0mZ3Q7c19tb3VudF9vcHQgJmFtcDsgT0NGUzJfTU9VTlRfUE9TSVhfQUNMICZhbXA7JmFtcDsKLQkgICAgYWNsX2xlbiAmZ3Q7IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCS8qIGZvciBkaXJlY3RvcnksIGl0IGhhcyBERUZBVUxUIGFuZCBBQ0NFU1MgdHdvIHR5cGVzIG9mIGFjbHMgKi8KLQkJbmV3X2NsdXN0ZXJzID0gKFNfSVNESVIobW9kZSkgPyAyIDogMSkgKgotCQkJCW9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItJmd0O2lfc2IsIGFjbF9sZW4pOwotCQkqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci0mZ3Q7aV9zYiwKLQkJCQkJCQkgICBuZXdfY2x1c3RlcnMpOwotCQkqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzOwomIzQzOwlpZiAob3NiLSZndDtzX21vdW50X29wdCAmYW1wOyBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHsKJiM0MzsJCWlmIChhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsICZhbXA7JmFtcDsgU19JU0RJUihtb2RlKSkgewomIzQzOwkJCWFjbF9sZW4gPSBhY2xfc3RhdGUtJmd0O2RlZmF1bHRfYWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwkJaWYgKGFjbF9zdGF0ZS0mZ3Q7YWNsKSB7CiYjNDM7CQkJYWNsX2xlbiA9IGFjbF9zdGF0ZS0mZ3Q7YWNsLSZndDthX2NvdW50ICoKJiM0MzsJCQkJICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7CiYjNDM7CQkJaWYgKGFjbF9sZW4gJmd0OyBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewomIzQzOwkJCQluZXdfY2x1c3RlcnMgPQomIzQzOwkJCQkJb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci0mZ3Q7aV9zYiwKJiM0MzsJCQkJCQkJCSBhY2xfbGVuKTsKJiM0MzsJCQkJKnhhdHRyX2NyZWRpdHMgJiM0Mzs9CiYjNDM7CQkJCQlvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLSZndDtpX3NiLAomIzQzOwkJCQkJCQkJIG5ld19jbHVzdGVycyk7CiYjNDM7CQkJCSp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7CiYjNDM7CQkJfQomIzQzOwkJfQogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNDgzLDkgJiM0MzszNDk1LDEwIEBAIHN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FsbGVkIGR1aW5nIGNyZWF0aW5nIGlub2RlCi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuCi0gKiBBbGwgdHJhbnNhbmN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kLgomIzQzOyAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlCiYjNDM7ICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LgomIzQzOyAqIE9yZGluYXJ5IHhhdHRyIHVwZGF0ZXMgbXVzdCB1c2Ugb2NmczJfeGF0dHJfc2V0KCkuCiYjNDM7ICogQWxsIHRyYW5zYWN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kIG9yIHN5bWxpbmsgY2FsbGVycy4KICAqLwogaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCSAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCkBAIC0zNTQyLDggJiM0MzszNTU1LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAl4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDsKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtJmd0O2JfZGF0YTsKIAotCWRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKLQogCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsIG5hbWVfaW5kZXgsIG5hbWUsICZhbXA7eGlzKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXA7CkBAIC0zNTU2LDcgJiM0MzszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSwKIAlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCAmYW1wO3hpLCAmYW1wO3hpcywgJmFtcDt4YnMsICZhbXA7Y3R4dCk7CiAKIGNsZWFudXA6Ci0JdXBfd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKTsKIAlicmVsc2UoeGJzLnhhdHRyX2JoKTsKIAlvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTsKIApAQCAtNzI1Nyw2ICYjNDM7NzI2Nyw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMOwomIzQzOwlzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9OwogCiAJcmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7CiAJaWYgKHJldCkgewpAQCAtNzI2OSwxMCAmIzQzOzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIGxlYXZlOwogCX0KLQlyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgZGlyLCBOVUxMLCBkaXJfYmgsIE5VTEwsIE5VTEwpOwomIzQzOwomIzQzOwlyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgJmFtcDthY2xfc3RhdGUpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byB1bmxvY2s7CiYjNDM7CiYjNDM7CXJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBOVUxMLCBOVUxMLCAmYW1wO2FjbF9zdGF0ZSk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCiYjNDM7dW5sb2NrOgomIzQzOwlvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKCZhbXA7YWNsX3N0YXRlKTsKIAlvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTsKIAlicmVsc2UoZGlyX2JoKTsKIGxlYXZlOgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuaCBiL2ZzL29jZnMyL3hhdHRyLmgKaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmgKQEAgLTU1LDkgJiM0Mzs1NSwxMiBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosCiBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqLAogCQkJICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLAogCQkJICAgICBpbnQgKiwgaW50ICosIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICoqKTsKLWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLAotCQkJICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLAotCQkJICBpbnQgKiwgaW50ICosIGludCAqKTsKJiM0MzsKJiM0MztzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlOwomIzQzO2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKJiM0MzsJCQkgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSwKJiM0MzsJCQkgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLAomIzQzOwkJCSAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSk7CiAKIC8qCiAgKiB4YXR0cnMgY2FuIGxpdmUgaW5zaWRlIGFuIGlub2RlLCBhcyBwYXJ0IG9mIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTgwCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE9DRlMyIEFDTCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgT0NGUzIsIGFuZCBpdCBzZWVtcyBsaWtlIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSB0byBBQ0wgaW5pdGlhbGl6YXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCByZXN0cnVjdHVyaW5nIGhvdyBBQ0xzIGFyZSBoYW5kbGVkLCB3aXRoIG5ldyBmdW5jdGlvbnMgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGUgZmFjdCB0aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIG5vdyB0YWtpbmcgYW4gYG9jZnMyX2FjbF9zdGF0ZWAgaW5zdGVhZCBvZiBhIGBidWZmZXJfaGVhZGAgaW5kaWNhdGVzIGEgc2hpZnQgaW4gaG93IEFDTCBkYXRhIGlzIG1hbmFnZWQgZHVyaW5nIHhhdHRyIGNhbGN1bGF0aW9ucy4gQW5kIHRoYXQgYGRvd25fd3JpdGUoJmFtcDtPQ0ZTMl9JKGlub2RlKS0mZ3Q7aXBfeGF0dHJfc2VtKWAgY2FsbCBpcyBnb25lIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIHdoaWNoIGlzIGludGVyZXN0aW5nLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBldmVuIHNvbWV0aGluZyB0aGF0JiMzOTtzIHByYWN0aWNhbGx5IGZ1enphYmxlLiBPQ0ZTMiBpcyBhIGZpbGVzeXN0ZW0sIHNvIHllYWgsIGFic29sdXRlbHkgaXQgaXMuIEkgY2FuIHNldCB1cCBhIGxvb3BiYWNrIGRldmljZSBvciBzb21ldGhpbmcgc2ltaWxhciwgbW91bnQgaXQsIGFuZCBzdGFydCB0aHJvd2luZyB0aGluZ3MgYXQgaXQuIFRoZSBwb3RlbnRpYWwgZm9yIGZ1enppbmcgaXMgZGVmaW5pdGVseSB0aGVyZS4KCkxldCBtZSBzZWUsIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBmb3IgT0NGUzI/IENsZWFybHksIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBiYXNlLCBidXQgc2luY2UgdGhpcyBwYXRjaCB0b3VjaGVzIEFDTHMsIGBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMYCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgdGhvc2UgYXJlIGVuYWJsZWQsIHRoZW4gSSYjMzk7bGwgc2VhcmNoIGZvciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvb2NmczIvS2NvbmZpZzoyOmNvbmZpZyBPQ0ZTMl9GU1xuZnMvb2NmczIvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctMjctXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVx0dHJpc3RhdGUgXCYjMzQ7TzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy00MS1cbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXG5mcy9vY2ZzMi9LY29uZmlnLTQzLVx0dHJpc3RhdGUgXCYjMzQ7T0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxuZnMvb2NmczIvS2NvbmZpZzo1NDpjb25maWcgT0NGUzJfRlNfU1RBVFNcbmZzL29jZnMyL0tjb25maWctNTUtXHRib29sIFwmIzM0O09DRlMyIHN0YXRpc3RpY3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gcHJvbXB0OgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY3kgTGFuZHNjYXBlIGluIGBmcy9vY2ZzMi9LY29uZmlnYCoqCgpPa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgc29tZSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgc3RhcnRpbmcgcG9pbnQgaXMgYGZzL29jZnMyL0tjb25maWdgLiBUaGF0IG1ha2VzIHNlbnNlLiBUaGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBpcyBhbG1vc3QgY2VydGFpbmx5IHdoZXJlIHRoZSBvcHRpb25zIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIGZvciBPQ0ZTMi4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyB3aGVyZSBJIHdvdWxkICphbHdheXMqIGJlZ2luIHdoZW4gZGlnZ2luZyBpbnRvIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBpZiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZXhwbGljaXRseSBzdGF0ZWQsIG9yIGlmIEkgd2lsbCBoYXZlIHRvIGRvIGEgZGVlcGVyIGRpZyBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIE9DRlMyX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IFNZU0ZTIFx1MDAyNlx1MDAyNiBDT05GSUdGU19GU1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgSkJEMlxuICAgNzpcdFx0c2VsZWN0IENSQzMyXG4gICA4Olx0XHRzZWxlY3QgUVVPVEFcbiAgIDk6XHRcdHNlbGVjdCBRVU9UQV9UUkVFXG4gIDEwOlx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDExOlx0XHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuICAxMjpcdFx0aGVscFxuICAxMzpcdFx0ICBPQ0ZTMiBpcyBhIGdlbmVyYWwgcHVycG9zZSBleHRlbnQgYmFzZWQgc2hhcmVkIGRpc2sgY2x1c3RlciBmaWxlXG4gIDE0Olx0XHQgIHN5c3RlbSB3aXRoIG1hbnkgc2ltaWxhcml0aWVzIHRvIGV4dDMuIEl0IHN1cHBvcnRzIDY0IGJpdCBpbm9kZVxuICAxNTpcdFx0ICBudW1iZXJzLCBhbmQgaGFzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kaW5nIG1ldGFkYXRhIGdyb3VwcyB3aGljaCBtYXlcbiAgMTY6XHRcdCAgYWxzbyBtYWtlIGl0IGF0dHJhY3RpdmUgZm9yIG5vbi1jbHVzdGVyZWQgdXNlLlxuICAxNzpcdFxuICAxODpcdFx0ICBZb3UmIzM5O2xsIHdhbnQgdG8gaW5zdGFsbCB0aGUgb2NmczItdG9vbHMgcGFja2FnZSBpbiBvcmRlciB0byBhdCBsZWFzdFxuICAxOTpcdFx0ICBnZXQgXCYjMzQ7bW91bnQub2NmczJcJiMzNDsuXG4gIDIwOlx0XG4gIDIxOlx0XHQgIFByb2plY3Qgd2ViIHBhZ2U6ICAgIGh0dHBzOi8vb2NmczIud2lraS5rZXJuZWwub3JnL1xuICAyMjpcdFx0ICBUb29scyB3ZWIgcGFnZTogICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFya2Zhc2hlaC9vY2ZzMi10b29sc1xuICAyMzpcdFx0ICBPQ0ZTMiBtYWlsaW5nIGxpc3RzOiBodHRwczovL3N1YnNwYWNlLmtlcm5lbC5vcmcvbGlzdHMubGludXguZGV2Lmh0bWxcbiAgMjQ6XHRcbiAgMjU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gT0NGUzIsIHNlZSB0aGUgZmlsZVxuICAyNjpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIucnN0XHUwMDNlLlxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBPQ0ZTMl9GU19PMkNCXG4gIDI5Olx0XHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbiAgMzA6XHRcdGRlcGVuZHMgb24gT0NGUzJfRlNcbiAgMzE6XHRcdGRlZmF1bHQgeVxuICAzMjpcdFx0aGVscFxuICAzMzpcdFx0ICBPQ0ZTMiBpbmNsdWRlcyBhIHNpbXBsZSBrZXJuZWxzcGFjZSBjbHVzdGVyaW5nIHBhY2thZ2UsIHRoZSBPQ0ZTMlxuICAzNDpcdFx0ICBDbHVzdGVyIEJhc2UuICBJdCBvbmx5IHJlcXVpcmVzIGEgdmVyeSBzbWFsbCB1c2Vyc3BhY2UgY29tcG9uZW50XG4gIDM1Olx0XHQgIHRvIGNvbmZpZ3VyZSBpdC4gVGhpcyBjb21lcyB3aXRoIHRoZSBzdGFuZGFyZCBvY2ZzMi10b29scyBwYWNrYWdlLlxuICAzNjpcdFx0ICBPMkNCIGlzIGxpbWl0ZWQgdG8gbWFpbnRhaW5pbmcgYSBjbHVzdGVyIGZvciBPQ0ZTMiBmaWxlIHN5c3RlbXMuXG4gIDM3Olx0XHQgIEl0IGNhbm5vdCBtYW5hZ2UgYW55IG90aGVyIGNsdXN0ZXIgYXBwbGljYXRpb25zLlxuICAzODpcdFxuICAzOTpcdFx0ICBJdCBpcyBhbHdheXMgc2FmZSB0byBzYXkgWSBoZXJlLCBhcyB0aGUgY2x1c3RlcmluZyBtZXRob2QgaXNcbiAgNDA6XHRcdCAgcnVuLXRpbWUgc2VsZWN0YWJsZS5cbiAgNDE6XHRcbiAgNDI6XHRjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbiAgNDM6XHRcdHRyaXN0YXRlIFwmIzM0O09DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXCYjMzQ7XG4gIDQ0Olx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFx1MDAyNlx1MDAyNiBETE1cbiAgNDU6XHRcdGRlZmF1bHQgeVxuICA0NjpcdFx0aGVscFxuICA0NzpcdFx0ICBUaGlzIG9wdGlvbiB3aWxsIGFsbG93IE9DRlMyIHRvIHVzZSB1c2Vyc3BhY2UgY2x1c3RlcmluZyBzZXJ2aWNlc1xuICA0ODpcdFx0ICBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBETE0gaW4gZnMvZGxtLiAgSWYgeW91IGFyZSB1c2luZyBhXG4gIDQ5Olx0XHQgIHVzZXJzcGFjZSBjbHVzdGVyIG1hbmFnZXIsIHNheSBZIGhlcmUuXG4gIDUwOlx0XG4gIDUxOlx0XHQgIEl0IGlzIHNhZmUgdG8gc2F5IFksIGFzIHRoZSBjbHVzdGVyaW5nIG1ldGhvZCBpcyBydW4tdGltZVxuICA1MjpcdFx0ICBzZWxlY3RhYmxlLlxuICA1MzpcdFxuICA1NDpcdGNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuICA1NTpcdFx0Ym9vbCBcJiMzNDtPQ0ZTMiBzdGF0aXN0aWNzXCYjMzQ7XG4gIDU2Olx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuICA1NzpcdFx0ZGVmYXVsdCB5XG4gIDU4Olx0XHRoZWxwXG4gIDU5Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyBzb21lIGZzIHN0YXRpc3RpY3MgdG8gYmUgY2FwdHVyZWQuIEVuYWJsaW5nXG4gIDYwOlx0XHQgIHRoaXMgb3B0aW9uIG1heSBpbmNyZWFzZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uLlxuICA2MTpcdFxuICA2MjpcdGNvbmZpZyBPQ0ZTMl9ERUJVR19NQVNLTE9HXG4gIDYzOlx0XHRib29sIFwmIzM0O09DRlMyIGxvZ2dpbmcgc3VwcG9ydFwmIzM0O1xuICA2NDpcdFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuICA2NTpcdFx0ZGVmYXVsdCB5XG4gIDY2Olx0XHRoZWxwXG4gIDY3Olx0XHQgIFRoZSBvY2ZzMiBmaWxlc3lzdGVtIGhhcyBhbiBleHRlbnNpdmUgbG9nZ2luZyBzeXN0ZW0uICBUaGUgc3lzdGVtXG4gIDY4Olx0XHQgIGFsbG93cyBzZWxlY3Rpb24gb2YgZXZlbnRzIHRvIGxvZyB2aWEgZmlsZXMgaW4gL3N5cy9vMmNiL2xvZ21hc2svLlxuICA2OTpcdFx0ICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwsIGJ1dCBpdCBhbGxvd3MgZGVidWdnaW5nIG9mXG4gIDcwOlx0XHQgIG9jZnMyIGZpbGVzeXN0ZW0gaXNzdWVzLlxuICA3MTpcdFxuICA3MjpcdGNvbmZpZyBPQ0ZTMl9ERUJVR19GU1xuICA3MzpcdFx0Ym9vbCBcJiMzNDtPQ0ZTMiBleHBlbnNpdmUgY2hlY2tzXCYjMzQ7XG4gIDc0Olx0XHRkZXBlbmRzIG9uIE9DRlMyX0ZTXG4gIDc1Olx0XHRkZWZhdWx0IG5cbiAgNzY6XHRcdGhlbHBcbiAgNzc6XHRcdCAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZXhwZW5zaXZlIGNvbnNpc3RlbmN5IGNoZWNrcy4gRW5hYmxlXG4gIDc4Olx0XHQgIHRoaXMgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgb25seSBhcyBpdCBpcyBsaWtlbHkgdG8gZGVjcmVhc2VcbiAgNzk6XHRcdCAgcGVyZm9ybWFuY2Ugb2YgdGhlIGZpbGVzeXN0ZW0uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgwMQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrIGZvciBPQ0ZTMioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IE9DRlMyX0ZTIGlzIHNldCB1cCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEl0IGxvb2tzIGxpa2UgaXQgZGlyZWN0bHkgZGVwZW5kcyBvbiBJTkVULCBTWVNGUywgYW5kIENPTkZJR0ZTX0ZTLiBJdCYjMzk7cyBhbHNvIHNlbGVjdGluZyBGU19QT1NJWF9BQ0wsIHdoaWNoIGlzIGltcG9ydGFudC4gVGhpcyBtZWFucywgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcmIzM5O3MgcHJvcGVybHkgZW5hYmxlZCwgSSByZWFsbHkgbmVlZCB0byB2ZXJpZnkgT0NGUzJfRlMsIElORVQsIFNZU0ZTLCBhbmQgQ09ORklHRlNfRlMgYXJlIGFsbCB0b2dnbGVkIG9uLgoKV2FpdCBhIHNlY29uZCwgSU5FVCBhbmQgU1lTRlMgYXJlIHVzdWFsbHkgZGVmYXVsdCBzZXR0aW5ncywgc28gSSBkb24mIzM5O3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGVtIHRvbyBtdWNoIHJpZ2h0IG5vdy4gQ09ORklHRlNfRlMgbWlnaHQgYmUgdGhlIHN0aWNraW5nIHBvaW50LCB0aG91Z2guIFNvLCBteSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB2ZXJpZnlpbmcgT0NGUzJfRlMgYW5kIENPTkZJR0ZTX0ZTIGFyZSBlbmFibGVkIHRvIGVuc3VyZSBJIGhhdmUgYSBjb21wbGV0ZSBhbmQgZnVuY3Rpb25hbCBPQ0ZTMiBzZXR1cC4KCk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gY29yZSBmdW5jdGlvbmFsaXR5LCBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gdmVyaWZ5IGEgbGlzdCBvZiBPQ0ZTMiBmdW5jdGlvbnMuIEkgd2lsbCBmb2N1cyBvbjogYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlc2Ugc2VlbSBjcnVjaWFsIGZvciBmaWxlIGNyZWF0aW9uLCBBQ0wgaGFuZGxpbmcsIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbS4KCkxldCYjMzk7cyBzZWUgaWYgYG9jZnMyX21rbm9kYCBpcyByZWFjaGFibGUuIEl0IHNob3VsZCBiZSwgc2luY2UgaXQmIzM5O3MgYSBzdGFuZGFyZCBpbm9kZSBvcGVyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvIGNoZWNrIG15IGFzc3VtcHRpb25zLiBUaGVuLCBJIHNlZSBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBjYWxsZWQgZnJvbSBgb2NmczJfc3ltbGlua2AuIExldCYjMzk7cyBzZWUgaWYgYG9jZnMyX3N5bWxpbmtgIGlzIGNhbGxlZCBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYC4gSSB3aWxsIHZlcmlmeSBieSBjaGVja2luZyB0aGF0IHBhcnRpY3VsYXIgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDIzOD1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cdGlmICghcHJlc2VydmUpIHtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyOTc6XHRcdGVycm9yID0gb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKGRpciwgbmV3X29ycGhhbl9pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyOTgtXHRcdFx0XHRcdFx0ICAgIFx1MDAyNm5ld19kZW50cnktXHUwMDNlZF9uYW1lKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTcxODI9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzI2My0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzI2NDppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIveGF0dHIuYy03MjY1LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTgzPWludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oLTg3LVx0XHRcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcbmZzL29jZnMyL3hhdHRyLmg6ODg6aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL29jZnMyL3hhdHRyLmgtODktXHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODg4CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKk9DRlMyIFNlY3VyaXR5IENvbnRleHQgRHVyaW5nIFJlZmxpbmtpbmcgYW5kIFN5bWxpbmsgQ3JlYXRpb24qKgoKUmlnaHQsIHNvIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgYG9jZnMyX3JlZmxpbmtgIHBhdGguIE1ha2VzIHNlbnNlOyB3ZSBuZWVkIHRvIHByb3BhZ2F0ZSBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBBQ0xzIGR1cmluZyBhIHJlZmxpbmsgb3BlcmF0aW9uLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiB3aGF0IGFib3V0IHN5bWJvbGljIGxpbmtzPyBBcmUgc2VjdXJpdHkgY29udGV4dCBhbmQgQUNMcyBoYW5kbGVkIGNvbnNpc3RlbnRseSBmb3IgKnRob3NlKiB0eXBlcyBvZiBsaW5rcz8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGJlaGF2aW9yIGlzIGNvbnNpc3RlbnQuIExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBvY2ZzMl9zeW1saW5rYCBhbHNvIGNhbGxzIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhhdCBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIEl0JiMzOTtzIGEga2V5IGFyZWEgdG8gY2hlY2sgZm9yIGNvbnNpc3RlbnQgYmVoYXZpb3IgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMgaWYgdGhpcyBzdGVwIGlzIG1pc3Npbmcgb3IgaW1wcm9wZXJseSBpbXBsZW1lbnRlZC4gTWFraW5nIGEgbWVudGFsIG5vdGUgdG8gY29uZmlybSBgb2NmczJfc3ltbGlua2AgY2FsbHMgdGhlIHNlY3VyaXR5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIGNydWNpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3N5bWxpbmsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYW9wcy5jLTQxLVxuZnMvb2NmczIvYW9wcy5jOjQyOnN0YXRpYyBpbnQgb2NmczJfc3ltbGlua19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuZnMvb2NmczIvYW9wcy5jLTQzLVx0XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpXG4tLVxuZnMvb2NmczIvYW9wcy5jLTUxLVxuZnMvb2NmczIvYW9wcy5jOjUyOlx0dHJhY2Vfb2NmczJfc3ltbGlua19nZXRfYmxvY2soXG5mcy9vY2ZzMi9hb3BzLmMtNTMtXHRcdFx0KHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF9ibGtubyxcbi0tXG5mcy9vY2ZzMi9hb3BzLmM9MTI5PWludCBvY2ZzMl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxuLS1cbmZzL29jZnMyL2FvcHMuYy0xNDYtXHRcdC8qIHRoaXMgYWx3YXlzIGRvZXMgSS9PIGZvciBzb21lIHJlYXNvbi4gKi9cbmZzL29jZnMyL2FvcHMuYzoxNDc6XHRcdGVyciA9IG9jZnMyX3N5bWxpbmtfZ2V0X2Jsb2NrKGlub2RlLCBpYmxvY2ssIGJoX3Jlc3VsdCwgY3JlYXRlKTtcbmZzL29jZnMyL2FvcHMuYy0xNDgtXHRcdGdvdG8gYmFpbDtcbi0tXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxuLS1cbmZzL29jZnMyL2lub2RlLmMtNDY5LVx0ICAgIGNhc2UgU19JRkxOSzpcbmZzL29jZnMyL2lub2RlLmM6NDcwOlx0XHQgICAgaW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcbmZzL29jZnMyL2lub2RlLmMtNDcxLVx0XHQgICAgaW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTE3MTY9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTgxMy1cbmZzL29jZnMyL25hbWVpLmM6MTgxNDpzdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9vY2ZzMi9uYW1laS5jLTE4MTUtXHRcdFx0IHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTg0My1cbmZzL29jZnMyL25hbWVpLmM6MTg0NDpcdHRyYWNlX29jZnMyX3N5bWxpbmtfYmVnaW4oZGlyLCBkZW50cnksIHN5bW5hbWUsXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDUtXHRcdFx0XHQgIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUpO1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMTk1MS1cbmZzL29jZnMyL25hbWVpLmM6MTk1MjpcdHRyYWNlX29jZnMyX3N5bWxpbmtfY3JlYXRlKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbixcbmZzL29jZnMyL25hbWVpLmMtMTk1My1cdFx0XHRcdCAgIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjctXHRuZXdzaXplID0gbCAtIDE7XG5mcy9vY2ZzMi9uYW1laS5jOjE5Njg6XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvb2NmczIvbmFtZWkuYy0xOTY5LVx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI5MzM9Y29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfZGlyX2lvcHMgPSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yOTM4LVx0LnJtZGlyXHRcdD0gb2NmczJfdW5saW5rLFxuZnMvb2NmczIvbmFtZWkuYzoyOTM5Olx0LnN5bWxpbmtcdD0gb2NmczJfc3ltbGluayxcbmZzL29jZnMyL25hbWVpLmMtMjk0MC1cdC5ta2Rpclx0XHQ9IG9jZnMyX21rZGlyLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MTE0Nz1ERUZJTkVfRVZFTlQob2NmczJfX2dldF9ibG9jaywgbmFtZSxcdFxcXG4tLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xMTUxLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxMTUyOkRFRklORV9PQ0ZTMl9HRVRfQkxPQ0tfRVZFTlQob2NmczJfc3ltbGlua19nZXRfYmxvY2spO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xMTUzLVxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5MT1ERUZJTkVfT0NGUzJfREVOVFJZX09QUyhvY2ZzMl91bmxpbmspO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMTkyLVxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTkzOkRFRklORV9PQ0ZTMl9ERU5UUllfT1BTKG9jZnMyX3N5bWxpbmtfY3JlYXRlKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjE5NC1cbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIzMjU9REVGSU5FX09DRlMyX1VMTF9VTExfVUlOVF9FVkVOVChvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjMyNi1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjMyNzpUUkFDRV9FVkVOVChvY2ZzMl9zeW1saW5rX2JlZ2luLFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMzI4LVx0VFBfUFJPVE8odm9pZCAqZGlyLCB2b2lkICpkZW50cnksIGNvbnN0IGNoYXIgKnN5bW5hbWUsXG4tLVxuZnMvb2NmczIvc3ltbGluay5jPTgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfZmFzdF9zeW1saW5rX2FvcHMgPSB7XG4tLVxuZnMvb2NmczIvc3ltbGluay5jLTgzLVxuZnMvb2NmczIvc3ltbGluay5jOjg0OmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcbmZzL29jZnMyL3N5bWxpbmsuYy04NS1cdC5nZXRfbGlua1x0PSBwYWdlX2dldF9saW5rLFxuLS1cbmZzL29jZnMyL3N5bWxpbmsuaC0xMi1cbmZzL29jZnMyL3N5bWxpbmsuaDoxMzpleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuZnMvb2NmczIvc3ltbGluay5oLTE0LWV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG9jZnMyX2Zhc3Rfc3ltbGlua19hb3BzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjcwOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYG9jZnMyX3N5bWxpbmtgIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHRoZSBtZW50aW9uIG9mIGBmcy9vY2ZzMi9uYW1laS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmUgMTgxNCB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IGxvb2tpbmcgYXQgdGhlIGBvY2ZzMl9zeW1saW5rYCBmdW5jdGlvbiB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0gY29kZS4gVGhhdCYjMzk7cyB3aGVyZSBzeW1ib2xpYyBsaW5rIGNyZWF0aW9uIGlzIGhhbmRsZWQsIHNvIGl0IG1ha2VzIHNlbnNlIHdlJiMzOTtkIGJlIGRpZ2dpbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoYXQgbGluZSwgYW5kIGlkZWFsbHksIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCBjb3VsZCBiZSBhIHNwZWNpZmljIGJ1ZywgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBvciBldmVuIGp1c3Qgc29tZSBpbnRlcmVzdGluZyBjb2RlIGZsb3cgdG8gZXhhbWluZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgbGluZSBpcyBkb2luZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IHN5bWxpbmtzIGFyZSBoYW5kbGVkIGluIE9DRlMyOiB0aGUgaW5vZGUgYWxsb2NhdGlvbiwgdGhlIGRhdGEgYmxvY2sgYWxsb2NhdGlvbiwgdGhlIGZvcm1hdCBvZiB0aGUgbGluayYjMzk7cyBjb250ZW50Li4uIHRoYXQgY29udGV4dCB3aWxsIGJlIGtleSB0byBwcm9wZXJseSB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiBvZiB0aGF0IHBhcnRpY3VsYXIgbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9uYW1laS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgxNDpcdHN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbjE4MTU6XHRcdFx0XHQgc3RydWN0IGlub2RlICpkaXIsXG4xODE2Olx0XHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbjE4MTc6XHRcdFx0XHQgY29uc3QgY2hhciAqc3ltbmFtZSlcbjE4MTg6XHR7XG4xODE5Olx0XHRpbnQgc3RhdHVzLCBsLCBjcmVkaXRzO1xuMTgyMDpcdFx0dTY0IG5ld3NpemU7XG4xODIxOlx0XHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE5VTEw7XG4xODIyOlx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcbjE4MjM6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4xODI0Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7XG4xODI1Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCA9IE5VTEw7XG4xODI2Olx0XHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IE5VTEw7XG4xODI3Olx0XHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTtcbjE4Mjg6XHRcdGhhbmRsZV90ICpoYW5kbGUgPSBOVUxMO1xuMTgyOTpcdFx0c3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmlub2RlX2FjID0gTlVMTDtcbjE4MzA6XHRcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDtcbjE4MzE6XHRcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICp4YXR0cl9hYyA9IE5VTEw7XG4xODMyOlx0XHRpbnQgd2FudF9jbHVzdGVycyA9IDA7XG4xODMzOlx0XHRpbnQgeGF0dHJfY3JlZGl0cyA9IDA7XG4xODM0Olx0XHRzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyBzaSA9IHtcbjE4MzU6XHRcdFx0Lm5hbWUgPSBOVUxMLFxuMTgzNjpcdFx0XHQuZW5hYmxlID0gMSxcbjE4Mzc6XHRcdH07XG4xODM4Olx0XHRpbnQgZGlkX3F1b3RhID0gMCwgZGlkX3F1b3RhX2lub2RlID0gMDtcbjE4Mzk6XHRcdHN0cnVjdCBvY2ZzMl9kaXJfbG9va3VwX3Jlc3VsdCBsb29rdXAgPSB7IE5VTEwsIH07XG4xODQwOlx0XHRzaWdzZXRfdCBvbGRzZXQ7XG4xODQxOlx0XHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xuMTg0MjpcdFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XG4xODQzOlx0XG4xODQ0Olx0XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2JlZ2luKGRpciwgZGVudHJ5LCBzeW1uYW1lLFxuMTg0NTpcdFx0XHRcdFx0ICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lKTtcbjE4NDY6XHRcbjE4NDc6XHRcdHN0YXR1cyA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcbjE4NDg6XHRcdGlmIChzdGF0dXMpIHtcbjE4NDk6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTg1MDpcdFx0XHRnb3RvIGJhaWw7XG4xODUxOlx0XHR9XG4xODUyOlx0XG4xODUzOlx0XHRzYiA9IGRpci1cdTAwM2VpX3NiO1xuMTg1NDpcdFx0b3NiID0gT0NGUzJfU0Ioc2IpO1xuMTg1NTpcdFxuMTg1NjpcdFx0bCA9IHN0cmxlbihzeW1uYW1lKSAmIzQzOyAxO1xuMTg1NzpcdFxuMTg1ODpcdFx0Y3JlZGl0cyA9IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHNiKTtcbjE4NTk6XHRcbjE4NjA6XHRcdC8qIGxvY2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi9cbjE4NjE6XHRcdHN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcdTAwMjZwYXJlbnRfZmVfYmgsIDEpO1xuMTg2MjpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTg2MzpcdFx0XHRpZiAoc3RhdHVzICE9IC1FTk9FTlQpXG4xODY0Olx0XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTg2NTpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuMTg2NjpcdFx0fVxuMTg2NzpcdFxuMTg2ODpcdFx0ZGlyZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtXHUwMDNlYl9kYXRhO1xuMTg2OTpcdFx0aWYgKCFvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpcmZlKSkge1xuMTg3MDpcdFx0XHQvKiBjYW4mIzM5O3QgbWFrZSBhIGZpbGUgaW4gYSBkZWxldGVkIGRpcmVjdG9yeS4gKi9cbjE4NzE6XHRcdFx0c3RhdHVzID0gLUVOT0VOVDtcbjE4NzI6XHRcdFx0Z290byBiYWlsO1xuMTg3MzpcdFx0fVxuMTg3NDpcdFxuMTg3NTpcdFx0c3RhdHVzID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbjE4NzY6XHRcdFx0XHRcdFx0ICAgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4pO1xuMTg3NzpcdFx0aWYgKHN0YXR1cylcbjE4Nzg6XHRcdFx0Z290byBiYWlsO1xuMTg3OTpcdFxuMTg4MDpcdFx0c3RhdHVzID0gb2NmczJfcHJlcGFyZV9kaXJfZm9yX2luc2VydChvc2IsIGRpciwgcGFyZW50X2ZlX2JoLFxuMTg4MTpcdFx0XHRcdFx0XHQgICAgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4xODgyOlx0XHRcdFx0XHRcdCAgICAgIGRlbnRyeS1cdTAwM2VkX25hbWUubGVuLCBcdTAwMjZsb29rdXApO1xuMTg4MzpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTg4NDpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xODg1Olx0XHRcdGdvdG8gYmFpbDtcbjE4ODY6XHRcdH1cbjE4ODc6XHRcbjE4ODg6XHRcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X2lub2RlKG9zYiwgXHUwMDI2aW5vZGVfYWMpO1xuMTg4OTpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTg5MDpcdFx0XHRpZiAoc3RhdHVzICE9IC1FTk9TUEMpXG4xODkxOlx0XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTg5MjpcdFx0XHRnb3RvIGJhaWw7XG4xODkzOlx0XHR9XG4xODk0Olx0XG4xODk1Olx0XHRpbm9kZSA9IG9jZnMyX2dldF9pbml0X2lub2RlKGRpciwgU19JRkxOSyB8IFNfSVJXWFVHTyk7XG4xODk2Olx0XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuMTg5NzpcdFx0XHRzdGF0dXMgPSBQVFJfRVJSKGlub2RlKTtcbjE4OTg6XHRcdFx0aW5vZGUgPSBOVUxMO1xuMTg5OTpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTAwOlx0XHRcdGdvdG8gYmFpbDtcbjE5MDE6XHRcdH1cbjE5MDI6XHRcbjE5MDM6XHRcdC8qIGdldCBzZWN1cml0eSB4YXR0ciAqL1xuMTkwNDpcdFx0c3RhdHVzID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2c2kpO1xuMTkwNTpcdFx0aWYgKHN0YXR1cykge1xuMTkwNjpcdFx0XHRpZiAoc3RhdHVzID09IC1FT1BOT1RTVVBQKVxuMTkwNzpcdFx0XHRcdHNpLmVuYWJsZSA9IDA7XG4xOTA4Olx0XHRcdGVsc2Uge1xuMTkwOTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbjE5MTA6XHRcdFx0XHRnb3RvIGJhaWw7XG4xOTExOlx0XHRcdH1cbjE5MTI6XHRcdH1cbjE5MTM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6CgoqKkRpdmluZyBpbnRvIHRoZSBPQ0ZTMiBTeW1saW5rIENyZWF0aW9uKioKCk9rYXksIHNvIEkgd2FzIGxvb2tpbmcgYXQgaG93IE9DRlMyIGhhbmRsZXMgc3ltbGluayBjcmVhdGlvbiwgc3BlY2lmaWNhbGx5LCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBzZWN1cml0eSBhdHRyaWJ1dGVzIGFuZCBBQ0xzLiBJIHRob3VnaHQgYG9jZnMyX3N5bWxpbmtgIGRpcmVjdGx5IGNhbGxlZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCwgYnV0IHVwb24gY2xvc2VyIGluc3BlY3Rpb24sIEkgc2VlIGl0IGRvZXNuJiMzOTt0LiBJbnN0ZWFkLCBpdCBzZWVtcyB0byBnbyB0aHJvdWdoIGEgY291cGxlIG9mIGludGVybWVkaWF0ZSBjYWxsczogZmlyc3QgYG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0YCwgYW5kIHRoZW4gaXQgbGVhZHMgdG8gYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuICBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci4gTm93IEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIGRvaW5nLCBzbyBJJiMzOTtsbCBjaGVjayBpdCYjMzk7cyBpbXBsZW1lbnRhdGlvbiBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb2NmczIvbmFtZWkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE5MTQ6XHRcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgeGF0dHIgKi9cbjE5MTU6XHRcdGlmIChzaS5lbmFibGUpIHtcbjE5MTY6XHRcdFx0c3RhdHVzID0gb2NmczJfY2FsY19zZWN1cml0eV9pbml0KGRpciwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG4xOTE3Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ4YXR0cl9hYyk7XG4xOTE4Olx0XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbjE5MTk6XHRcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTIwOlx0XHRcdFx0Z290byBiYWlsO1xuMTkyMTpcdFx0XHR9XG4xOTIyOlx0XHR9XG4xOTIzOlx0XG4xOTI0Olx0XHQvKiBkb24mIzM5O3QgcmVzZXJ2ZSBiaXRtYXAgc3BhY2UgZm9yIGZhc3Qgc3ltbGlua3MuICovXG4xOTI1Olx0XHRpZiAobCBcdTAwM2Ugb2NmczJfZmFzdF9zeW1saW5rX2NoYXJzKHNiKSlcbjE5MjY6XHRcdFx0d2FudF9jbHVzdGVycyAmIzQzOz0gMTtcbjE5Mjc6XHRcbjE5Mjg6XHRcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCB3YW50X2NsdXN0ZXJzLCBcdTAwMjZkYXRhX2FjKTtcbjE5Mjk6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbjE5MzA6XHRcdFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDKVxuMTkzMTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbjE5MzI6XHRcdFx0Z290byBiYWlsO1xuMTkzMzpcdFx0fVxuMTkzNDpcdFxuMTkzNTpcdFx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBjcmVkaXRzICYjNDM7IHhhdHRyX2NyZWRpdHMpO1xuMTkzNjpcdFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4xOTM3Olx0XHRcdHN0YXR1cyA9IFBUUl9FUlIoaGFuZGxlKTtcbjE5Mzg6XHRcdFx0aGFuZGxlID0gTlVMTDtcbjE5Mzk6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuMTk0MDpcdFx0XHRnb3RvIGJhaWw7XG4xOTQxOlx0XHR9XG4xOTQyOlx0XG4xOTQzOlx0XHQvKiBTdGFydGluZyB0byBjaGFuZ2UgdGhpbmdzLCByZXN0YXJ0IGlzIG5vIGxvbmdlciBwb3NzaWJsZS4gKi9cbjE5NDQ6XHRcdG9jZnMyX2Jsb2NrX3NpZ25hbHMoXHUwMDI2b2xkc2V0KTtcbjE5NDU6XHRcdGRpZF9ibG9ja19zaWduYWxzID0gMTtcbjE5NDY6XHRcbjE5NDc6XHRcdHN0YXR1cyA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTtcbjE5NDg6XHRcdGlmIChzdGF0dXMpXG4xOTQ5Olx0XHRcdGdvdG8gYmFpbDtcbjE5NTA6XHRcdGRpZF9xdW90YV9pbm9kZSA9IDE7XG4xOTUxOlx0XG4xOTUyOlx0XHR0cmFjZV9vY2ZzMl9zeW1saW5rX2NyZWF0ZShkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sXG4xOTUzOlx0XHRcdFx0XHQgICBkZW50cnktXHUwMDNlZF9uYW1lLm5hbWUsXG4xOTU0Olx0XHRcdFx0XHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbjE5NTU6XHRcdFx0XHRcdCAgIGlub2RlLVx1MDAzZWlfbW9kZSk7XG4xOTU2Olx0XG4xOTU3Olx0XHRzdGF0dXMgPSBvY2ZzMl9ta25vZF9sb2NrZWQob3NiLCBkaXIsIGlub2RlLFxuMTk1ODpcdFx0XHRcdFx0ICAgIDAsIFx1MDAyNm5ld19mZV9iaCwgcGFyZW50X2ZlX2JoLCBoYW5kbGUsXG4xOTU5Olx0XHRcdFx0XHQgICAgaW5vZGVfYWMpO1xuMTk2MDpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTk2MTpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTYyOlx0XHRcdGdvdG8gYmFpbDtcbjE5NjM6XHRcdH1cbjE5NjQ6XHRcbjE5NjU6XHRcdGZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgbmV3X2ZlX2JoLVx1MDAzZWJfZGF0YTtcbjE5NjY6XHRcdGlub2RlLVx1MDAzZWlfcmRldiA9IDA7XG4xOTY3Olx0XHRuZXdzaXplID0gbCAtIDE7XG4xOTY4Olx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xuMTk2OTpcdFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcbjE5NzA6XHRcdGlmIChsIFx1MDAzZSBvY2ZzMl9mYXN0X3N5bWxpbmtfY2hhcnMoc2IpKSB7XG4xOTcxOlx0XHRcdHUzMiBvZmZzZXQgPSAwO1xuMTk3MjpcdFxuMTk3MzpcdFx0XHRzdGF0dXMgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLFxuMTk3NDpcdFx0XHQgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLVx1MDAzZXNiLCAxKSk7XG4xOTc1Olx0XHRcdGlmIChzdGF0dXMpXG4xOTc2Olx0XHRcdFx0Z290byBiYWlsO1xuMTk3NzpcdFx0XHRkaWRfcXVvdGEgPSAxO1xuMTk3ODpcdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZvY2ZzMl9hb3BzO1xuMTk3OTpcdFx0XHRzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShvc2IsIGlub2RlLCBcdTAwMjZvZmZzZXQsIDEsIDAsXG4xOTgwOlx0XHRcdFx0XHRcdCAgICAgIG5ld19mZV9iaCxcbjE5ODE6XHRcdFx0XHRcdFx0ICAgICAgaGFuZGxlLCBkYXRhX2FjLCBOVUxMLFxuMTk4MjpcdFx0XHRcdFx0XHQgICAgICBOVUxMKTtcbjE5ODM6XHRcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMTk4NDpcdFx0XHRcdGlmIChzdGF0dXMgIT0gLUVOT1NQQyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IC1FSU5UUikge1xuMTk4NTpcdFx0XHRcdFx0bWxvZyhNTF9FUlJPUixcbjE5ODY6XHRcdFx0XHRcdCAgICAgXCYjMzQ7RmFpbGVkIHRvIGV4dGVuZCBmaWxlIHRvICVsbHVcXG5cJiMzNDssXG4xOTg3Olx0XHRcdFx0XHQgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbmV3c2l6ZSk7XG4xOTg4Olx0XHRcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4xOTg5Olx0XHRcdFx0XHRzdGF0dXMgPSAtRU5PU1BDO1xuMTk5MDpcdFx0XHRcdH1cbjE5OTE6XHRcdFx0XHRnb3RvIGJhaWw7XG4xOTkyOlx0XHRcdH1cbjE5OTM6XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBuZXdzaXplKTtcbjE5OTQ6XHRcdFx0aW5vZGUtXHUwMDNlaV9ibG9ja3MgPSBvY2ZzMl9pbm9kZV9zZWN0b3JfY291bnQoaW5vZGUpO1xuMTk5NTpcdFx0fSBlbHNlIHtcbjE5OTY6XHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2b2NmczJfZmFzdF9zeW1saW5rX2FvcHM7XG4xOTk3Olx0XHRcdG1lbWNweSgoY2hhciAqKSBmZS1cdTAwM2VpZDIuaV9zeW1saW5rLCBzeW1uYW1lLCBsKTtcbjE5OTg6XHRcdFx0aV9zaXplX3dyaXRlKGlub2RlLCBuZXdzaXplKTtcbjE5OTk6XHRcdFx0aW5vZGUtXHUwMDNlaV9ibG9ja3MgPSAwO1xuMjAwMDpcdFx0fVxuMjAwMTpcdFxuMjAwMjpcdFx0c3RhdHVzID0gb2NmczJfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgpO1xuMjAwMzpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMjAwNDpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4yMDA1Olx0XHRcdGdvdG8gYmFpbDtcbjIwMDY6XHRcdH1cbjIwMDc6XHRcbjIwMDg6XHRcdGlmICghb2NmczJfaW5vZGVfaXNfZmFzdF9zeW1saW5rKGlub2RlKSkge1xuMjAwOTpcdFx0XHRzdGF0dXMgPSBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKG9zYiwgaGFuZGxlLCBpbm9kZSxcbjIwMTA6XHRcdFx0XHRcdFx0XHQgICBzeW1uYW1lKTtcbjIwMTE6XHRcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuMjAxMjpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbjIwMTM6XHRcdFx0XHRnb3RvIGJhaWw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NDIxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBPQ0ZTMiBYYXR0ciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBzeW1saW5rIGNyZWF0aW9uIHBhdGgsIHNwZWNpZmljYWxseSBgb2NmczJfc3ltbGlua2AsIHdvdWxkIGFsc28gdHJpZ2dlciB0aGUgeGF0dHIgYW5kIEFDTCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IHNlZW1zIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBNeSBtZW50YWwgbW9kZWwgbXVzdCBiZSB3cm9uZyB0aGVyZS4gSSBrbm93IGBvY2ZzMl9ta25vZGAgKmRvZXMqIHBlcmZvcm0gdGhpcyBpbml0aWFsaXphdGlvbi4KClJpZ2h0LCBzbyB0byBjb25maXJtIHRoaXMgZGlzY3JlcGFuY3ksIEkgbmVlZCB0byB2ZXJpZnkgaG93IHRoaW5ncyBhcmUgYmVpbmcgaGFuZGxlZC4gTGV0JiMzOTtzIHRyYWNlIHRocm91Z2ggYG9jZnMyX21rbm9kYCwgd2hpY2ggaXMgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2FsbHMuIFRoZSBjb2RlIGluIGBmcy9vY2ZzMi9uYW1laS5jYCBzaG91bGQgaG9sZCB0aGUgYW5zd2VyLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCBpdCB0byBzZWUgaWYgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgb3IgYG9jZnMyX2luaXRfYWNsYCBhcmUgY2FsbGVkLiBUaGlzIHdpbGwgY2xlYXIgdGhpbmdzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTY6XHRcdHNpZ3NldF90IG9sZHNldDtcbiAyNTc6XHRcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gMjU4Olx0XHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbiAyNTk6XHRcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gMjYwOlx0XG4gMjYxOlx0XHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiAyNjI6XHRcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuIDI2MzpcdFx0XHRcdCAgKHVuc2lnbmVkIGxvbmcpZGV2LCBtb2RlKTtcbiAyNjQ6XHRcbiAyNjU6XHRcdHN0YXR1cyA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcbiAyNjY6XHRcdGlmIChzdGF0dXMpIHtcbiAyNjc6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIDI2ODpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIDI2OTpcdFx0fVxuIDI3MDpcdFxuIDI3MTpcdFx0LyogZ2V0IG91ciBzdXBlciBibG9jayAqL1xuIDI3MjpcdFx0b3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIDI3MzpcdFxuIDI3NDpcdFx0c3RhdHVzID0gb2NmczJfaW5vZGVfbG9jayhkaXIsIFx1MDAyNnBhcmVudF9mZV9iaCwgMSk7XG4gMjc1Olx0XHRpZiAoc3RhdHVzIFx1MDAzYyAwKSB7XG4gMjc2Olx0XHRcdGlmIChzdGF0dXMgIT0gLUVOT0VOVClcbiAyNzc6XHRcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gMjc4Olx0XHRcdHJldHVybiBzdGF0dXM7XG4gMjc5Olx0XHR9XG4gMjgwOlx0XG4gMjgxOlx0XHRpZiAoU19JU0RJUihtb2RlKSBcdTAwMjZcdTAwMjYgKGRpci1cdTAwM2VpX25saW5rIFx1MDAzZT0gb2NmczJfbGlua19tYXgob3NiKSkpIHtcbiAyODI6XHRcdFx0c3RhdHVzID0gLUVNTElOSztcbiAyODM6XHRcdFx0Z290byBsZWF2ZTtcbiAyODQ6XHRcdH1cbiAyODU6XHRcbiAyODY6XHRcdGRpcmZlID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgcGFyZW50X2ZlX2JoLVx1MDAzZWJfZGF0YTtcbiAyODc6XHRcdGlmICghb2NmczJfcmVhZF9saW5rc19jb3VudChkaXJmZSkpIHtcbiAyODg6XHRcdFx0LyogY2FuJiMzOTt0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovXG4gMjg5Olx0XHRcdHN0YXR1cyA9IC1FTk9FTlQ7XG4gMjkwOlx0XHRcdGdvdG8gbGVhdmU7XG4gMjkxOlx0XHR9XG4gMjkyOlx0XG4gMjkzOlx0XHRzdGF0dXMgPSBvY2ZzMl9jaGVja19kaXJfZm9yX2VudHJ5KGRpciwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIDI5NDpcdFx0XHRcdFx0XHQgICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbik7XG4gMjk1Olx0XHRpZiAoc3RhdHVzKVxuIDI5NjpcdFx0XHRnb3RvIGxlYXZlO1xuIDI5NzpcdFxuIDI5ODpcdFx0LyogZ2V0IGEgc3BvdCBpbnNpZGUgdGhlIGRpci4gKi9cbiAyOTk6XHRcdHN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCxcbiAzMDA6XHRcdFx0XHRcdFx0ICAgICAgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuIDMwMTpcdFx0XHRcdFx0XHQgICAgICBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgXHUwMDI2bG9va3VwKTtcbiAzMDI6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiAzMDM6XHRcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIDMwNDpcdFx0XHRnb3RvIGxlYXZlO1xuIDMwNTpcdFx0fVxuIDMwNjpcdFxuIDMwNzpcdFx0LyogcmVzZXJ2ZSBhbiBpbm9kZSBzcG90ICovXG4gMzA4Olx0XHRzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX25ld19pbm9kZShvc2IsIFx1MDAyNmlub2RlX2FjKTtcbiAzMDk6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiAzMTA6XHRcdFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDKVxuIDMxMTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiAzMTI6XHRcdFx0Z290byBsZWF2ZTtcbiAzMTM6XHRcdH1cbiAzMTQ6XHRcbiAzMTU6XHRcdGlub2RlID0gb2NmczJfZ2V0X2luaXRfaW5vZGUoZGlyLCBtb2RlKTtcbiAzMTY6XHRcdGlmIChJU19FUlIoaW5vZGUpKSB7XG4gMzE3Olx0XHRcdHN0YXR1cyA9IFBUUl9FUlIoaW5vZGUpO1xuIDMxODpcdFx0XHRpbm9kZSA9IE5VTEw7XG4gMzE5Olx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiAzMjA6XHRcdFx0Z290byBsZWF2ZTtcbiAzMjE6XHRcdH1cbiAzMjI6XHRcbiAzMjM6XHRcdC8qIGdldCBzZWN1cml0eSB4YXR0ciAqL1xuIDMyNDpcdFx0c3RhdHVzID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbmFtZSwgXHUwMDI2c2kpO1xuIDMyNTpcdFx0aWYgKHN0YXR1cykge1xuIDMyNjpcdFx0XHRpZiAoc3RhdHVzID09IC1FT1BOT1RTVVBQKVxuIDMyNzpcdFx0XHRcdHNpLmVuYWJsZSA9IDA7XG4gMzI4Olx0XHRcdGVsc2Uge1xuIDMyOTpcdFx0XHRcdG1sb2dfZXJybm8oc3RhdHVzKTtcbiAzMzA6XHRcdFx0XHRnb3RvIGxlYXZlO1xuIDMzMTpcdFx0XHR9XG4gMzMyOlx0XHR9XG4gMzMzOlx0XG4gMzM0Olx0XHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbiAzMzU6XHRcdGlmIChzdGF0dXMgXHUwMDNjIDApXG4gMzM2Olx0XHRcdGdvdG8gbGVhdmU7XG4gMzM3Olx0XG4gMzM4Olx0XHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbiAzMzk6XHRcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuIDM0MDpcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSxcbiAzNDE6XHRcdFx0XHRcdCAgICAgICBcdTAwMjZhY2xfc3RhdGUpO1xuIDM0MjpcdFx0aWYgKHN0YXR1cyBcdTAwM2MgMCkge1xuIDM0MzpcdFx0XHRtbG9nX2Vycm5vKHN0YXR1cyk7XG4gMzQ0Olx0XHRcdGdvdG8gbGVhdmU7XG4gMzQ1Olx0XHR9XG4gMzQ2Olx0XG4gMzQ3Olx0XHQvKiBSZXNlcnZlIGEgY2x1c3RlciBpZiBjcmVhdGluZyBhbiBleHRlbnQgYmFzZWQgZGlyZWN0b3J5LiAqL1xuIDM0ODpcdFx0aWYgKFNfSVNESVIobW9kZSkgXHUwMDI2XHUwMDI2ICFvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB7XG4gMzQ5Olx0XHRcdHdhbnRfY2x1c3RlcnMgJiM0Mzs9IDE7XG4gMzUwOlx0XG4gMzUxOlx0XHRcdC8qIERpciBpbmRleGluZyByZXF1aXJlcyBleHRyYSBzcGFjZSBhcyB3ZWxsICovXG4gMzUyOlx0XHRcdGlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSlcbiAzNTM6XHRcdFx0XHR3YW50X21ldGEmIzQzOyYjNDM7O1xuIDM1NDpcdFx0fVxuIDM1NTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI0MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE9DRlMyIEZpbGVzeXN0ZW0gQ3JlYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgT0NGUzIgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgbmV3IGZpbGUgc3lzdGVtIG9iamVjdHMuIEkgc2VlIHRoYXQgdGhlIGBvY2ZzMl9ta25vZGAgZnVuY3Rpb24gaXMgY2VudHJhbCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyB0aGUgcHJpbWFyeSB3b3JraG9yc2UsIGFuZCBpdCBjYWxscyBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLiBTZWVtcyBsb2dpY2FsOyBzZXR0aW5nIHVwIEFDTHMgYW5kIGluaXRpYWxpemluZyBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBpbXBvcnRhbnQgc3RlcHMgZHVyaW5nIG9iamVjdCBjcmVhdGlvbi4KCkJ1dCBob2xkIG9uLi4uIGBvY2ZzMl9ta25vZGAgaXMgdXNlZCBmb3IgbW9yZSB0aGFuIGp1c3Qgc2ltcGxlIGZpbGVzLiBJdCBjcmVhdGVzIGRldmljZXMsIHRvby4gTm93LCBJJiMzOTttIGdldHRpbmcgYSBodW5jaCB0aGF0IGl04oCZcyBtb3JlIHdpZGVseSB1c2VkIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBob3cgb3RoZXIgY3JlYXRpb24gZnVuY3Rpb25zIG1pZ2h0IHJlbGF0ZS4KCkFoYSEgTm93IEkmIzM5O20gd29uZGVyaW5nIGlmIGBvY2ZzMl9ta2RpcmAgYW5kIGBvY2ZzMl9jcmVhdGVgIGFyZSBhY3R1YWxseSBsZXZlcmFnaW5nIGBvY2ZzMl9ta25vZGAgdW5kZXIgdGhlIGhvb2QuIEl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gY29uc29saWRhdGUgdGhlIGNvcmUgY3JlYXRpb24gbG9naWMuIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRpbWUgdG8gZGVsdmUgaW50byB0aGUgY29kZSBmb3IgYG9jZnMyX2NyZWF0ZWAgYW5kIGBvY2ZzMl9ta2RpcmAgZGlyZWN0bHkgYW5kIHZlcmlmeSB0aGlzIHJlbGF0aW9uc2hpcC4gVGhhdCYjMzk7cyB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9ta25vZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxuLS1cbmZzL29jZnMyL2FjbC5jLTM0OC0gKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbmZzL29jZnMyL2FjbC5jOjM0OTogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG5mcy9vY2ZzMi9hY2wuYy0zNTAtICovXG4tLVxuZnMvb2NmczIvZGlyLmM9MjIxMj1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9kaXIuYy0yMjM2LS8qXG5mcy9vY2ZzMi9kaXIuYzoyMjM3OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcbmZzL29jZnMyL2Rpci5jLTIyMzgtICogdGhlIGlubGluZS1kYXRhIGZsYWcgYW5kIGluaXRpYWxpemVzIHRoZSBpbmxpbmUtZGF0YSBzZWN0aW9uLlxuLS1cbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXG4tLVxuZnMvb2NmczIvaW5vZGUuYy0zODctXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxuZnMvb2NmczIvaW5vZGUuYzozODg6XHQgKiBieSBvY2ZzMl9ta25vZF9sb2NrZWQoKSwgc28gYSBmYWlsdXJlIGlzIGEgY29kZSBidWcuXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cdCAqL1xuLS1cbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4tLVxuZnMvb2NmczIvam91cm5hbC5oLTQyMy0gKiBibG9ja3MgJiM0MzsgcXVvdGEgdXBkYXRlICovXG5mcy9vY2ZzMi9qb3VybmFsLmg6NDI0OnN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX21rbm9kX2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGlzX2RpcixcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXHRcdFx0XHQgICAgICBpbnQgeGF0dHJfY3JlZGl0cylcbi0tXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUwLXtcbmZzL29jZnMyL2pvdXJuYWwuaDo1NTE6XHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XG5mcy9vY2ZzMi9qb3VybmFsLmgtNTUyLVxuLS1cbmZzL29jZnMyL25hbWVpLmMtNTUtXG5mcy9vY2ZzMi9uYW1laS5jOjU2OnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuZnMvb2NmczIvbmFtZWkuYy01Ny1cdFx0XHQgICAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTIxNT1zdGF0aWMgdm9pZCBvY2ZzMl9jbGVhbnVwX2FkZF9lbnRyeV9mYWlsdXJlKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMjI5LVxuZnMvb2NmczIvbmFtZWkuYzoyMzA6c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL29jZnMyL25hbWVpLmMtMjMxLVx0XHQgICAgICAgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNjAtXG5mcy9vY2ZzMi9uYW1laS5jOjI2MTpcdHRyYWNlX29jZnMyX21rbm9kKGRpciwgZGVudHJ5LCBkZW50cnktXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVx1MDAzZWRfbmFtZS5uYW1lLFxuZnMvb2NmczIvbmFtZWkuYy0yNjItXHRcdFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cdTAwM2VpcF9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTM2OS1cbmZzL29jZnMyL25hbWVpLmM6MzcwOlx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYixcbmZzL29jZnMyL25hbWVpLmMtMzcxLVx0XHRcdFx0XHRcdFx0ICAgIFNfSVNESVIobW9kZSksXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zODktXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cbmZzL29jZnMyL25hbWVpLmM6MzkwOlx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxuZnMvb2NmczIvbmFtZWkuYy0zOTEtXHRcdFx0XHQgICAgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jLTUxNy1cbmZzL29jZnMyL25hbWVpLmM6NTE4OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXG5mcy9vY2ZzMi9uYW1laS5jLTUxOS1cdFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02MjktXG5mcy9vY2ZzMi9uYW1laS5jOjYzMDpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL25hbWVpLmMtNjMxLVx0XHRcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjUyLVxuZnMvb2NmczIvbmFtZWkuYzo2NTM6XHRyZXR1cm4gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSwgZGV2LCBuZXdfZmVfYmgsXG5mcy9vY2ZzMi9uYW1laS5jLTY1NC1cdFx0XHRcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTY1OD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb2NmczJfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy02NjYtXHRcdFx0ICBPQ0ZTMl9JKGRpciktXHUwMDNlaXBfYmxrbm8sIG1vZGUpO1xuZnMvb2NmczIvbmFtZWkuYzo2Njc6XHRyZXQgPSBvY2ZzMl9ta25vZChcdTAwMjZub3BfbW50X2lkbWFwLCBkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApO1xuZnMvb2NmczIvbmFtZWkuYy02NjgtXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL25hbWVpLmM9Njc0PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtNjgzLVx0XHRcdCAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcbmZzL29jZnMyL25hbWVpLmM6Njg0Olx0cmV0ID0gb2NmczJfbWtub2QoXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcbmZzL29jZnMyL25hbWVpLmMtNjg1LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTE4MTQ9c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMTk1Ni1cbmZzL29jZnMyL25hbWVpLmM6MTk1NzpcdHN0YXR1cyA9IG9jZnMyX21rbm9kX2xvY2tlZChvc2IsIGRpciwgaW5vZGUsXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTgtXHRcdFx0XHQgICAgMCwgXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9uYW1laS5jPTI1MjE9aW50IG9jZnMyX2NyZWF0ZV9pbm9kZV9pbl9vcnBoYW4oc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTYxLVxuZnMvb2NmczIvbmFtZWkuYzoyNTYyOlx0aGFuZGxlID0gb2NmczJfc3RhcnRfdHJhbnMob3NiLCBvY2ZzMl9ta25vZF9jcmVkaXRzKG9zYi1cdTAwM2VzYiwgMCwgMCkpO1xuZnMvb2NmczIvbmFtZWkuYy0yNTYzLVx0aWYgKElTX0VSUihoYW5kbGUpKSB7XG4tLVxuZnMvb2NmczIvbmFtZWkuYy0yNTg0LVx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXG5mcy9vY2ZzMi9uYW1laS5jOjI1ODU6XHRzdGF0dXMgPSBfX29jZnMyX21rbm9kX2xvY2tlZChkaXIsIGlub2RlLFxuZnMvb2NmczIvbmFtZWkuYy0yNTg2LVx0XHRcdFx0ICAgICAgMCwgXHUwMDI2bmV3X2RpX2JoLCBoYW5kbGUsXG4tLVxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xuLS1cbmZzL29jZnMyL25hbWVpLmMtMjk0MC1cdC5ta2Rpclx0XHQ9IG9jZnMyX21rZGlyLFxuZnMvb2NmczIvbmFtZWkuYzoyOTQxOlx0Lm1rbm9kXHRcdD0gb2NmczJfbWtub2QsXG5mcy9vY2ZzMi9uYW1laS5jLTI5NDItXHQucmVuYW1lXHRcdD0gb2NmczJfcmVuYW1lLFxuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjE5OC1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MjE5OTpUUkFDRV9FVkVOVChvY2ZzMl9ta25vZCxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cdFRQX1BST1RPKHZvaWQgKmRpciwgdm9pZCAqZGVudHJ5LCBpbnQgbmFtZV9sZW4sIGNvbnN0IGNoYXIgKm5hbWUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODg2CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZywgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGxvZ2ljYWxseToKCioqUmVhY2hpbmcgYG9jZnMyX21rbm9kYCoqCgpBbHJpZ2h0LCBzbyBgb2NmczJfbWtub2RgLi4uIGl0JiMzOTtzIHRoZSBpbm9kZSBvcGVyYXRpb24gZm9yIG1ha2luZyBub2RlcywgZ290IGl0LiBNeSBtZW50YWwgbWFwIHNob3dzIGl0JiMzOTtzIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIChjcmVhdGluZyBkaXJlY3RvcmllcyksIGFuZCBgb2NmczJfY3JlYXRlYCAoY3JlYXRpbmcgZmlsZXMsIG9idmlvdXNseSkuIFRoZXJlZm9yZSwgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZS4gTm8gcXVlc3Rpb24gdGhlcmUuIEkgbmVlZCB0byBmb2N1cyBvbiBob3cgaXQmIzM5O3MgKmJlaW5nKiByZWFjaGVkLCBwZXJoYXBzIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBvYnNlcnZlZCBiZWhhdmlvciBpcyBwb3NzaWJsZS4KCk5vdywgSSBuZWVkIHRvIGxvb2sgaW50byBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHNvbWV0aGluZyB0byBkbyB3aXRoIGZpbGUgc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSwgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBTbyBsZXQmIzM5O3MgY2hlY2sgaXQuIExldCYjMzk7cyBzdGFydCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi94YXR0ci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI2NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzI2NDpcdGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXG43MjY1Olx0XHRcdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuNzI2NjpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpXG43MjY3Olx0e1xuNzI2ODpcdFx0aW50IHJldCA9IDA7XG43MjY5Olx0XHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCA9IE5VTEw7XG43MjcwOlx0XHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xuNzI3MTpcdFxuNzI3MjpcdFx0cmV0ID0gb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoaW5vZGUsIGRpciwgcXN0ciwgTlVMTCk7XG43MjczOlx0XHRpZiAocmV0KSB7XG43Mjc0Olx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbjcyNzU6XHRcdFx0Z290byBsZWF2ZTtcbjcyNzY6XHRcdH1cbjcyNzc6XHRcbjcyNzg6XHRcdHJldCA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcdTAwMjZkaXJfYmgsIDApO1xuNzI3OTpcdFx0aWYgKHJldCkge1xuNzI4MDpcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG43MjgxOlx0XHRcdGdvdG8gbGVhdmU7XG43MjgyOlx0XHR9XG43MjgzOlx0XG43Mjg0Olx0XHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXHUwMDI2YWNsX3N0YXRlKTtcbjcyODU6XHRcdGlmIChyZXQpXG43Mjg2Olx0XHRcdGdvdG8gdW5sb2NrO1xuNzI4NzpcdFxuNzI4ODpcdFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFx1MDAyNmFjbF9zdGF0ZSk7XG43Mjg5Olx0XHRpZiAocmV0KVxuNzI5MDpcdFx0XHRtbG9nX2Vycm5vKHJldCk7XG43MjkxOlx0XG43MjkyOlx0dW5sb2NrOlxuNzI5MzpcdFx0b2NmczJfYWNsX2luaXRfcmVsZWFzZShcdTAwMjZhY2xfc3RhdGUpO1xuNzI5NDpcdFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XG43Mjk1Olx0XHRicmVsc2UoZGlyX2JoKTtcbjcyOTY6XHRsZWF2ZTpcbjcyOTc6XHRcdHJldHVybiByZXQ7XG43Mjk4Olx0fVxuNzI5OTpcdFxuNzMwMDpcdC8qXG43MzAxOlx0ICogJiMzOTtzZWN1cml0eSYjMzk7IGF0dHJpYnV0ZXMgc3VwcG9ydFxuNzMwMjpcdCAqL1xuNzMwMzpcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxuNzMwNDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSxcbjczMDU6XHRcdFx0XHRcdCAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxuNzMwNjpcdHtcbjczMDc6XHRcdHJldHVybiBvY2ZzMl94YXR0cl9nZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuNzMwODpcdFx0XHRcdCAgICAgICBuYW1lLCBidWZmZXIsIHNpemUpO1xuNzMwOTpcdH1cbjczMTA6XHRcbjczMTE6XHRzdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NlY3VyaXR5X3NldChjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcixcbjczMTI6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbjczMTM6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgZGVudHJ5ICp1bnVzZWQsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG43MzE0Olx0XHRcdFx0XHQgICAgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsXG43MzE1Olx0XHRcdFx0XHQgICAgc2l6ZV90IHNpemUsIGludCBmbGFncylcbjczMTY6XHR7XG43MzE3Olx0XHRyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcbjczMTg6XHRcdFx0XHQgICAgICAgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTtcbjczMTk6XHR9XG43MzIwOlx0XG43MzIxOlx0c3RhdGljIGludCBvY2ZzMl9pbml0eGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHN0cnVjdCB4YXR0ciAqeGF0dHJfYXJyYXksXG43MzIyOlx0XHRcdCAgICAgdm9pZCAqZnNfaW5mbylcbjczMjM6XHR7XG43MzI0Olx0XHRzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2kgPSBmc19pbmZvO1xuNzMyNTpcdFx0Y29uc3Qgc3RydWN0IHhhdHRyICp4YXR0cjtcbjczMjY6XHRcdGludCBlcnIgPSAwO1xuNzMyNzpcdFxuNzMyODpcdFx0aWYgKHNpKSB7XG43MzI5Olx0XHRcdHNpLVx1MDAzZXZhbHVlID0ga21lbWR1cCh4YXR0cl9hcnJheS1cdTAwM2V2YWx1ZSwgeGF0dHJfYXJyYXktXHUwMDNldmFsdWVfbGVuLFxuNzMzMDpcdFx0XHRcdFx0ICAgIEdGUF9LRVJORUwpO1xuNzMzMTpcdFx0XHRpZiAoIXNpLVx1MDAzZXZhbHVlKVxuNzMzMjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuNzMzMzpcdFxuNzMzNDpcdFx0XHRzaS1cdTAwM2VuYW1lID0geGF0dHJfYXJyYXktXHUwMDNlbmFtZTtcbjczMzU6XHRcdFx0c2ktXHUwMDNldmFsdWVfbGVuID0geGF0dHJfYXJyYXktXHUwMDNldmFsdWVfbGVuO1xuNzMzNjpcdFx0XHRyZXR1cm4gMDtcbjczMzc6XHRcdH1cbjczMzg6XHRcbjczMzk6XHRcdGZvciAoeGF0dHIgPSB4YXR0cl9hcnJheTsgeGF0dHItXHUwMDNlbmFtZSAhPSBOVUxMOyB4YXR0ciYjNDM7JiM0MzspIHtcbjczNDA6XHRcdFx0ZXJyID0gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcbjczNDE6XHRcdFx0XHRcdCAgICAgIHhhdHRyLVx1MDAzZW5hbWUsIHhhdHRyLVx1MDAzZXZhbHVlLFxuNzM0MjpcdFx0XHRcdFx0ICAgICAgeGF0dHItXHUwMDNldmFsdWVfbGVuLCBYQVRUUl9DUkVBVEUpO1xuNzM0MzpcdFx0XHRpZiAoZXJyKVxuNzM0NDpcdFx0XHRcdGJyZWFrO1xuNzM0NTpcdFx0fVxuNzM0NjpcdFx0cmV0dXJuIGVycjtcbjczNDc6XHR9XG43MzQ4Olx0XG43MzQ5Olx0aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG43MzUwOlx0XHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuNzM1MTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcbjczNTI6XHRcdFx0XHQgICAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpKVxuNzM1MzpcdHtcbjczNTQ6XHRcdGludCByZXQ7XG43MzU1Olx0XG43MzU2Olx0XHQvKiBjaGVjayB3aGV0aGVyIG9jZnMyIHN1cHBvcnQgZmVhdHVyZSB4YXR0ciAqL1xuNzM1NzpcdFx0aWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYikpKVxuNzM1ODpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG43MzU5Olx0XHRpZiAoc2kpIHtcbjczNjA6XHRcdFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxuNzM2MTpcdFx0XHRcdFx0XHRcdCAgIFx1MDAyNm9jZnMyX2luaXR4YXR0cnMsIHNpKTtcbjczNjI6XHRcdFx0LypcbjczNjM6XHRcdFx0ICogc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eSgpIGRvZXMgbm90IHJldHVybiAtRU9QTk9UU1VQUCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3MTQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGJyZWFrZG93biBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBPQ0ZTMiBSZWZsaW5rIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIEkgc2VlIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgIGJlaW5nIGNhbGxlZCBmcm9tIGBvY2ZzMl9yZWZsaW5rYC4gUmlnaHQsIGBvY2ZzMl9yZWZsaW5rYC4uLiBJIGJlbGlldmUgdGhhdCYjMzk7cyBhbiBgaW9jdGxgIGNhbGwsIHJpZ2h0PyBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgZGF0YSBmbG93IGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUsIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgaW4gdGhlIHNvdXJjZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGZzL29jZnMyL3JlZmNvdW50dHJlZS5jYCwgdG8gY29uZmlybSB0aGF0IGBvY2ZzMl9yZWZsaW5rYCBpcyBkZWZpbmVkIHRoZXJlIGFuZCB0byBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb24gdGhlIG1lY2hhbmljcyBvZiB0aGUgcmVmbGluayBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyBhIGNvbW1vbiBzdGFydGluZyBwb2ludCBmb3IgZGlnZ2luZyBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgZnVuY3Rpb24gd2l0aGluIHRoZSBmaWxlIHN5c3RlbS4gS25vd2luZyB0aGF0IGBvY2ZzMl9yZWZsaW5rYCBpcyBhbiBgaW9jdGxgIGdpdmVzIG1lIGFuIGltcG9ydGFudCBjb250ZXh0LCBhbmQgSSBuZWVkIHRvIHZlcmlmeSBpdHMgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2NmczJfcmVmbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXG4tLVxuZnMvb2NmczIvZmlsZS5jLTI3MjUtXHQvKiBMb2NrIGJvdGggZmlsZXMgYWdhaW5zdCBJTyAqL1xuZnMvb2NmczIvZmlsZS5jOjI3MjY6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKGlub2RlX2luLCBcdTAwMjZpbl9iaCwgaW5vZGVfb3V0LCBcdTAwMjZvdXRfYmgpO1xuZnMvb2NmczIvZmlsZS5jLTI3MjctXHRpZiAocmV0KVxuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzUxLVxuZnMvb2NmczIvZmlsZS5jOjI3NTI6XHRyZW1hcHBlZCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKGlub2RlX2luLCBpbl9iaCwgcG9zX2luLFxuZnMvb2NmczIvZmlsZS5jLTI3NTMtXHRcdFx0aW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQsIGxlbik7XG4tLVxuZnMvb2NmczIvZmlsZS5jLTI3NjktXG5mcy9vY2ZzMi9maWxlLmM6Mjc3MDpcdHJldCA9IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3QoaW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQgJiM0MzsgbGVuKTtcbmZzL29jZnMyL2ZpbGUuYy0yNzcxLVx0aWYgKHJldCkge1xuLS1cbmZzL29jZnMyL2ZpbGUuYy0yNzc2LW91dF91bmxvY2s6XG5mcy9vY2ZzMi9maWxlLmM6Mjc3NzpcdG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhpbm9kZV9pbiwgaW5fYmgsIGlub2RlX291dCwgb3V0X2JoKTtcbmZzL29jZnMyL2ZpbGUuYy0yNzc4LVx0cmV0dXJuIHJlbWFwcGVkIFx1MDAzZSAwID8gcmVtYXBwZWQgOiByZXQ7XG4tLVxuZnMvb2NmczIvaW9jdGwuYz04NTM9bG9uZyBvY2ZzMl9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvb2NmczIvaW9jdGwuYy05MTktXG5mcy9vY2ZzMi9pb2N0bC5jOjkyMDpcdFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIG9sZF9wYXRoLCBuZXdfcGF0aCwgcHJlc2VydmUpO1xuZnMvb2NmczIvaW9jdGwuYy05MjEtXHR9XG4tLVxuZnMvb2NmczIvaW9jdGwuYz05NjU9bG9uZyBvY2ZzMl9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuZnMvb2NmczIvaW9jdGwuYy05ODYtXG5mcy9vY2ZzMi9pb2N0bC5jOjk4NzpcdFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIGNvbXBhdF9wdHIoYXJncy5vbGRfcGF0aCksXG5mcy9vY2ZzMi9pb2N0bC5jLTk4OC1cdFx0XHRcdFx0ICAgY29tcGF0X3B0cihhcmdzLm5ld19wYXRoKSwgcHJlc2VydmUpO1xuLS1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MTgzMT1ERUZJTkVfT0NGUzJfVUxMX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcm1feGF0dHJfY2x1c3Rlcik7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzItXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4MzM6REVGSU5FX09DRlMyX1VMTF9VSU5UX0VWRU5UKG9jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTgzNC1cbi0tXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTE4NDE9REVGSU5FX09DRlMyX1VMTF9VSU5UX0VWRU5UKG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV9yZWZjb3VudCk7XG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDItXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDM6REVGSU5FX09DRlMyX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKTtcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0NC1cbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MTg0NTpERUZJTkVfT0NGUzJfVUxMX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9yZWMpO1xuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQ2LVxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQwODk9c3RhdGljIGludCBvY2ZzMl9jcmVhdGVfcmVmbGlua19ub2RlKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MTQ1LVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDE0NjpzdGF0aWMgaW50IF9fb2NmczJfcmVmbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0Ny1cdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MjA5LVx0aWYgKG9pLVx1MDAzZWlwX2R5bl9mZWF0dXJlcyBcdTAwMjYgT0NGUzJfSEFTX1hBVFRSX0ZMKSB7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjEwOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRycyhpbm9kZSwgb2xkX2JoLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIxMS1cdFx0XHRcdFx0ICAgbmV3X2lub2RlLCBuZXdfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzNy1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQyMzg6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzOS1cdFx0XHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSlcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00MjcyLVx0ZG93bl93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF9hbGxvY19zZW0pO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI3MzpcdGVycm9yID0gX19vY2ZzMl9yZWZsaW5rKG9sZF9kZW50cnksIG9sZF9iaCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyNzQtXHRcdFx0XHRuZXdfb3JwaGFuX2lub2RlLCBwcmVzZXJ2ZSk7XG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDM0OD1zdGF0aWMgaW50IG9jZnMyX3Zmc19yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQzOTgtXHRpZiAoIWVycm9yKVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDM5OTpcdFx0ZXJyb3IgPSBvY2ZzMl9yZWZsaW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSwgcHJlc2VydmUpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwMC1cdGlub2RlX3VubG9jayhpbm9kZSk7XG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwNy0gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0MDg6aW50IG9jZnMyX3JlZmxpbmtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0MDktXHRcdFx0Y29uc3QgY2hhciBfX3VzZXIgKm9sZG5hbWUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ1MC0vKiBVcGRhdGUgZGVzdGluYXRpb24gaW5vZGUgc2l6ZSwgaWYgbmVjZXNzYXJ5LiAqL1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDQ1MTppbnQgb2NmczJfcmVmbGlua191cGRhdGVfZGVzdChzdHJ1Y3QgaW5vZGUgKmRlc3QsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDUyLVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDg5LS8qIFJlbWFwIHRoZSByYW5nZSBwb3NfaW46bGVuIGluIHNfaW5vZGUgdG8gcG9zX291dDpsZW4gaW4gdF9pbm9kZS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0OTA6c3RhdGljIGxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDkxLVx0XHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ2MDMtLyogU2V0IHVwIHJlZmNvdW50IHRyZWUgYW5kIHJlbWFwIHNfaW5vZGUgdG8gdF9pbm9kZS4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ2MDQ6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ2MDUtXHRcdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Njg1LVx0LyogQWN0dWFsbHkgcmVtYXAgZXh0ZW50cyBub3cuICovXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Njg2Olx0cmV0ID0gb2NmczJfcmVmbGlua19yZW1hcF9leHRlbnQoc19pbm9kZSwgc19iaCwgcG9zX2luLCB0X2lub2RlLCB0X2JoLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4Ny1cdFx0XHRcdFx0IHBvc19vdXQsIGxlbiwgXHUwMDI2ZGVhbGxvYyk7XG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDcwMi0vKiBMb2NrIGFuIGlub2RlIGFuZCBncmFiIGEgYmggcG9pbnRpbmcgdG8gdGhlIGlub2RlLiAqL1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDcwMzppbnQgb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NzA0LVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3MsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDc5Ni0vKiBVbmxvY2sgYm90aCBpbm9kZXMgYW5kIHJlbGVhc2UgYnVmZmVycy4gKi9cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3OTc6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDc5OC1cdFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg9OTg9aW50IG9jZnMyX2luY3JlYXNlX3JlZmNvdW50KGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTAzLVx0XHRcdCAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMDQ6aW50IG9jZnMyX3JlZmxpbmtfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwNS1cdFx0XHRjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMDctXHRcdFx0Ym9vbCBwcmVzZXJ2ZSk7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMDg6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwOS1cdFx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNC1cdFx0XHRcdCAgbG9mZl90IGxlbik7XG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaDoxMTU6aW50IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE2LVx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMSxcbi0tXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMTgtXHRcdFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqYmgyKTtcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExOTp2b2lkIG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjAtXHRcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxuLS1cbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEyMi1cdFx0XHRcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRfYmgpO1xuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTIzOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEyNC1cdFx0XHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRfYmgsXG4tLVxuZnMvb2NmczIveGF0dHIuYz02MzA4PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzEtICovXG5mcy9vY2ZzMi94YXR0ci5jOjYzMzI6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcbmZzL29jZnMyL3hhdHRyLmMtNjMzMy1cdFx0XHRcdFx0c3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02Mzg3LSAqL1xuZnMvb2NmczIveGF0dHIuYzo2Mzg4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL3hhdHRyLmMtNjM4OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjQwNy1cbmZzL29jZnMyL3hhdHRyLmM6NjQwODpcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKCh1bnNpZ25lZCBsb25nIGxvbmcpb2xkX2JoLVx1MDAzZWJfYmxvY2tucixcbmZzL29jZnMyL3hhdHRyLmMtNjQwOS1cdFx0XHRcdFx0IGxlMTZfdG9fY3B1KHhoLVx1MDAzZXhoX2NvdW50KSk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy02NTE3LVxuZnMvb2NmczIveGF0dHIuYzo2NTE4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MpXG5mcy9vY2ZzMi94YXR0ci5jLTY1MTkte1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjU0NC1cbmZzL29jZnMyL3hhdHRyLmM6NjU0NTpcdHJldCA9IG9jZnMyX3JlZmxpbmtfbG9ja194YXR0cl9hbGxvY2F0b3JzKG9zYiwgeGgsIGFyZ3MtXHUwMDNlcmVmX3Jvb3RfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDYtXHRcdFx0XHRcdFx0ICBcdTAwMjZjcmVkaXRzLCBcdTAwMjZtZXRhX2FjKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY1NzEtXG5mcy9vY2ZzMi94YXR0ci5jOjY1NzI6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtXHUwMDNlb2xkX2JoLCB4aCxcbmZzL29jZnMyL3hhdHRyLmMtNjU3My1cdFx0XHRcdFx0IGFyZ3MtXHUwMDNlbmV3X2JoLCBuZXdfeGgsIFx1MDAyNnZiLCBtZXRhX2FjLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjU5OD1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9lbXB0eV94YXR0cl9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjYzMy1cbmZzL29jZnMyL3hhdHRyLmM6NjYzNDpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYmxvY2soc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzUtXHRcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmxrX2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjY1NS1cbmZzL29jZnMyL3hhdHRyLmM6NjY1NjpcdHJldCA9IG9jZnMyX3JlZmxpbmtfbG9ja194YXR0cl9hbGxvY2F0b3JzKG9zYiwgeGgsIGFyZ3MtXHUwMDNlcmVmX3Jvb3RfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTY2NTctXHRcdFx0XHRcdFx0ICBcdTAwMjZjcmVkaXRzLCBcdTAwMjZtZXRhX2FjKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY2OTEtXG5mcy9vY2ZzMi94YXR0ci5jOjY2OTI6XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGJsa19iaCwgeGgsXG5mcy9vY2ZzMi94YXR0ci5jLTY2OTMtXHRcdFx0XHRcdCBuZXdfYmxrX2JoLCBuZXdfeGgsIFx1MDAyNnZiLCBtZXRhX2FjLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjcxOS1cbmZzL29jZnMyL3hhdHRyLmM6NjcyMDpzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3Mge1xuZnMvb2NmczIveGF0dHIuYy02NzIxLVx0c3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKnJlZmxpbms7XG4tLVxuZnMvb2NmczIveGF0dHIuYz02NzM0PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjc0MS17XG5mcy9vY2ZzMi94YXR0ci5jOjY3NDI6XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxuZnMvb2NmczIveGF0dHIuYzo2NzQzOlx0XHRcdChzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKilwYXJhO1xuZnMvb2NmczIveGF0dHIuYy02NzQ0LVx0c3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0O1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9Njc5OT1zdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhcbmZzL29jZnMyL3hhdHRyLmM6NjgwMDpcdFx0XHRcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNjgwMS1cdFx0XHRcdHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqeHRfZXQsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02ODg0LVxuZnMvb2NmczIveGF0dHIuYzo2ODg1OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL29jZnMyL3hhdHRyLmMtNjg4Ni1cdFx0XHRcdHU2NCBibGtubywgdTY0IG5ld19ibGtubywgdTMyIGNsdXN0ZXJzLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjg4OS1cdFx0XHRcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuZnMvb2NmczIveGF0dHIuYzo2ODkwOlx0XHRcdFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzKVxuZnMvb2NmczIveGF0dHIuYy02ODkxLXtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTY5MzgtXG5mcy9vY2ZzMi94YXR0ci5jOjY5Mzk6XHRcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKGhhbmRsZSwgYXJncy1cdTAwM2VyZWZsaW5rLFxuZnMvb2NmczIveGF0dHIuYy02OTQwLVx0XHRcdFx0XHRhcmdzLVx1MDAzZW9sZF9idWNrZXQtXHUwMDNlYnVfYmhzWzBdLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjk3NS1cbmZzL29jZnMyL3hhdHRyLmM6Njk3NjpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvb2NmczIveGF0dHIuYy02OTc3LVx0XHRcdFx0c3RydWN0IGlub2RlICppbm9kZSxcbmZzL29jZnMyL3hhdHRyLmM6Njk3ODpcdFx0XHRcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNjk3OS1cdFx0XHRcdHN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSAqZXQsXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDA5LVxuZnMvb2NmczIveGF0dHIuYzo3MDEwOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldChoYW5kbGUsIGJsa25vLFxuZnMvb2NmczIveGF0dHIuYy03MDExLVx0XHRcdFx0XHRcdCBuZXdfYmxrbm8sIG51bV9jbHVzdGVycyxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwMzItXG5mcy9vY2ZzMi94YXR0ci5jOjcwMzM6XHRcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cygodW5zaWduZWQgbG9uZyBsb25nKW5ld19ibGtubyxcbmZzL29jZnMyL3hhdHRyLmMtNzAzNC1cdFx0XHRcdFx0XHQgIG51bV9jbHVzdGVycywgcmVmbGlua19jcG9zKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwNDYtICovXG5mcy9vY2ZzMi94YXR0ci5jOjcwNDc6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvb2NmczIveGF0dHIuYy03MDQ4LVx0XHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpyb290X2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzA1NS1cdGhhbmRsZV90ICpoYW5kbGU7XG5mcy9vY2ZzMi94YXR0ci5jOjcwNTY6XHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxuZnMvb2NmczIveGF0dHIuYzo3MDU3Olx0XHRcdChzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKilwYXJhO1xuZnMvb2NmczIveGF0dHIuYy03MDU4LVx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcwNjItXG5mcy9vY2ZzMi94YXR0ci5jOjcwNjM6XHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYygodW5zaWduZWQgbG9uZyBsb25nKWJsa25vLCBsZW4pO1xuZnMvb2NmczIveGF0dHIuYy03MDY0LVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzA4My1cbmZzL29jZnMyL3hhdHRyLmM6NzA4NDpcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0cyhoYW5kbGUsIGlub2RlLCBhcmdzLCBcdTAwMjZldCxcbmZzL29jZnMyL3hhdHRyLmMtNzA4NS1cdFx0XHRcdFx0ICBtZXRhX2FjLCBkYXRhX2FjLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzEwNC0gKi9cbmZzL29jZnMyL3hhdHRyLmM6NzEwNTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNzEwNi1cdFx0XHRcdCAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDktXHRpbnQgcmV0O1xuZnMvb2NmczIveGF0dHIuYzo3MTEwOlx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHBhcmE7XG5mcy9vY2ZzMi94YXR0ci5jLTcxMTEtXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTMwLVx0cmV0ID0gb2NmczJfaXRlcmF0ZV94YXR0cl9pbmRleF9ibG9jayhhcmdzLVx1MDAzZW9sZF9pbm9kZSwgYmxrX2JoLFxuZnMvb2NmczIveGF0dHIuYzo3MTMxOlx0XHRcdFx0XHQgICAgICBvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyxcbmZzL29jZnMyL3hhdHRyLmMtNzEzMi1cdFx0XHRcdFx0ICAgICAgXHUwMDI2cGFyYSk7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTQxLVxuZnMvb2NmczIveGF0dHIuYzo3MTQyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcbmZzL29jZnMyL3hhdHRyLmMtNzE0My1cdFx0XHRcdFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpXG4tLVxuZnMvb2NmczIveGF0dHIuYy03MTYxLVx0aWYgKCFpbmRleGVkKVxuZnMvb2NmczIveGF0dHIuYzo3MTYyOlx0XHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XG5mcy9vY2ZzMi94YXR0ci5jLTcxNjMtXHRlbHNlXG5mcy9vY2ZzMi94YXR0ci5jOjcxNjQ6XHRcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZShhcmdzLCBibGtfYmgsIG5ld19ibGtfYmgpO1xuZnMvb2NmczIveGF0dHIuYy03MTY1LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXG5mcy9vY2ZzMi94YXR0ci5jOjcxNzM6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5KHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGUpXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzQte1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE4MS1cbmZzL29jZnMyL3hhdHRyLmM6NzE4MjppbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTcxODMtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzIxNi1cdGVsc2VcbmZzL29jZnMyL3hhdHRyLmM6NzIxNzpcdFx0YXJncy54YXR0cl9yZWZsaW5rZWQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5O1xuZnMvb2NmczIveGF0dHIuYy03MjE4LVxuZnMvb2NmczIveGF0dHIuYy03MjE5LVx0aWYgKG9pLVx1MDAzZWlwX2R5bl9mZWF0dXJlcyBcdTAwMjYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSB7XG5mcy9vY2ZzMi94YXR0ci5jOjcyMjA6XHRcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5saW5lKFx1MDAyNmFyZ3MpO1xuZnMvb2NmczIveGF0dHIuYy03MjIxLVx0XHRpZiAocmV0KSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MjM2LVxuZnMvb2NmczIveGF0dHIuYzo3MjM3Olx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhcdTAwMjZhcmdzLCBibGtfYmgpO1xuZnMvb2NmczIveGF0dHIuYy03MjM4LVx0aWYgKHJldClcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTc4PWludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmgtODItXHRcdFx0XHQgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTtcbmZzL29jZnMyL3hhdHRyLmg6ODM6aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxuZnMvb2NmczIveGF0dHIuaC04NC1cdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpvbGRfYmgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDc5CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIFJlZmxpbmsgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgb2NmczJfcmVmbGlua2AgZ2V0cyBpbnZva2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjYWxsIGNoYWluIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBgb2NmczJfcmVmbGlua2AgaXMgY2FsbGVkIGJ5IGBvY2ZzMl92ZnNfcmVmbGlua2AsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rX2lvY3RsYC4gQW5kIHRoYXQgYG9jZnMyX3JlZmxpbmtfaW9jdGxgIGZ1bmN0aW9uPyBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgb2NmczJfaW9jdGxgIGl0c2VsZiwgc3BlY2lmaWNhbGx5IHdoZW4gYW4gYE9DRlMyX0lPQ19SRUZMSU5LYCBpb2N0bCBpcyBpc3N1ZWQuIFNvLCBpbiBlZmZlY3QsIHRoaXMgcmVmbGluayBmdW5jdGlvbmFsaXR5IGlzIGV4cG9zZWQgdGhyb3VnaCBhbiBpb2N0bCBjYWxsLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlLgoKTm93LCBJJiMzOTttIGp1c3QgY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uOiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIEZyb20gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGxvb2sgYXQgaXRzIGNhbGwgY2hhaW4uIEl0IHNlZW1zIHRoYXQgdGhpcyBoYW5kbGUgaXMgY2FsbGVkIGZyb20gYG9jZnMyX3hhdHRyX3NldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvYWNsLmM9MjE0PXN0YXRpYyBpbnQgb2NmczJfc2V0X2FjbChoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL29jZnMyL2FjbC5jLTI0OS1cdGlmIChoYW5kbGUpXG5mcy9vY2ZzMi9hY2wuYzoyNTA6XHRcdHJldCA9IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsIG5hbWVfaW5kZXgsXG5mcy9vY2ZzMi9hY2wuYy0yNTEtXHRcdFx0XHRcdCAgICAgXCYjMzQ7XCYjMzQ7LCB2YWx1ZSwgc2l6ZSwgMCxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTMzMDU9c3RhdGljIGludCBvY2ZzMl9pbml0X3hhdHRyX3NldF9jdHh0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zMzYwLVxuZnMvb2NmczIveGF0dHIuYzozMzYxOnN0YXRpYyBpbnQgX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjItXHRcdFx0XHQgICAgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNTAyLSAqL1xuZnMvb2NmczIveGF0dHIuYzozNTAzOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9vY2ZzMi94YXR0ci5jLTM1MDQtXHRcdFx0ICAgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTM1NjYtXG5mcy9vY2ZzMi94YXR0ci5jOjM1Njc6XHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuZnMvb2NmczIveGF0dHIuYy0zNTY4LVxuLS1cbmZzL29jZnMyL3hhdHRyLmM9MzU4Mz1pbnQgb2NmczJfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIveGF0dHIuYy0zNzAzLVxuZnMvb2NmczIveGF0dHIuYzozNzA0Olx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXHUwMDI2eGksIFx1MDAyNnhpcywgXHUwMDI2eGJzLCBcdTAwMjZjdHh0KTtcbmZzL29jZnMyL3hhdHRyLmMtMzcwNS1cdG9jZnMyX3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhjdHh0LmhhbmRsZSwgaW5vZGUsIDApO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzM3Nj1pbnQgb2NmczJfaW5pdF9zZWN1cml0eV9zZXQoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTczODIte1xuZnMvb2NmczIveGF0dHIuYzo3MzgzOlx0cmV0dXJuIG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG5mcy9vY2ZzMi94YXR0ci5jLTczODQtXHRcdFx0XHQgICAgIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxuLS1cbmZzL29jZnMyL3hhdHRyLmg9Mzg9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKixcbmZzL29jZnMyL3hhdHRyLmgtMzktXHRcdCAgICBzaXplX3QsIGludCk7XG5mcy9vY2ZzMi94YXR0ci5oOjQwOmludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcbmZzL29jZnMyL3hhdHRyLmgtNDEtXHRcdFx0ICAgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDEyOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMjM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNjQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9DRlMyIEFDTCBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmb3IgT0NGUzIgQUNMcy4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9zZXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0YC4gYG9jZnMyX3NldF9hY2xgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW9wX3NldF9hY2xgLCB3aGlsZSBgb2NmczJfaW5pdF9zZWN1cml0eV9zZXRgIGlzIGNhbGxlZCBmcm9tIGBvY2ZzMl9ta25vZF9sb2NrZWRgLgoKVGhhdCBnaXZlcyBtZSBhIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgc2VlbSBjcml0aWNhbDogYG9jZnMyX21rbm9kYCwgYG9jZnMyX2luaXRfYWNsYCwgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgLCBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAsIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgLCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAsIGFuZCBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBmb2N1c2luZyBvbiBgb2NmczJfaW5pdF9hY2xgIGFzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50IHRoYW4gdGhlIG1vcmUgZ2VuZXJhbCBgb2NmczJfbWtub2RgLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIEkmIzM5O20gemVyb2luZyBpbiBvbiBhcmU6CgoqICAgYG9jZnMyX2luaXRfYWNsYAoqICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgCiogICBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWAKKiAgIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgCiogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAKKiAgIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgCgpJIG5lZWQgdG8gY29uZmlybSBpZiBgb2NmczJfaW5pdF9hY2xgIGlzIGFjdHVhbGx5IGV4cG9ydGVkIG9yIGlmIGl0JiMzOTtzIHN0YXRpYy4gSSBjYW4gc2VlIGl0JiMzOTtzIGRlZmluZWQgaW4gYGZzL29jZnMyL2FjbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGZzL29jZnMyL2FjbC5oYC4gTG9va3MgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBhcmUgaW4gYGZzL29jZnMyL2FjbC5jYCBhcyB3ZWxsLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbiBgZnMvb2NmczIveGF0dHIuY2AuCgpOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIGtub3cgT0NGUzIgbmVlZHMgYE9DRlMyX0ZTYCwgYW5kIGl0IGRlcGVuZHMgb24gYENPTkZJR0ZTX0ZTYC4gQW5kIEkgc2VlIHRoYXQgYEZTX1BPU0lYX0FDTGAgaXMgc2VsZWN0ZWQgYnkgYE9DRlMyX0ZTYC4KCkkgbmVlZCB0byBjaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgYWdhaW4gdG8gY29uZmlybSBhbGwgb2YgdGhpcy4KWWVzLCB0aGUgS2NvbmZpZyBjb25maXJtczoKYGNvbmZpZyBPQ0ZTMl9GU2AKYGRlcGVuZHMgb24gSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgCmBzZWxlY3QgRlNfUE9TSVhfQUNMYAoKQWxyaWdodCwgdGhhdCBtZWFucyBJIHNob3VsZCB0cmFjayB0aGUgZm9sbG93aW5nIGNvbmZpZyBvcHRpb25zOgoKKiAgIGBPQ0ZTMl9GU2AKKiAgIGBDT05GSUdGU19GU2AKCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogYE9DRlMyX0ZTYCAqc2VsZWN0cyogYEZTX1BPU0lYX0FDTGAuIERvZXMgT0NGUzIgYWxzbyBoYXZlIGFueSBvdGhlciBzZXR0aW5ncyBmb3IgYFBPU0lYX0FDTGA/IEkmIzM5O2QgYmV0dGVyIGNoZWNrIGBmcy9vY2ZzMi9LY29uZmlnYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQT1NJWF9BQ0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xuLS1cbmZzL29jZnMyL0tjb25maWctOS1cdHNlbGVjdCBRVU9UQV9UUkVFXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlx0c2VsZWN0IEZTX1BPU0lYX0FDTFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4tLVxuZnMvb2NmczIvYWNsLmM9MTEzPXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0xMjItXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjEyMzpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0xMjQtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMTI1LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MTI2Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0xMjctXHRcdGJyZWFrO1xuLS1cbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMzEtXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcbmZzL29jZnMyL2FjbC5jOjIzMjpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XG5mcy9vY2ZzMi9hY2wuYy0yMzMtXHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmMtMjM0LVx0Y2FzZSBBQ0xfVFlQRV9ERUZBVUxUOlxuZnMvb2NmczIvYWNsLmM6MjM1Olx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XG5mcy9vY2ZzMi9hY2wuYy0yMzYtXHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKVxuLS1cbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzA0LVx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9vY2ZzMi9hY2wuYzozMDU6XHRpZiAoIShvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzI5LVxuZnMvb2NmczIvYWNsLmM6MzMwOlx0aWYgKCEob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxuZnMvb2NmczIvYWNsLmMtMzMxLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIvYWNsLmMtMzcyLVxuZnMvb2NmczIvYWNsLmM6MzczOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy0zNzQtXHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi0tXG5mcy9vY2ZzMi9hY2wuYz00MTQ9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvb2NmczIvYWNsLmMtNDI1LVxuZnMvb2NmczIvYWNsLmM6NDI2Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00MjctXHRcdGlmIChTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkgXHUwMDI2XHUwMDI2IHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4tLVxuZnMvb2NmczIvYWNsLmMtNDQyLVxuZnMvb2NmczIvYWNsLmM6NDQzOlx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi9hY2wuYy00NDQtXHRcdGlmIChzdGF0ZS1cdTAwM2VhY2wpIHtcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oPTI1Nz1lbnVtIG9jZnMyX21vdW50X29wdGlvbnNcbi0tXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2Ni1cdE9DRlMyX01PVU5UX0lOT0RFNjQgPSAxIFx1MDAzY1x1MDAzYyA3LFx0LyogQWxsb3cgaW5vZGUgbnVtYmVycyBcdTAwM2UgMl4zMiAqL1xuZnMvb2NmczIvb2NmczIuaDoyNjc6XHRPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgPSAxIFx1MDAzY1x1MDAzYyA4LFx0LyogRm9yY2UgUE9TSVggYWNjZXNzIGNvbnRyb2wgbGlzdHMgKi9cbmZzL29jZnMyL29jZnMyLmg6MjY4Olx0T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSBcdTAwM2NcdTAwM2MgOSxcdC8qIERpc2FibGUgUE9TSVggYWNjZXNzXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2OS1cdFx0XHRcdFx0XHQgICBjb250cm9sIGxpc3RzICovXG4tLVxuZnMvb2NmczIvc3VwZXIuYz02MDc9c3RhdGljIGludCBvY2ZzMl9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZnMvb2NmczIvc3VwZXIuYy03MTctXHRcdHNiLVx1MDAzZXNfZmxhZ3MgPSAoc2ItXHUwMDNlc19mbGFncyBcdTAwMjYgflNCX1BPU0lYQUNMKSB8XG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcdFx0XHQoKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSA/XG5mcy9vY2ZzMi9zdXBlci5jLTcxOS1cdFx0XHRcdFx0XHRcdFNCX1BPU0lYQUNMIDogMCk7XG4tLVxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjQtXHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTIzMj1zdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlx0aWYgKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTI2Ny1cdC8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi9cbmZzL29jZnMyL3N1cGVyLmM6MTI2ODpcdGlmICghKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiAoT0NGUzJfTU9VTlRfUE9TSVhfQUNMIHxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcdFx0XHRcdCAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkge1xuZnMvb2NmczIvc3VwZXIuYy0xMjcwLVx0XHRpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKVxuZnMvb2NmczIvc3VwZXIuYzoxMjcxOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3Mi1cdFx0ZWxzZVxuZnMvb2NmczIvc3VwZXIuYzoxMjczOlx0XHRcdG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cdH1cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTM4NC1cdFx0aWYgKHJlc3VsdC5uZWdhdGVkKSB7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODU6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYzoxMzg2Olx0XHRcdG1vcHQtXHUwMDNlbW91bnRfb3B0IFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmMtMTM4Ny1cdFx0fSBlbHNlIHtcbmZzL29jZnMyL3N1cGVyLmM6MTM4ODpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVx0XHR9XG4tLVxuZnMvb2NmczIvc3VwZXIuYz0xNDE2PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdClcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXG5mcy9vY2ZzMi9zdXBlci5jOjE0ODU6XHRpZiAob3B0cyBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxuZnMvb2NmczIvc3VwZXIuYy0xNDg2LVx0XHRzZXFfcHJpbnRmKHMsIFwmIzM0OyxhY2xcJiMzNDspO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9MTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7XG5mcy9vY2ZzMi94YXR0ci5jLTEwMi1cdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVx0XHQ9IFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcbmZzL29jZnMyL3hhdHRyLmM6MTAzOlx0W09DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1NdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxuZnMvb2NmczIveGF0dHIuYzoxMDQ6XHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXHQ9IFx1MDAyNm5vcF9wb3NpeF9hY2xfZGVmYXVsdCxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVx0W09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdXHRcdD0gXHUwMDI2b2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjE0PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYyNi1cbmZzL29jZnMyL3hhdHRyLmM6NjI3Olx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG5mcy9vY2ZzMi94YXR0ci5jLTYyOC1cdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjc4LVx0fVxuZnMvb2NmczIveGF0dHIuYzo2Nzk6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL3hhdHRyLmMtNjgwLVx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYz04OTE9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIveGF0dHIuYy05MDYtXG5mcy9vY2ZzMi94YXR0ci5jOjkwNzpcdGNhc2UgT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzpcbmZzL29jZnMyL3hhdHRyLmM6OTA4Olx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcbmZzL29jZnMyL3hhdHRyLmMtOTA5LVx0XHRpZiAoIShzYi1cdTAwM2VzX2ZsYWdzIFx1MDAyNiBTQl9QT1NJWEFDTCkpXG4tLVxuZnMvb2NmczIveGF0dHIuYz03MTczPXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNzE3Ny1cdHJldHVybiB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZIFx1MDAyNlx1MDAyNlxuZnMvb2NmczIveGF0dHIuYzo3MTc4Olx0ICAgICAgIHR5cGUgIT0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyBcdTAwMjZcdTAwMjZcbmZzL29jZnMyL3hhdHRyLmM6NzE3OTpcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xuZnMvb2NmczIveGF0dHIuYy03MTgwLX1cbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XG5mcy9vY2ZzMi94YXR0ci5oLTE1LVx0T0NGUzJfWEFUVFJfSU5ERVhfVVNFUiA9IDEsXG5mcy9vY2ZzMi94YXR0ci5oOjE2Olx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyxcbmZzL29jZnMyL3hhdHRyLmg6MTc6XHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcbmZzL29jZnMyL3hhdHRyLmgtMTgtXHRPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVELFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxMjozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg2MQoJCQkJCQkJb3V0cHV0OiAxOTkKCQkJCQkJCXRob3VnaHRzOiA0OTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBPQ0ZTMiBBQ0wgaW5pdGlhbGl6YXRpb24gY29kZSBhbmQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IGZ1enogaXQuICBUaGUga2V5IGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggdG91Y2hlcyBob3cgQUNMcyBhcmUgaGFuZGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rIG9wZXJhdGlvbnMgc3BlY2lmaWNhbGx5LiBJdCBzZWVtcyB0aGUgbG9naWMgYXJvdW5kIGZldGNoaW5nLCBkdXBsaWNhdGluZywgYW5kIHNldHRpbmcgQUNMcyBpcyBiZWluZyByZXZpc2VkLCBhbmQgdGhlcmUmIzM5O3Mgc29tZSBsb2NraW5nIGJlaGF2aW9yIGNoYW5nZSBhcm91bmQgeGF0dHIgc2V0dGluZy4gVGhpcyBpcyAqY29yZSogZmlsZXN5c3RlbSBzdHVmZjsgd2UgKm5lZWQqIHRvIGZ1enogdGhpcyB0byBlbnN1cmUgbm8gbmFzdHkgYnVncyBzbGlwcGVkIGluLgoKRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgZGVmaW5lIGBGU19QT1NJWF9BQ0xgIGlmIEkgc3BlY2lmeSBgT0NGUzJfRlNgLCB3aGljaCBpcyBncmVhdCwgbGVzcyBjbHV0dGVyLiAgTGV0JiMzOTtzIHNlZSwgYE9DRlMyX0ZTYCBkZXBlbmRzIG9uIGBJTkVUYCwgYFNZU0ZTYCwgYW5kIGBDT05GSUdGU19GU2AuICBTaW5jZSBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIHByZXR0eSBzdGFuZGFyZCwgdGhlIGltcG9ydGFudCBvbmUgdG8gZW5zdXJlIHdlIGhhdmUgZW5hYmxlZCBpcyBgQ09ORklHRlNfRlNgLiBUaHVzLCBJJiMzOTtsbCBuZWVkIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuCgpJJiMzOTttIHRoaW5raW5nLCB0aGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy4gVGhlIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyBhbmQsIGFzIHN1Y2gsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIFJlYXNvbmluZyBpcyB0aGF0IGl0IGRlYWxzIHdpdGggQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgY2FuIGxlYWQgdG8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvY2tpbmcgaXNzdWVzLiAgSSYjMzk7dmUgZGVjaWRlZCBvbiB0aGUgZm9sbG93aW5nIGBGb2N1c1N5bWJvbHNgOgoKKiAgIGBvY2ZzMl9pbml0X2FjbGAKKiAgIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYAoqICAgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgCiogICBgb2NmczJfY2FsY194YXR0cl9pbml0YAoqICAgYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgCiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYAoKU28sIHRvIGVuYWJsZSB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJJiMzOTttIGdvaW5nIHRvIHNldCBgRW5hYmxlQ29uZmlnc2A6CgoqICAgYE9DRlMyX0ZTYAoqICAgYENPTkZJR0ZTX0ZTYAoKSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLiAgYElORVRgIGFuZCBgU1lTRlNgIGFyZSBjb21tb24gZW5vdWdoIHRvIG5vdCB3b3JyeSBhYm91dC4gRExNIGlzIHVzZWQgd2l0aCBgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJgLCBidXQgaXNuJiMzOTt0IHN0cmljdGx5IG5lY2Vzc2FyeSBmb3IgbG9jYWwgbW91bnRzIGFuZCB0aGF0IGl0IGNhbiB1c2UgbG9jYWwgbW91bnQgb3IgTzJDQi4gQXMgTzJDQiBpcyB0aGUgZGVmYXVsdCwgSSB0aGluayBJJiMzOTttIGdvb2QgdG8gZ28uCgpJIHdhcyBicmllZmx5IGNvbnNpZGVyaW5nIGBvY2ZzMl9ta25vZGAgYXMgYSBmb2N1cyBzeW1ib2wsIGJ1dCB0aGF0IHNlZW1zIGEgYml0IHRvbyBicm9hZC4gVGhlIEFDTC1zcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7dmUgc2VsZWN0ZWQgYXJlIGRlZmluaXRlbHkgdGhlIGJldHRlciB0YXJnZXRzLiBUaHVzLCBJJiMzOTtsbCBzdGljayB0byBteSBzZWxlY3RlZCBzeW1ib2xzLiBJIGFtIG5vdyBjb25maWRlbnQgaW4gbXkgc2VsZWN0aW9uIGFuZCBJIHdpbGwgc3VibWl0IHRoaXMgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTI6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDssCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfaW5pdF9hY2wmIzM0OywKICAgICYjMzQ7b2NmczJfYWNsX2luaXRfcHJlcGFyZSYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlJiMzNDssCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl94YXR0cl9zZXRfaGFuZGxlJiMzNDssCiAgICAmIzM0O29jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OywKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9pbml0X2FjbCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlJiMzNDssCiAgICAmIzM0O29jZnMyX2FjbF9pbml0X3JlbGVhc2UmIzM0OywKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX3hhdHRyX3NldF9oYW5kbGUmIzM0OywKICAgICYjMzQ7b2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIEFDTCBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBPQ0ZTMiwgc3BlY2lmaWNhbGx5IGR1cmluZyBpbm9kZSBjcmVhdGlvbiAobWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmspLiBJdCBjaGFuZ2VzIGhvdyBBQ0xzIGFyZSBmZXRjaGVkLCBkdXBsaWNhdGVkLCBhbmQgc2V0LCBhbmQgbW9kaWZpZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIHhhdHRyIHNldHRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzE6NDUuMjIzNzMyMTg3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0MTA1ODc1NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIixcbiAgICBcIkNPTkZJR0ZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfaW5pdF9hY2xcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3ByZXBhcmVcIixcbiAgICBcIm9jZnMyX2FjbF9pbml0X3JlbGVhc2VcIixcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfeGF0dHJfc2V0X2hhbmRsZVwiLFxuICAgIFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBzcGVjaWZpY2FsbHkgZHVyaW5nIGlub2RlIGNyZWF0aW9uIChta25vZCwgbWtkaXIsIGNyZWF0ZSwgc3ltbGluaykuIEl0IGNoYW5nZXMgaG93IEFDTHMgYXJlIGZldGNoZWQsIGR1cGxpY2F0ZWQsIGFuZCBzZXQsIGFuZCBtb2RpZmllcyB0aGUgbG9ja2luZyBiZWhhdmlvciBhcm91bmQgeGF0dHIgc2V0dGluZy4gVGhpcyBpcyByZWFjaGFibGUgY29yZSBmaWxlc3lzdGVtIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgbGVha3MsIHVzZS1hZnRlci1mcmVlLCBvciBsb2NraW5nIGlzc3VlcyB3ZXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjQ1LjIyMzczNzUxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMjU1NTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZWUwZjllYmZiZDUwODFhYzY4MDA3NzQ1MDZlN2EyMzg5YTY4ZTM4NFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1bCAyNyAxMjozMTo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXFxuaW5kZXggYWYxZTJjZWRiMjE3ZjEuLjA5MGVjNjBmYjU3NmE2IDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5jXFxuKysrIGIvZnMvb2NmczIvYWNsLmNcXG5AQCAtMTEwLDggKzExMCw3IEBAIHN0YXRpYyB2b2lkICpvY2ZzMl9hY2xfdG9feGF0dHIoY29uc3Qgc3RydWN0IHBvc2l4X2FjbCAqYWNsLCBzaXplX3QgKnNpemUpXFxuIFxcdHJldHVybiBvY2ZzMl9hY2w7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgdHlwZSxcXG4rc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoKVxcbiB7XFxuIFxcdGludCBuYW1lX2luZGV4O1xcbkBAIC0zNDksNjMgKzM0OCwxMDUgQEAgaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcXG4gICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxcbiAgKi9cXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLVxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxcbi1cXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4tXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuLVxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKTtcXG4rXFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWFjbCk7XFxuK1xcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdHN0YXRlLVxcdTAwM2VhY2wgPSBOVUxMO1xcbit9XFxuK1xcbitpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKVxcbiB7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMO1xcbi1cXHRpbnQgcmV0ID0gMCwgcmV0MjtcXG4tXFx0dW1vZGVfdCBtb2RlO1xcbi1cXG4tXFx0aWYgKCFTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpKSB7XFxuLVxcdFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRcXHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgIGRpcl9iaCk7XFxuLVxcdFxcdFxcdHVwX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tXFx0XFx0XFx0aWYgKElTX0VSUihhY2wpKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihhY2wpO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdHN0YXRlLVxcdTAwM2VhY2wgPSBOVUxMO1xcbitcXHRzdGF0ZS1cXHUwMDNlbW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuK1xcbitcXHRpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRkb3duX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsID1cXG4rXFx0XFx0XFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xcbitcXHRcXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuK1xcdFxcdGlmIChJU19FUlIoc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSkge1xcbitcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCk7XFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKCFhY2wpIHtcXG4tXFx0XFx0XFx0bW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGUgXFx1MDAyNiB+Y3VycmVudF91bWFzaygpO1xcbi1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xcbi1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLVxcdFxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4rXFx0XFx0aWYgKHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkge1xcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VhY2wpIHtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4gXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcXHUwMDI2c3RhdGUtXFx1MDAzZWFjbCwgR0ZQX05PRlMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c3RhdGUtXFx1MDAzZW1vZGUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbitcXHRcXHRcXHRpZiAocmV0ID09IDApIHtcXG4rXFx0XFx0XFx0XFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXFx1MDAzZWFjbCk7XFxuK1xcdFxcdFxcdFxcdHN0YXRlLVxcdTAwM2VhY2wgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXHRcXHRcXHRcXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpO1xcbitcXHRcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2Vtb2RlIFxcdTAwMjY9IH5jdXJyZW50X3VtYXNrKCk7XFxuIFxcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZW1vZGUgXFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcXG4gXFx0fVxcbi1cXHRpZiAoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFxcdTAwMjZcXHUwMDI2IGFjbCkge1xcbi1cXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK2NsZWFudXA6XFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSBcXHUwMDI2XFx1MDAyNiBzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wpIHtcXG4gXFx0XFx0XFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfREVGQVVMVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCwgbWV0YV9hYyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGRhdGFfYWMpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bW9kZSA9IGlub2RlLVxcdTAwM2VpX21vZGU7XFxuLVxcdFxcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcXHUwMDI2YWNsLCBHRlBfTk9GUywgXFx1MDAyNm1vZGUpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbiBcXG4tXFx0XFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XFxuLVxcdFxcdGlmIChyZXQyKSB7XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0Mik7XFxuLVxcdFxcdFxcdHJldCA9IHJldDI7XFxuLVxcdFxcdFxcdGdvdG8gY2xlYW51cDtcXG4tXFx0XFx0fVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBkaV9iaCwgQUNMX1RZUEVfQUNDRVNTLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWNsLCBtZXRhX2FjLCBkYXRhX2FjKTtcXG4rXFx0cmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwgaGFuZGxlLCBzdGF0ZS1cXHUwMDNlbW9kZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cXHUwMDNlYWNsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1jbGVhbnVwOlxcbi1cXHRwb3NpeF9hY2xfcmVsZWFzZShhY2wpO1xcbitcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXFxuaW5kZXggNjY3YzZmMDNmYTYwNmYuLmE5MWY5Y2UyNzhkNmQzIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL2FjbC5oXFxuKysrIGIvZnMvb2NmczIvYWNsLmhcXG5AQCAtMjAsOSArMjAsMjAgQEAgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfaW9wX2dldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIGJvb2wgcmN1KTtcXG4gaW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuIFxcdFxcdCAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IHR5cGUpO1xcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xcbi1leHRlcm4gaW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcXG4tXFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKTtcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSB7XFxuK1xcdHN0cnVjdCBwb3NpeF9hY2wgKmRlZmF1bHRfYWNsO1xcbitcXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XFxuK1xcdHVtb2RlX3QgbW9kZTtcXG4rfTtcXG4rXFxuK2ludCBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbit2b2lkIG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpO1xcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4rXFx0XFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcXG4rXFx0XFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXFxuK1xcdFxcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbitcXHRcXHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XFxuIFxcbiAjZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcXG5pbmRleCAxMjc3NjY2Yzc3Y2QyZC4uZWEzN2E1MDU4MDg5MGMgMTAwNjQ0XFxuLS0tIGEvZnMvb2NmczIvbmFtZWkuY1xcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcXG5AQCAtMjU2LDYgKzI1Niw3IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuIFxcdHNpZ3NldF90IG9sZHNldDtcXG4gXFx0aW50IGRpZF9ibG9ja19zaWduYWxzID0gMDtcXG4gXFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuK1xcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuIFxcbiBcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiBcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG5AQCAtMzMwLDEwICszMzEsMTQgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChzdGF0dXMgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGxlYXZlO1xcbitcXG4gXFx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXFxuLVxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIHBhcmVudF9mZV9iaCwgbW9kZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSk7XFxuK1xcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIFxcdFxcdGdvdG8gbGVhdmU7XFxuQEAgLTQxMSw4ICs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbiBcXHRcXHRpbmNfbmxpbmsoZGlyKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyLCBuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCxcXG4tXFx0XFx0XFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xcbitcXHRzdGF0dXMgPSBvY2ZzMl9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgsIG1ldGFfYWMsIGRhdGFfYWMsXFxuK1xcdFxcdFxcdFxcdFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXG4gXFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4gXFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbkBAIC00NzcsNiArNDgyLDggQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XFxuIFxcdGtmcmVlKHNpLnZhbHVlKTtcXG4gXFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcbiBcXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFxcdTAwMjZsb29rdXApO1xcbiBcXG4gXFx0aWYgKGlub2RlX2FjKVxcbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi44NmYwMjkzNjgxZmNjZiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxcbi1cXHRcXHRcXHQgIHVtb2RlX3QgbW9kZSxcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsXFxuLVxcdFxcdFxcdCAgaW50ICp4YXR0cl9jcmVkaXRzLFxcbi1cXHRcXHRcXHQgIGludCAqd2FudF9tZXRhKVxcbitcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbitcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gXFxuIFxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuLVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcXG4tXFx0XFx0XFx0XFx0XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcXCJcXFwiLCBOVUxMLCAwKTtcXG4tXFx0XFx0dXBfcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIDApIHtcXG4tXFx0XFx0XFx0YV9zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbi1cXHRcXHRcXHRpZiAoU19JU0RJUihtb2RlKSlcXG4tXFx0XFx0XFx0XFx0YV9zaXplIFxcdTAwM2NcXHUwMDNjPSAxO1xcbi1cXHRcXHR9IGVsc2UgaWYgKGFjbF9sZW4gIT0gMCBcXHUwMDI2XFx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XFxuLVxcdFxcdFxcdHJldCA9IGFjbF9sZW47XFxuLVxcdFxcdFxcdG1sb2dfZXJybm8ocmV0KTtcXG4tXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbkBAIC02ODMsMTQgKzY3NiwzMyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiBcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIFxcdH1cXG4tXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbi1cXHRcXHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXFxuLVxcdFxcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcXG4tXFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYiwgYWNsX2xlbik7XFxuLVxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuLVxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4rXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbC1cXHUwMDNlYV9jb3VudCAqXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbitcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuK1xcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9XFxuK1xcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhY2xfbGVuKTtcXG4rXFx0XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz1cXG4rXFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cXHUwMDNlaV9zYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jbHVzdGVycyk7XFxuK1xcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbitcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbitcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4rXFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbitcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbitcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWNsX2xlbik7XFxuK1xcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuK1xcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZXdfY2x1c3RlcnMpO1xcbitcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0zNDgzLDkgKzM0OTUsMTAgQEAgc3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IGlub2RlICppbm9kZSxcXG4gfVxcbiBcXG4gLypcXG4tICogVGhpcyBmdW5jdGlvbiBvbmx5IGNhbGxlZCBkdWluZyBjcmVhdGluZyBpbm9kZVxcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXFxuLSAqIEFsbCB0cmFuc2FuY3Rpb24gY3JlZGl0cyBoYXZlIGJlZW4gcmVzZXJ2ZWQgaW4gbWtub2QuXFxuKyAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlXFxuKyAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cXG4rICogT3JkaW5hcnkgeGF0dHIgdXBkYXRlcyBtdXN0IHVzZSBvY2ZzMl94YXR0cl9zZXQoKS5cXG4rICogQWxsIHRyYW5zYWN0aW9uIGNyZWRpdHMgaGF2ZSBiZWVuIHJlc2VydmVkIGluIG1rbm9kIG9yIHN5bWxpbmsgY2FsbGVycy5cXG4gICovXFxuIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuQEAgLTM1NDIsOCArMzU1NSw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdHhpcy5pbm9kZV9iaCA9IHhicy5pbm9kZV9iaCA9IGRpX2JoO1xcbiBcXHRkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopZGlfYmgtXFx1MDAzZWJfZGF0YTtcXG4gXFxuLVxcdGRvd25fd3JpdGUoXFx1MDAyNk9DRlMyX0koaW5vZGUpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbi1cXG4gXFx0cmV0ID0gb2NmczJfeGF0dHJfaWJvZHlfZmluZChpbm9kZSwgbmFtZV9pbmRleCwgbmFtZSwgXFx1MDAyNnhpcyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gY2xlYW51cDtcXG5AQCAtMzU1Niw3ICszNTY3LDYgQEAgaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0cmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGlub2RlLCBkaSwgXFx1MDAyNnhpLCBcXHUwMDI2eGlzLCBcXHUwMDI2eGJzLCBcXHUwMDI2Y3R4dCk7XFxuIFxcbiBjbGVhbnVwOlxcbi1cXHR1cF93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuIFxcdGJyZWxzZSh4YnMueGF0dHJfYmgpO1xcbiBcXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcXG4gXFxuQEAgLTcyNTcsNiArNzI2Nyw3IEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuIHtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcXG4rXFx0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcXG4gXFxuIFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuQEAgLTcyNjksMTAgKzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4gXFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbiBcXHRcXHRnb3RvIGxlYXZlO1xcbiBcXHR9XFxuLVxcdHJldCA9IG9jZnMyX2luaXRfYWNsKE5VTEwsIGlub2RlLCBkaXIsIE5VTEwsIGRpcl9iaCwgTlVMTCwgTlVMTCk7XFxuK1xcbitcXHRyZXQgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIGRpcl9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gdW5sb2NrO1xcbitcXG4rXFx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIE5VTEwsIE5VTEwsIE5VTEwsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRtbG9nX2Vycm5vKHJldCk7XFxuIFxcbit1bmxvY2s6XFxuK1xcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2UoXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIFxcdG9jZnMyX2lub2RlX3VubG9jayhkaXIsIDApO1xcbiBcXHRicmVsc2UoZGlyX2JoKTtcXG4gbGVhdmU6XFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXFxuaW5kZXggNjVlOWFhNzQzOTE5OWUuLjVjZGQ2YzZiNDAwNjRiIDEwMDY0NFxcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmhcXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXFxuQEAgLTU1LDkgKzU1LDEyIEBAIGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X3NldChoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKixcXG4gaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKixcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbiBcXHRcXHRcXHQgICAgIGludCAqLCBpbnQgKiwgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKiopO1xcbi1pbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKixcXG4tXFx0XFx0XFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxcbi1cXHRcXHRcXHQgIGludCAqLCBpbnQgKiwgaW50ICopO1xcbitcXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG4raW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4rXFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKTtcXG4gXFxuIC8qXFxuICAqIHhhdHRycyBjYW4gbGl2ZSBpbnNpZGUgYW4gaW5vZGUsIGFzIHBhcnQgb2YgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjQ1Ljc0NjkzODA3OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg2ODg3MzcxNTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCIsXG4gICAgXCJDT05GSUdGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2luaXRfYWNsXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlXCIsXG4gICAgXCJvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlXCIsXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX3hhdHRyX3NldF9oYW5kbGVcIixcbiAgICBcIm9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIEFDTCBpbml0aWFsaXphdGlvbiBsb2dpYyBpbiBPQ0ZTMiwgc3BlY2lmaWNhbGx5IGR1cmluZyBpbm9kZSBjcmVhdGlvbiAobWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmspLiBJdCBjaGFuZ2VzIGhvdyBBQ0xzIGFyZSBmZXRjaGVkLCBkdXBsaWNhdGVkLCBhbmQgc2V0LCBhbmQgbW9kaWZpZXMgdGhlIGxvY2tpbmcgYmVoYXZpb3IgYXJvdW5kIHhhdHRyIHNldHRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIGNvcmUgZmlsZXN5c3RlbSBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9ja2luZyBpc3N1ZXMgd2VyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZTBmOWViZmJkNTA4MWFjNjgwMDc3NDUwNmU3YTIzODlhNjhlMzg0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjcgMTI6MzE6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuYyBiL2ZzL29jZnMyL2FjbC5jXG5pbmRleCBhZjFlMmNlZGIyMTdmMS4uMDkwZWM2MGZiNTc2YTYgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuY1xuKysrIGIvZnMvb2NmczIvYWNsLmNcbkBAIC0xMTAsOCArMTEwLDcgQEAgc3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbiBcdHJldHVybiBvY2ZzMl9hY2w7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9nZXRfYWNsX25vbG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgICAgICBpbnQgdHlwZSxcbitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXG4gXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgpXG4ge1xuIFx0aW50IG5hbWVfaW5kZXg7XG5AQCAtMzQ5LDYzICszNDgsMTA1IEBAIGludCBvY2ZzMl9hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaClcbiAgKiBJbml0aWFsaXplIHRoZSBBQ0xzIG9mIGEgbmV3IGlub2RlLiBJZiBwYXJlbnQgZGlyZWN0b3J5IGhhcyBkZWZhdWx0IEFDTCxcbiAgKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXG4gICovXG4taW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdCAgIHN0cnVjdCBpbm9kZSAqZGlyLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxuLVx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbi1cdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4tXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjKVxuK3ZvaWQgb2NmczJfYWNsX2luaXRfcmVsZWFzZShzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VhY2wpO1xuK1x0c3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgPSBOVUxMO1xuK1x0c3RhdGUtXHUwMDNlYWNsID0gTlVMTDtcbit9XG4rXG4raW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXG4rXHRcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmgsXG4rXHRcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4ge1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdHN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7XG4tXHRpbnQgcmV0ID0gMCwgcmV0Mjtcbi1cdHVtb2RlX3QgbW9kZTtcbi1cbi1cdGlmICghU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tXHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuLVx0XHRcdGRvd25fcmVhZChcdTAwMjZPQ0ZTMl9JKGRpciktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi1cdFx0XHRhY2wgPSBvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFx0ICAgZGlyX2JoKTtcbi1cdFx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRcdGlmIChJU19FUlIoYWNsKSlcbi1cdFx0XHRcdHJldHVybiBQVFJfRVJSKGFjbCk7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRzdGF0ZS1cdTAwM2Vtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG4rXHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuK1x0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuK1x0XHRpZiAoSVNfRVJSKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIoc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpO1xuK1x0XHRcdHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsID0gTlVMTDtcbitcdFx0XHRyZXR1cm4gcmV0O1xuIFx0XHR9XG4tXHRcdGlmICghYWNsKSB7XG4tXHRcdFx0bW9kZSA9IGlub2RlLVx1MDAzZWlfbW9kZSBcdTAwMjYgfmN1cnJlbnRfdW1hc2soKTtcbi1cdFx0XHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIG1vZGUpO1xuLVx0XHRcdGlmIChyZXQpIHtcbi1cdFx0XHRcdG1sb2dfZXJybm8ocmV0KTtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsKSB7XG4rXHRcdFx0c3RhdGUtXHUwMDNlYWNsID0gcG9zaXhfYWNsX2R1cChzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0aWYgKCFzdGF0ZS1cdTAwM2VhY2wpIHtcbitcdFx0XHRcdHJldCA9IC1FTk9NRU07XG4gXHRcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdFx0fVxuK1x0XHRcdHJldCA9IF9fcG9zaXhfYWNsX2NyZWF0ZShcdTAwMjZzdGF0ZS1cdTAwM2VhY2wsIEdGUF9OT0ZTLFxuK1x0XHRcdFx0XHRcdCBcdTAwMjZzdGF0ZS1cdTAwM2Vtb2RlKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdGlmIChyZXQgPT0gMCkge1xuK1x0XHRcdFx0cG9zaXhfYWNsX3JlbGVhc2Uoc3RhdGUtXHUwMDNlYWNsKTtcbitcdFx0XHRcdHN0YXRlLVx1MDAzZWFjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4rXHRcdFx0XHRwb3NpeF9hY2xfcmVsZWFzZShzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCk7XG4rXHRcdFx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9IE5VTEw7XG4rXHRcdFx0fVxuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0YXRlLVx1MDAzZW1vZGUgXHUwMDI2PSB+Y3VycmVudF91bWFzaygpO1xuIFx0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRzdGF0ZS1cdTAwM2Vtb2RlIFx1MDAyNj0gfmN1cnJlbnRfdW1hc2soKTtcbiBcdH1cbi1cdGlmICgob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIFx1MDAyNlx1MDAyNiBhY2wpIHtcbi1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSkge1xuK1xuK1x0cmV0dXJuIDA7XG4rY2xlYW51cDpcbitcdG9jZnMyX2FjbF9pbml0X3JlbGVhc2Uoc3RhdGUpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4rXHRcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cdTAwM2VpX3NiKTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0aWYgKFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbiBcdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuLVx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCwgYWNsLFxuLVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxuK1x0XHRcdFx0XHQgICAgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wsIG1ldGFfYWMsXG4rXHRcdFx0XHRcdCAgICBkYXRhX2FjKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0Z290byBjbGVhbnVwO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbiBcdFx0fVxuLVx0XHRtb2RlID0gaW5vZGUtXHUwMDNlaV9tb2RlO1xuLVx0XHRyZXQgPSBfX3Bvc2l4X2FjbF9jcmVhdGUoXHUwMDI2YWNsLCBHRlBfTk9GUywgXHUwMDI2bW9kZSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbi1cdFx0cmV0MiA9IG9jZnMyX2FjbF9zZXRfbW9kZShpbm9kZSwgZGlfYmgsIGhhbmRsZSwgbW9kZSk7XG4tXHRcdGlmIChyZXQyKSB7XG4tXHRcdFx0bWxvZ19lcnJubyhyZXQyKTtcbi1cdFx0XHRyZXQgPSByZXQyO1xuLVx0XHRcdGdvdG8gY2xlYW51cDtcbi1cdFx0fVxuLVx0XHRpZiAocmV0IFx1MDAzZSAwKSB7XG4tXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLFxuLVx0XHRcdFx0XHQgICAgZGlfYmgsIEFDTF9UWVBFX0FDQ0VTUyxcbi1cdFx0XHRcdFx0ICAgIGFjbCwgbWV0YV9hYywgZGF0YV9hYyk7XG4rXHRyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLCBoYW5kbGUsIHN0YXRlLVx1MDAzZW1vZGUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRtbG9nX2Vycm5vKHJldCk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXG4rXHRcdFx0XHRcdCAgICBBQ0xfVFlQRV9BQ0NFU1MsIHN0YXRlLVx1MDAzZWFjbCxcbitcdFx0XHRcdFx0ICAgIG1ldGFfYWMsIGRhdGFfYWMpO1xuIFx0XHR9XG4gXHR9XG4tY2xlYW51cDpcbi1cdHBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hY2wuaCBiL2ZzL29jZnMyL2FjbC5oXG5pbmRleCA2NjdjNmYwM2ZhNjA2Zi4uYTkxZjljZTI3OGQ2ZDMgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi9hY2wuaFxuKysrIGIvZnMvb2NmczIvYWNsLmhcbkBAIC0yMCw5ICsyMCwyMCBAQCBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpO1xuIGludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuIFx0XHQgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCB0eXBlKTtcbiBleHRlcm4gaW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICopO1xuLWV4dGVybiBpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBpbm9kZSAqLFxuLVx0XHRcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLFxuLVx0XHRcdCAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKixcbi1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICopO1xuK3N0cnVjdCBvY2ZzMl9hY2xfc3RhdGUge1xuK1x0c3RydWN0IHBvc2l4X2FjbCAqZGVmYXVsdF9hY2w7XG4rXHRzdHJ1Y3QgcG9zaXhfYWNsICphY2w7XG4rXHR1bW9kZV90IG1vZGU7XG4rfTtcbitcbitpbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbitcdFx0XHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpcl9iaCxcbitcdFx0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4rdm9pZCBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKnN0YXRlKTtcbitpbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbitcdFx0ICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsXG4rXHRcdCAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxuK1x0XHQgICBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICpzdGF0ZSk7XG4gXG4gI2VuZGlmIC8qIE9DRlMyX0FDTF9IICovXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIvbmFtZWkuYyBiL2ZzL29jZnMyL25hbWVpLmNcbmluZGV4IDEyNzc2NjZjNzdjZDJkLi5lYTM3YTUwNTgwODkwYyAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL25hbWVpLmNcbisrKyBiL2ZzL29jZnMyL25hbWVpLmNcbkBAIC0yNTYsNiArMjU2LDcgQEAgc3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdHNpZ3NldF90IG9sZHNldDtcbiBcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcbitcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XG4gXG4gXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVx1MDAzZWRfbmFtZS5sZW4sIGRlbnRyeS1cdTAwM2VkX25hbWUubmFtZSxcbiBcdFx0XHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVx1MDAzZWlwX2Jsa25vLFxuQEAgLTMzMCwxMCArMzMxLDE0IEBAIHN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdH1cbiBcdH1cbiBcbitcdHN0YXR1cyA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgcGFyZW50X2ZlX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHN0YXR1cyBcdTAwM2MgMClcbitcdFx0Z290byBsZWF2ZTtcbitcbiBcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xuLVx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgcGFyZW50X2ZlX2JoLCBtb2RlLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuLVx0XHRcdFx0ICAgICAgIFx1MDAyNnhhdHRyX2NyZWRpdHMsIFx1MDAyNndhbnRfbWV0YSk7XG4rXHRzdGF0dXMgPSBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoZGlyLCBtb2RlLCBcdTAwMjZzaSwgXHUwMDI2d2FudF9jbHVzdGVycyxcbitcdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsXG4rXHRcdFx0XHQgICAgICAgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuIFx0XHRnb3RvIGxlYXZlO1xuQEAgLTQxMSw4ICs0MTYsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0XHRpbmNfbmxpbmsoZGlyKTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IG9jZnMyX2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpciwgbmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsXG4tXHRcdFx0IG1ldGFfYWMsIGRhdGFfYWMpO1xuK1x0c3RhdHVzID0gb2NmczJfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgbmV3X2ZlX2JoLCBtZXRhX2FjLCBkYXRhX2FjLFxuK1x0XHRcdFx0XHUwMDI2YWNsX3N0YXRlKTtcbiBcbiBcdGlmIChzdGF0dXMgXHUwMDNjIDApIHtcbiBcdFx0bWxvZ19lcnJubyhzdGF0dXMpO1xuQEAgLTQ3Nyw2ICs0ODIsOCBAQCBzdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuIFx0YnJlbHNlKHBhcmVudF9mZV9iaCk7XG4gXHRrZnJlZShzaS52YWx1ZSk7XG4gXG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4rXG4gXHRvY2ZzMl9mcmVlX2Rpcl9sb29rdXBfcmVzdWx0KFx1MDAyNmxvb2t1cCk7XG4gXG4gXHRpZiAoaW5vZGVfYWMpXG5kaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmNcbmluZGV4IGZjZGRkM2MxM2FjZGRkLi44NmYwMjkzNjgxZmNjZiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbisrKyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02MTEsMTMgKzYxMSwxMCBAQCBpbnQgb2NmczJfY2FsY19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi1cdFx0XHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoLFxuLVx0XHRcdCAgdW1vZGVfdCBtb2RlLFxuK2ludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi1cdFx0XHQgIGludCAqd2FudF9jbHVzdGVycyxcbi1cdFx0XHQgIGludCAqeGF0dHJfY3JlZGl0cyxcbi1cdFx0XHQgIGludCAqd2FudF9tZXRhKVxuK1x0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4rXHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXHUwMDNlaV9zYik7XG5AQCAtNjI4LDE5ICs2MjUsMTUgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gXG4gXHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbi1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRhY2xfbGVuID0gb2NmczJfeGF0dHJfZ2V0X25vbG9jayhkaXIsIGRpcl9iaCxcbi1cdFx0XHRcdFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG4tXHRcdFx0XHRcdFwiXCIsIE5VTEwsIDApO1xuLVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLVx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgMCkge1xuLVx0XHRcdGFfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbi1cdFx0XHRpZiAoU19JU0RJUihtb2RlKSlcbi1cdFx0XHRcdGFfc2l6ZSBcdTAwM2NcdTAwM2M9IDE7XG4tXHRcdH0gZWxzZSBpZiAoYWNsX2xlbiAhPSAwIFx1MDAyNlx1MDAyNiBhY2xfbGVuICE9IC1FTk9EQVRBKSB7XG4tXHRcdFx0cmV0ID0gYWNsX2xlbjtcbi1cdFx0XHRtbG9nX2Vycm5vKHJldCk7XG4tXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuK1x0XHR9XG4rXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4rXHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbitcdFx0XHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNjgzLDE0ICs2NzYsMzMgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4gXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbiBcdH1cbi1cdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcdTAwMjZcdTAwMjZcbi1cdCAgICBhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuLVx0XHQvKiBmb3IgZGlyZWN0b3J5LCBpdCBoYXMgREVGQVVMVCBhbmQgQUNDRVNTIHR3byB0eXBlcyBvZiBhY2xzICovXG4tXHRcdG5ld19jbHVzdGVycyA9IChTX0lTRElSKG1vZGUpID8gMiA6IDEpICpcbi1cdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYiwgYWNsX2xlbik7XG4tXHRcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbi1cdFx0XHRcdFx0XHRcdCAgIG5ld19jbHVzdGVycyk7XG4tXHRcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcbitcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4rXHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbitcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuK1x0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuK1x0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbitcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4rXHRcdFx0XHQqeGF0dHJfY3JlZGl0cyArPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuK1x0XHRcdFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuK1x0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuK1x0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4rXHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4rXHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuK1x0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4rXHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbitcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICs9XG4rXHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbitcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4rXHRcdFx0XHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XG4rXHRcdFx0fVxuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTM0ODMsOSArMzQ5NSwxMCBAQCBzdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIH1cbiBcbiAvKlxuLSAqIFRoaXMgZnVuY3Rpb24gb25seSBjYWxsZWQgZHVpbmcgY3JlYXRpbmcgaW5vZGVcbi0gKiBmb3IgaW5pdCBzZWN1cml0eS9hY2wgeGF0dHJzIG9mIHRoZSBuZXcgaW5vZGUuXG4tICogQWxsIHRyYW5zYW5jdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZC5cbisgKiBUaGlzIGhlbHBlciBpcyBvbmx5IGZvciBzZXR0aW5nIGluaXRpYWwgQUNMIG9yIHNlY3VyaXR5IHhhdHRycyBvbiBhbiBpbm9kZVxuKyAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cbisgKiBPcmRpbmFyeSB4YXR0ciB1cGRhdGVzIG11c3QgdXNlIG9jZnMyX3hhdHRyX3NldCgpLlxuKyAqIEFsbCB0cmFuc2FjdGlvbiBjcmVkaXRzIGhhdmUgYmVlbiByZXNlcnZlZCBpbiBta25vZCBvciBzeW1saW5rIGNhbGxlcnMuXG4gICovXG4gaW50IG9jZnMyX3hhdHRyX3NldF9oYW5kbGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuQEAgLTM1NDIsOCArMzU1NSw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHR4aXMuaW5vZGVfYmggPSB4YnMuaW5vZGVfYmggPSBkaV9iaDtcbiBcdGRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKilkaV9iaC1cdTAwM2ViX2RhdGE7XG4gXG4tXHRkb3duX3dyaXRlKFx1MDAyNk9DRlMyX0koaW5vZGUpLVx1MDAzZWlwX3hhdHRyX3NlbSk7XG4tXG4gXHRyZXQgPSBvY2ZzMl94YXR0cl9pYm9keV9maW5kKGlub2RlLCBuYW1lX2luZGV4LCBuYW1lLCBcdTAwMjZ4aXMpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBjbGVhbnVwO1xuQEAgLTM1NTYsNyArMzU2Nyw2IEBAIGludCBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcdTAwMjZ4aSwgXHUwMDI2eGlzLCBcdTAwMjZ4YnMsIFx1MDAyNmN0eHQpO1xuIFxuIGNsZWFudXA6XG4tXHR1cF93cml0ZShcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuIFx0YnJlbHNlKHhicy54YXR0cl9iaCk7XG4gXHRvY2ZzMl94YXR0cl9idWNrZXRfZnJlZSh4YnMuYnVja2V0KTtcbiBcbkBAIC03MjU3LDYgKzcyNjcsNyBAQCBpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxuIHtcbiBcdGludCByZXQgPSAwO1xuIFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpkaXJfYmggPSBOVUxMO1xuK1x0c3RydWN0IG9jZnMyX2FjbF9zdGF0ZSBhY2xfc3RhdGUgPSB7IDAgfTtcbiBcbiBcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuQEAgLTcyNjksMTAgKzcyODAsMTcgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChzdHJ1Y3QgaW5vZGUgKmRpcixcbiBcdFx0bWxvZ19lcnJubyhyZXQpO1xuIFx0XHRnb3RvIGxlYXZlO1xuIFx0fVxuLVx0cmV0ID0gb2NmczJfaW5pdF9hY2woTlVMTCwgaW5vZGUsIGRpciwgTlVMTCwgZGlyX2JoLCBOVUxMLCBOVUxMKTtcbitcbitcdHJldCA9IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoaW5vZGUsIGRpciwgZGlyX2JoLCBcdTAwMjZhY2xfc3RhdGUpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byB1bmxvY2s7XG4rXG4rXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXHUwMDI2YWNsX3N0YXRlKTtcbiBcdGlmIChyZXQpXG4gXHRcdG1sb2dfZXJybm8ocmV0KTtcbiBcbit1bmxvY2s6XG4rXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFx1MDAyNmFjbF9zdGF0ZSk7XG4gXHRvY2ZzMl9pbm9kZV91bmxvY2soZGlyLCAwKTtcbiBcdGJyZWxzZShkaXJfYmgpO1xuIGxlYXZlOlxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmggYi9mcy9vY2ZzMi94YXR0ci5oXG5pbmRleCA2NWU5YWE3NDM5MTk5ZS4uNWNkZDZjNmI0MDA2NGIgMTAwNjQ0XG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5oXG4rKysgYi9mcy9vY2ZzMi94YXR0ci5oXG5AQCAtNTUsOSArNTUsMTIgQEAgaW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqLFxuIGludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICosXG4gXHRcdFx0ICAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuIFx0XHRcdCAgICAgaW50ICosIGludCAqLCBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKik7XG4taW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXG4tXHRcdFx0ICB1bW9kZV90LCBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqLFxuLVx0XHRcdCAgaW50ICosIGludCAqLCBpbnQgKik7XG4rXG4rc3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbitpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4rXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4rXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbitcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpO1xuIFxuIC8qXG4gICogeGF0dHJzIGNhbiBsaXZlIGluc2lkZSBhbiBpbm9kZSwgYXMgcGFydCBvZiBhbiBleHRlcm5hbCB4YXR0ciBibG9jayxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjQ1Ljc0Njk0MDI5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzMzI1NjM1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgT0NGUzIgQUNMIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgT0NGUzIsIGFuZCBpdCBzZWVtcyBsaWtlIGEgZmFpcmx5IHNpZ25pZmljYW50IGNoYW5nZSB0byBBQ0wgaW5pdGlhbGl6YXRpb24uIFRoZSBjb3JlIG9mIGl0IHJldm9sdmVzIGFyb3VuZCByZXN0cnVjdHVyaW5nIGhvdyBBQ0xzIGFyZSBoYW5kbGVkLCB3aXRoIG5ldyBmdW5jdGlvbnMgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBiZWluZyBpbnRyb2R1Y2VkLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgb2NmczJfaW5pdF9hY2xgLiBUaGUgZmFjdCB0aGF0IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIG5vdyB0YWtpbmcgYW4gYG9jZnMyX2FjbF9zdGF0ZWAgaW5zdGVhZCBvZiBhIGBidWZmZXJfaGVhZGAgaW5kaWNhdGVzIGEgc2hpZnQgaW4gaG93IEFDTCBkYXRhIGlzIG1hbmFnZWQgZHVyaW5nIHhhdHRyIGNhbGN1bGF0aW9ucy4gQW5kIHRoYXQgYGRvd25fd3JpdGUoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKWAgY2FsbCBpcyBnb25lIGZyb20gYG9jZnMyX3hhdHRyX3NldF9oYW5kbGVgIHdoaWNoIGlzIGludGVyZXN0aW5nLlxuXG5CZWZvcmUgSSBkaXZlIHRvbyBkZWVwLCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gc29tZXRoaW5nIHRoYXQncyBwcmFjdGljYWxseSBmdXp6YWJsZS4gT0NGUzIgaXMgYSBmaWxlc3lzdGVtLCBzbyB5ZWFoLCBhYnNvbHV0ZWx5IGl0IGlzLiBJIGNhbiBzZXQgdXAgYSBsb29wYmFjayBkZXZpY2Ugb3Igc29tZXRoaW5nIHNpbWlsYXIsIG1vdW50IGl0LCBhbmQgc3RhcnQgdGhyb3dpbmcgdGhpbmdzIGF0IGl0LiBUaGUgcG90ZW50aWFsIGZvciBmdXp6aW5nIGlzIGRlZmluaXRlbHkgdGhlcmUuXG5cbkxldCBtZSBzZWUsIHdoYXQgYXJlIHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyBmb3IgT0NGUzI/IENsZWFybHksIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBiYXNlLCBidXQgc2luY2UgdGhpcyBwYXRjaCB0b3VjaGVzIEFDTHMsIGBDT05GSUdfT0NGUzJfRlNfUE9TSVhfQUNMYCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIHRvIG1ha2Ugc3VyZSB0aG9zZSBhcmUgZW5hYmxlZCwgdGhlbiBJJ2xsIHNlYXJjaCBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1ODAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMTo1MS4wNzk1MDYyMThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzNTIxNjA2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0NGUzJfRlNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL29jZnMyL0tjb25maWc6Mjpjb25maWcgT0NGUzJfRlNcXG5mcy9vY2ZzMi9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTI3LVxcbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG5mcy9vY2ZzMi9LY29uZmlnLTI5LVxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxcbmZzL29jZnMyL0tjb25maWc6NDI6Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuZnMvb2NmczIvS2NvbmZpZy00My1cXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTUzLVxcbmZzL29jZnMyL0tjb25maWc6NTQ6Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuZnMvb2NmczIvS2NvbmZpZy01NS1cXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMTo1My4yMTQ3Mjg2NzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTIzODk2MzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgZ2l2ZW4gcHJvbXB0OlxuXG4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jeSBMYW5kc2NhcGUgaW4gYGZzL29jZnMyL0tjb25maWdgKipcblxuT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byB1bmRlcnN0YW5kIHNvbWUgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIGBmcy9vY2ZzMi9LY29uZmlnYC4gVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBjb25maWd1cmF0aW9uIGZpbGUgaXMgYWxtb3N0IGNlcnRhaW5seSB3aGVyZSB0aGUgb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyBhcmUgZGVmaW5lZCBmb3IgT0NGUzIuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgd2hlcmUgSSB3b3VsZCAqYWx3YXlzKiBiZWdpbiB3aGVuIGRpZ2dpbmcgaW50byBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdsbCBuZWVkIHRvIHNlZSBpZiB0aGUgcmVsYXRpb25zaGlwcyBhcmUgZXhwbGljaXRseSBzdGF0ZWQsIG9yIGlmIEkgd2lsbCBoYXZlIHRvIGRvIGEgZGVlcGVyIGRpZyBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzE6NTcuNzM4NjI3NDU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBPQ0ZTMl9GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIk9DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHRlNfRlNcXG4gICA1OlxcdFxcdHNlbGVjdCBCVUZGRVJfSEVBRFxcbiAgIDY6XFx0XFx0c2VsZWN0IEpCRDJcXG4gICA3OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgIDg6XFx0XFx0c2VsZWN0IFFVT1RBXFxuICAgOTpcXHRcXHRzZWxlY3QgUVVPVEFfVFJFRVxcbiAgMTA6XFx0XFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbiAgMTE6XFx0XFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgT0NGUzIgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZXh0ZW50IGJhc2VkIHNoYXJlZCBkaXNrIGNsdXN0ZXIgZmlsZVxcbiAgMTQ6XFx0XFx0ICBzeXN0ZW0gd2l0aCBtYW55IHNpbWlsYXJpdGllcyB0byBleHQzLiBJdCBzdXBwb3J0cyA2NCBiaXQgaW5vZGVcXG4gIDE1OlxcdFxcdCAgbnVtYmVycywgYW5kIGhhcyBhdXRvbWF0aWNhbGx5IGV4dGVuZGluZyBtZXRhZGF0YSBncm91cHMgd2hpY2ggbWF5XFxuICAxNjpcXHRcXHQgIGFsc28gbWFrZSBpdCBhdHRyYWN0aXZlIGZvciBub24tY2x1c3RlcmVkIHVzZS5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0XFx0ICBZb3UnbGwgd2FudCB0byBpbnN0YWxsIHRoZSBvY2ZzMi10b29scyBwYWNrYWdlIGluIG9yZGVyIHRvIGF0IGxlYXN0XFxuICAxOTpcXHRcXHQgIGdldCBcXFwibW91bnQub2NmczJcXFwiLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRcXHQgIFByb2plY3Qgd2ViIHBhZ2U6ICAgIGh0dHBzOi8vb2NmczIud2lraS5rZXJuZWwub3JnL1xcbiAgMjI6XFx0XFx0ICBUb29scyB3ZWIgcGFnZTogICAgICBodHRwczovL2dpdGh1Yi5jb20vbWFya2Zhc2hlaC9vY2ZzMi10b29sc1xcbiAgMjM6XFx0XFx0ICBPQ0ZTMiBtYWlsaW5nIGxpc3RzOiBodHRwczovL3N1YnNwYWNlLmtlcm5lbC5vcmcvbGlzdHMubGludXguZGV2Lmh0bWxcXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0ZTMiwgc2VlIHRoZSBmaWxlXFxuICAyNjpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvb2NmczIucnN0XFx1MDAzZS5cXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIE9DRlMyX0ZTX08yQ0JcXG4gIDI5OlxcdFxcdHRyaXN0YXRlIFxcXCJPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuICAzMDpcXHRcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuICAzMTpcXHRcXHRkZWZhdWx0IHlcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgT0NGUzIgaW5jbHVkZXMgYSBzaW1wbGUga2VybmVsc3BhY2UgY2x1c3RlcmluZyBwYWNrYWdlLCB0aGUgT0NGUzJcXG4gIDM0OlxcdFxcdCAgQ2x1c3RlciBCYXNlLiAgSXQgb25seSByZXF1aXJlcyBhIHZlcnkgc21hbGwgdXNlcnNwYWNlIGNvbXBvbmVudFxcbiAgMzU6XFx0XFx0ICB0byBjb25maWd1cmUgaXQuIFRoaXMgY29tZXMgd2l0aCB0aGUgc3RhbmRhcmQgb2NmczItdG9vbHMgcGFja2FnZS5cXG4gIDM2OlxcdFxcdCAgTzJDQiBpcyBsaW1pdGVkIHRvIG1haW50YWluaW5nIGEgY2x1c3RlciBmb3IgT0NGUzIgZmlsZSBzeXN0ZW1zLlxcbiAgMzc6XFx0XFx0ICBJdCBjYW5ub3QgbWFuYWdlIGFueSBvdGhlciBjbHVzdGVyIGFwcGxpY2F0aW9ucy5cXG4gIDM4OlxcdFxcbiAgMzk6XFx0XFx0ICBJdCBpcyBhbHdheXMgc2FmZSB0byBzYXkgWSBoZXJlLCBhcyB0aGUgY2x1c3RlcmluZyBtZXRob2QgaXNcXG4gIDQwOlxcdFxcdCAgcnVuLXRpbWUgc2VsZWN0YWJsZS5cXG4gIDQxOlxcdFxcbiAgNDI6XFx0Y29uZmlnIE9DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSXFxuICA0MzpcXHRcXHR0cmlzdGF0ZSBcXFwiT0NGUzIgVXNlcnNwYWNlIENsdXN0ZXJpbmdcXFwiXFxuICA0NDpcXHRcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTIFxcdTAwMjZcXHUwMDI2IERMTVxcbiAgNDU6XFx0XFx0ZGVmYXVsdCB5XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIFRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgT0NGUzIgdG8gdXNlIHVzZXJzcGFjZSBjbHVzdGVyaW5nIHNlcnZpY2VzXFxuICA0ODpcXHRcXHQgIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIERMTSBpbiBmcy9kbG0uICBJZiB5b3UgYXJlIHVzaW5nIGFcXG4gIDQ5OlxcdFxcdCAgdXNlcnNwYWNlIGNsdXN0ZXIgbWFuYWdlciwgc2F5IFkgaGVyZS5cXG4gIDUwOlxcdFxcbiAgNTE6XFx0XFx0ICBJdCBpcyBzYWZlIHRvIHNheSBZLCBhcyB0aGUgY2x1c3RlcmluZyBtZXRob2QgaXMgcnVuLXRpbWVcXG4gIDUyOlxcdFxcdCAgc2VsZWN0YWJsZS5cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0Y29uZmlnIE9DRlMyX0ZTX1NUQVRTXFxuICA1NTpcXHRcXHRib29sIFxcXCJPQ0ZTMiBzdGF0aXN0aWNzXFxcIlxcbiAgNTY6XFx0XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GUyBcXHUwMDI2XFx1MDAyNiBERUJVR19GU1xcbiAgNTc6XFx0XFx0ZGVmYXVsdCB5XFxuICA1ODpcXHRcXHRoZWxwXFxuICA1OTpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyBzb21lIGZzIHN0YXRpc3RpY3MgdG8gYmUgY2FwdHVyZWQuIEVuYWJsaW5nXFxuICA2MDpcXHRcXHQgIHRoaXMgb3B0aW9uIG1heSBpbmNyZWFzZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uLlxcbiAgNjE6XFx0XFxuICA2MjpcXHRjb25maWcgT0NGUzJfREVCVUdfTUFTS0xPR1xcbiAgNjM6XFx0XFx0Ym9vbCBcXFwiT0NGUzIgbG9nZ2luZyBzdXBwb3J0XFxcIlxcbiAgNjQ6XFx0XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbiAgNjU6XFx0XFx0ZGVmYXVsdCB5XFxuICA2NjpcXHRcXHRoZWxwXFxuICA2NzpcXHRcXHQgIFRoZSBvY2ZzMiBmaWxlc3lzdGVtIGhhcyBhbiBleHRlbnNpdmUgbG9nZ2luZyBzeXN0ZW0uICBUaGUgc3lzdGVtXFxuICA2ODpcXHRcXHQgIGFsbG93cyBzZWxlY3Rpb24gb2YgZXZlbnRzIHRvIGxvZyB2aWEgZmlsZXMgaW4gL3N5cy9vMmNiL2xvZ21hc2svLlxcbiAgNjk6XFx0XFx0ICBUaGlzIG9wdGlvbiB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwsIGJ1dCBpdCBhbGxvd3MgZGVidWdnaW5nIG9mXFxuICA3MDpcXHRcXHQgIG9jZnMyIGZpbGVzeXN0ZW0gaXNzdWVzLlxcbiAgNzE6XFx0XFxuICA3MjpcXHRjb25maWcgT0NGUzJfREVCVUdfRlNcXG4gIDczOlxcdFxcdGJvb2wgXFxcIk9DRlMyIGV4cGVuc2l2ZSBjaGVja3NcXFwiXFxuICA3NDpcXHRcXHRkZXBlbmRzIG9uIE9DRlMyX0ZTXFxuICA3NTpcXHRcXHRkZWZhdWx0IG5cXG4gIDc2OlxcdFxcdGhlbHBcXG4gIDc3OlxcdFxcdCAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgZXhwZW5zaXZlIGNvbnNpc3RlbmN5IGNoZWNrcy4gRW5hYmxlXFxuICA3ODpcXHRcXHQgIHRoaXMgb3B0aW9uIGZvciBkZWJ1Z2dpbmcgb25seSBhcyBpdCBpcyBsaWtlbHkgdG8gZGVjcmVhc2VcXG4gIDc5OlxcdFxcdCAgcGVyZm9ybWFuY2Ugb2YgdGhlIGZpbGVzeXN0ZW0uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMxOjU3LjczODcwNTY2NloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODA2OTE3MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVjayBmb3IgT0NGUzIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgT0NGUzJfRlMgaXMgc2V0IHVwIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSXQgbG9va3MgbGlrZSBpdCBkaXJlY3RseSBkZXBlbmRzIG9uIElORVQsIFNZU0ZTLCBhbmQgQ09ORklHRlNfRlMuIEl0J3MgYWxzbyBzZWxlY3RpbmcgRlNfUE9TSVhfQUNMLCB3aGljaCBpcyBpbXBvcnRhbnQuIFRoaXMgbWVhbnMsIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgcHJvcGVybHkgZW5hYmxlZCwgSSByZWFsbHkgbmVlZCB0byB2ZXJpZnkgT0NGUzJfRlMsIElORVQsIFNZU0ZTLCBhbmQgQ09ORklHRlNfRlMgYXJlIGFsbCB0b2dnbGVkIG9uLlxuXG5XYWl0IGEgc2Vjb25kLCBJTkVUIGFuZCBTWVNGUyBhcmUgdXN1YWxseSBkZWZhdWx0IHNldHRpbmdzLCBzbyBJIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgdGhlbSB0b28gbXVjaCByaWdodCBub3cuIENPTkZJR0ZTX0ZTIG1pZ2h0IGJlIHRoZSBzdGlja2luZyBwb2ludCwgdGhvdWdoLiBTbywgbXkgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gdmVyaWZ5aW5nIE9DRlMyX0ZTIGFuZCBDT05GSUdGU19GUyBhcmUgZW5hYmxlZCB0byBlbnN1cmUgSSBoYXZlIGEgY29tcGxldGUgYW5kIGZ1bmN0aW9uYWwgT0NGUzIgc2V0dXAuXG5cbk5vdywgc2hpZnRpbmcgZ2VhcnMgdG8gY29yZSBmdW5jdGlvbmFsaXR5LCBJJ20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgYSBsaXN0IG9mIE9DRlMyIGZ1bmN0aW9ucy4gSSB3aWxsIGZvY3VzIG9uOiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBUaGVzZSBzZWVtIGNydWNpYWwgZm9yIGZpbGUgY3JlYXRpb24sIEFDTCBoYW5kbGluZywgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLlxuXG5MZXQncyBzZWUgaWYgYG9jZnMyX21rbm9kYCBpcyByZWFjaGFibGUuIEl0IHNob3VsZCBiZSwgc2luY2UgaXQncyBhIHN0YW5kYXJkIGlub2RlIG9wZXJhdGlvbi4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZSB0byBjaGVjayBteSBhc3N1bXB0aW9ucy4gVGhlbiwgSSBzZWUgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgaXMgY2FsbGVkIGZyb20gYG9jZnMyX3N5bWxpbmtgLiBMZXQncyBzZWUgaWYgYG9jZnMyX3N5bWxpbmtgIGlzIGNhbGxlZCBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYC4gSSB3aWxsIHZlcmlmeSBieSBjaGVja2luZyB0aGF0IHBhcnRpY3VsYXIgZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgwMSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjA0LjYxOTM5OTU1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODc0MzM3MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL3JlZmNvdW50dHJlZS5jPTQyMzg9c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5Ni1cXHRpZiAoIXByZXNlcnZlKSB7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI5NzpcXHRcXHRlcnJvciA9IG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbChkaXIsIG5ld19vcnBoYW5faW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI5OC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNm5ld19kZW50cnktXFx1MDAzZWRfbmFtZSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTcxODI9aW50IG9jZnMyX3JlZmxpbmtfeGF0dHJzKHN0cnVjdCBpbm9kZSAqb2xkX2lub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjYzLSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzI2NDppbnQgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL29jZnMyL3hhdHRyLmMtNzI2NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaD04Mz1pbnQgb2NmczJfcmVmbGlua194YXR0cnMoc3RydWN0IGlub2RlICpvbGRfaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oLTg3LVxcdFxcdFxcdCBib29sIHByZXNlcnZlX3NlY3VyaXR5KTtcXG5mcy9vY2ZzMi94YXR0ci5oOjg4OmludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIveGF0dHIuaC04OS1cXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjowNi42MDY4NDA2NTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0NDA2OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqT0NGUzIgU2VjdXJpdHkgQ29udGV4dCBEdXJpbmcgUmVmbGlua2luZyBhbmQgU3ltbGluayBDcmVhdGlvbioqXG5cblJpZ2h0LCBzbyBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYCBpcyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGBvY2ZzMl9yZWZsaW5rYCBwYXRoLiBNYWtlcyBzZW5zZTsgd2UgbmVlZCB0byBwcm9wYWdhdGUgc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgQUNMcyBkdXJpbmcgYSByZWZsaW5rIG9wZXJhdGlvbi4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gd2hhdCBhYm91dCBzeW1ib2xpYyBsaW5rcz8gQXJlIHNlY3VyaXR5IGNvbnRleHQgYW5kIEFDTHMgaGFuZGxlZCBjb25zaXN0ZW50bHkgZm9yICp0aG9zZSogdHlwZXMgb2YgbGlua3M/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBiZWhhdmlvciBpcyBjb25zaXN0ZW50LiBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBvY2ZzMl9zeW1saW5rYCBhbHNvIGNhbGxzIHRoZSBzZWN1cml0eSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBJIHNob3VsZCBiZSBhYmxlIHRvIGZpbmQgdGhhdCBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIEl0J3MgYSBrZXkgYXJlYSB0byBjaGVjayBmb3IgY29uc2lzdGVudCBiZWhhdmlvciBhbmQgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcyBpZiB0aGlzIHN0ZXAgaXMgbWlzc2luZyBvciBpbXByb3Blcmx5IGltcGxlbWVudGVkLiBNYWtpbmcgYSBtZW50YWwgbm90ZSB0byBjb25maXJtIGBvY2ZzMl9zeW1saW5rYCBjYWxscyB0aGUgc2VjdXJpdHkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgY3J1Y2lhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4ODgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjoxMS4xNTEyNTAwMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ4MDY1MTQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9zeW1saW5rXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FvcHMuYy00MS1cXG5mcy9vY2ZzMi9hb3BzLmM6NDI6c3RhdGljIGludCBvY2ZzMl9zeW1saW5rX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssXFxuZnMvb2NmczIvYW9wcy5jLTQzLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKVxcbi0tXFxuZnMvb2NmczIvYW9wcy5jLTUxLVxcbmZzL29jZnMyL2FvcHMuYzo1MjpcXHR0cmFjZV9vY2ZzMl9zeW1saW5rX2dldF9ibG9jayhcXG5mcy9vY2ZzMi9hb3BzLmMtNTMtXFx0XFx0XFx0KHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfYmxrbm8sXFxuLS1cXG5mcy9vY2ZzMi9hb3BzLmM9MTI5PWludCBvY2ZzMl9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLFxcbi0tXFxuZnMvb2NmczIvYW9wcy5jLTE0Ni1cXHRcXHQvKiB0aGlzIGFsd2F5cyBkb2VzIEkvTyBmb3Igc29tZSByZWFzb24uICovXFxuZnMvb2NmczIvYW9wcy5jOjE0NzpcXHRcXHRlcnIgPSBvY2ZzMl9zeW1saW5rX2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCBiaF9yZXN1bHQsIGNyZWF0ZSk7XFxuZnMvb2NmczIvYW9wcy5jLTE0OC1cXHRcXHRnb3RvIGJhaWw7XFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jPTM3Mj12b2lkIG9jZnMyX3BvcHVsYXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlLFxcbi0tXFxuZnMvb2NmczIvaW5vZGUuYy00NjktXFx0ICAgIGNhc2UgU19JRkxOSzpcXG5mcy9vY2ZzMi9pbm9kZS5jOjQ3MDpcXHRcXHQgICAgaW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2b2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL29jZnMyL2lub2RlLmMtNDcxLVxcdFxcdCAgICBpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0xNzE2PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX3N5bWxpbmtfZGF0YShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTgxMy1cXG5mcy9vY2ZzMi9uYW1laS5jOjE4MTQ6c3RhdGljIGludCBvY2ZzMl9zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL29jZnMyL25hbWVpLmMtMTgxNS1cXHRcXHRcXHQgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9uYW1laS5jLTE4NDMtXFxuZnMvb2NmczIvbmFtZWkuYzoxODQ0OlxcdHRyYWNlX29jZnMyX3N5bWxpbmtfYmVnaW4oZGlyLCBkZW50cnksIHN5bW5hbWUsXFxuZnMvb2NmczIvbmFtZWkuYy0xODQ1LVxcdFxcdFxcdFxcdCAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lKTtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk1MS1cXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTI6XFx0dHJhY2Vfb2NmczJfc3ltbGlua19jcmVhdGUoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbixcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTMtXFx0XFx0XFx0XFx0ICAgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk2Ny1cXHRuZXdzaXplID0gbCAtIDE7XFxuZnMvb2NmczIvbmFtZWkuYzoxOTY4OlxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucztcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NjktXFx0aW5vZGVfbm9oaWdobWVtKGlub2RlKTtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9MjkzMz1jb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBvY2ZzMl9kaXJfaW9wcyA9IHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjkzOC1cXHQucm1kaXJcXHRcXHQ9IG9jZnMyX3VubGluayxcXG5mcy9vY2ZzMi9uYW1laS5jOjI5Mzk6XFx0LnN5bWxpbmtcXHQ9IG9jZnMyX3N5bWxpbmssXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQwLVxcdC5ta2RpclxcdFxcdD0gb2NmczJfbWtkaXIsXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTExNDc9REVGSU5FX0VWRU5UKG9jZnMyX19nZXRfYmxvY2ssIG5hbWUsXFx0XFxcXFxcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xMTUxLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg6MTE1MjpERUZJTkVfT0NGUzJfR0VUX0JMT0NLX0VWRU5UKG9jZnMyX3N5bWxpbmtfZ2V0X2Jsb2NrKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTExNTMtXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIxOTE9REVGSU5FX09DRlMyX0RFTlRSWV9PUFMob2NmczJfdW5saW5rKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTItXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTkzOkRFRklORV9PQ0ZTMl9ERU5UUllfT1BTKG9jZnMyX3N5bWxpbmtfY3JlYXRlKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTQtXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oPTIzMjU9REVGSU5FX09DRlMyX1VMTF9VTExfVUlOVF9FVkVOVChvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIzMjYtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMzI3OlRSQUNFX0VWRU5UKG9jZnMyX3N5bWxpbmtfYmVnaW4sXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0yMzI4LVxcdFRQX1BST1RPKHZvaWQgKmRpciwgdm9pZCAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1uYW1lLFxcbi0tXFxuZnMvb2NmczIvc3ltbGluay5jPTgwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgb2NmczJfZmFzdF9zeW1saW5rX2FvcHMgPSB7XFxuLS1cXG5mcy9vY2ZzMi9zeW1saW5rLmMtODMtXFxuZnMvb2NmczIvc3ltbGluay5jOjg0OmNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9vY2ZzMi9zeW1saW5rLmMtODUtXFx0LmdldF9saW5rXFx0PSBwYWdlX2dldF9saW5rLFxcbi0tXFxuZnMvb2NmczIvc3ltbGluay5oLTEyLVxcbmZzL29jZnMyL3N5bWxpbmsuaDoxMzpleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgb2NmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL29jZnMyL3N5bWxpbmsuaC0xNC1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBvY2ZzMl9mYXN0X3N5bWxpbmtfYW9wcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MTMuNjMxOTA5NzM4WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NTY0MzIzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgb2NmczJfc3ltbGlua2AgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBtZW50aW9uIG9mIGBmcy9vY2ZzMi9uYW1laS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxpbmUgMTgxNCB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCB0aGUgYG9jZnMyX3N5bWxpbmtgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBjb2RlLiBUaGF0J3Mgd2hlcmUgc3ltYm9saWMgbGluayBjcmVhdGlvbiBpcyBoYW5kbGVkLCBzbyBpdCBtYWtlcyBzZW5zZSB3ZSdkIGJlIGRpZ2dpbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBsaW5lLCBhbmQgaWRlYWxseSwgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0IGNvdWxkIGJlIGEgc3BlY2lmaWMgYnVnLCBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIG9yIGV2ZW4ganVzdCBzb21lIGludGVyZXN0aW5nIGNvZGUgZmxvdyB0byBleGFtaW5lLiBMZXQncyBzZWUgd2hhdCB0aGF0IGxpbmUgaXMgZG9pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEknbGwgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtYXAgb2YgaG93IHN5bWxpbmtzIGFyZSBoYW5kbGVkIGluIE9DRlMyOiB0aGUgaW5vZGUgYWxsb2NhdGlvbiwgdGhlIGRhdGEgYmxvY2sgYWxsb2NhdGlvbiwgdGhlIGZvcm1hdCBvZiB0aGUgbGluaydzIGNvbnRlbnQuLi4gdGhhdCBjb250ZXh0IHdpbGwgYmUga2V5IHRvIHByb3Blcmx5IHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uIG9mIHRoYXQgcGFydGljdWxhciBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjcwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjE3LjQ4ODM0NDY0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA0ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvbmFtZWkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODE0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTgxNDpcXHRzdGF0aWMgaW50IG9jZnMyX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuMTgxNTpcXHRcXHRcXHRcXHQgc3RydWN0IGlub2RlICpkaXIsXFxuMTgxNjpcXHRcXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbjE4MTc6XFx0XFx0XFx0XFx0IGNvbnN0IGNoYXIgKnN5bW5hbWUpXFxuMTgxODpcXHR7XFxuMTgxOTpcXHRcXHRpbnQgc3RhdHVzLCBsLCBjcmVkaXRzO1xcbjE4MjA6XFx0XFx0dTY0IG5ld3NpemU7XFxuMTgyMTpcXHRcXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE5VTEw7XFxuMTgyMjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDtcXG4xODIzOlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMTgyNDpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19mZV9iaCA9IE5VTEw7XFxuMTgyNTpcXHRcXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudF9mZV9iaCA9IE5VTEw7XFxuMTgyNjpcXHRcXHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSA9IE5VTEw7XFxuMTgyNzpcXHRcXHRzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaXJmZTtcXG4xODI4OlxcdFxcdGhhbmRsZV90ICpoYW5kbGUgPSBOVUxMO1xcbjE4Mjk6XFx0XFx0c3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmlub2RlX2FjID0gTlVMTDtcXG4xODMwOlxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjID0gTlVMTDtcXG4xODMxOlxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICp4YXR0cl9hYyA9IE5VTEw7XFxuMTgzMjpcXHRcXHRpbnQgd2FudF9jbHVzdGVycyA9IDA7XFxuMTgzMzpcXHRcXHRpbnQgeGF0dHJfY3JlZGl0cyA9IDA7XFxuMTgzNDpcXHRcXHRzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyBzaSA9IHtcXG4xODM1OlxcdFxcdFxcdC5uYW1lID0gTlVMTCxcXG4xODM2OlxcdFxcdFxcdC5lbmFibGUgPSAxLFxcbjE4Mzc6XFx0XFx0fTtcXG4xODM4OlxcdFxcdGludCBkaWRfcXVvdGEgPSAwLCBkaWRfcXVvdGFfaW5vZGUgPSAwO1xcbjE4Mzk6XFx0XFx0c3RydWN0IG9jZnMyX2Rpcl9sb29rdXBfcmVzdWx0IGxvb2t1cCA9IHsgTlVMTCwgfTtcXG4xODQwOlxcdFxcdHNpZ3NldF90IG9sZHNldDtcXG4xODQxOlxcdFxcdGludCBkaWRfYmxvY2tfc2lnbmFscyA9IDA7XFxuMTg0MjpcXHRcXHRzdHJ1Y3Qgb2NmczJfZGVudHJ5X2xvY2sgKmRsID0gTlVMTDtcXG4xODQzOlxcdFxcbjE4NDQ6XFx0XFx0dHJhY2Vfb2NmczJfc3ltbGlua19iZWdpbihkaXIsIGRlbnRyeSwgc3ltbmFtZSxcXG4xODQ1OlxcdFxcdFxcdFxcdFxcdCAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lKTtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0c3RhdHVzID0gZHF1b3RfaW5pdGlhbGl6ZShkaXIpO1xcbjE4NDg6XFx0XFx0aWYgKHN0YXR1cykge1xcbjE4NDk6XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE4NTA6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE4NTE6XFx0XFx0fVxcbjE4NTI6XFx0XFxuMTg1MzpcXHRcXHRzYiA9IGRpci1cXHUwMDNlaV9zYjtcXG4xODU0OlxcdFxcdG9zYiA9IE9DRlMyX1NCKHNiKTtcXG4xODU1OlxcdFxcbjE4NTY6XFx0XFx0bCA9IHN0cmxlbihzeW1uYW1lKSArIDE7XFxuMTg1NzpcXHRcXG4xODU4OlxcdFxcdGNyZWRpdHMgPSBvY2ZzMl9jYWxjX3N5bWxpbmtfY3JlZGl0cyhzYik7XFxuMTg1OTpcXHRcXG4xODYwOlxcdFxcdC8qIGxvY2sgdGhlIHBhcmVudCBkaXJlY3RvcnkgKi9cXG4xODYxOlxcdFxcdHN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcXHUwMDI2cGFyZW50X2ZlX2JoLCAxKTtcXG4xODYyOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuMTg2MzpcXHRcXHRcXHRpZiAoc3RhdHVzICE9IC1FTk9FTlQpXFxuMTg2NDpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuMTg2NTpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbjE4NjY6XFx0XFx0fVxcbjE4Njc6XFx0XFxuMTg2ODpcXHRcXHRkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC1cXHUwMDNlYl9kYXRhO1xcbjE4Njk6XFx0XFx0aWYgKCFvY2ZzMl9yZWFkX2xpbmtzX2NvdW50KGRpcmZlKSkge1xcbjE4NzA6XFx0XFx0XFx0LyogY2FuJ3QgbWFrZSBhIGZpbGUgaW4gYSBkZWxldGVkIGRpcmVjdG9yeS4gKi9cXG4xODcxOlxcdFxcdFxcdHN0YXR1cyA9IC1FTk9FTlQ7XFxuMTg3MjpcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTg3MzpcXHRcXHR9XFxuMTg3NDpcXHRcXG4xODc1OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2NoZWNrX2Rpcl9mb3JfZW50cnkoZGlyLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbjE4NzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuKTtcXG4xODc3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTg3ODpcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTg3OTpcXHRcXG4xODgwOlxcdFxcdHN0YXR1cyA9IG9jZnMyX3ByZXBhcmVfZGlyX2Zvcl9pbnNlcnQob3NiLCBkaXIsIHBhcmVudF9mZV9iaCxcXG4xODgxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuMTg4MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4sIFxcdTAwMjZsb29rdXApO1xcbjE4ODM6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4xODg0OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xODg1OlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xODg2OlxcdFxcdH1cXG4xODg3OlxcdFxcbjE4ODg6XFx0XFx0c3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9uZXdfaW5vZGUob3NiLCBcXHUwMDI2aW5vZGVfYWMpO1xcbjE4ODk6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4xODkwOlxcdFxcdFxcdGlmIChzdGF0dXMgIT0gLUVOT1NQQylcXG4xODkxOlxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xODkyOlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xODkzOlxcdFxcdH1cXG4xODk0OlxcdFxcbjE4OTU6XFx0XFx0aW5vZGUgPSBvY2ZzMl9nZXRfaW5pdF9pbm9kZShkaXIsIFNfSUZMTksgfCBTX0lSV1hVR08pO1xcbjE4OTY6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4xODk3OlxcdFxcdFxcdHN0YXR1cyA9IFBUUl9FUlIoaW5vZGUpO1xcbjE4OTg6XFx0XFx0XFx0aW5vZGUgPSBOVUxMO1xcbjE4OTk6XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE5MDA6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5MDE6XFx0XFx0fVxcbjE5MDI6XFx0XFxuMTkwMzpcXHRcXHQvKiBnZXQgc2VjdXJpdHkgeGF0dHIgKi9cXG4xOTA0OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNnNpKTtcXG4xOTA1OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4xOTA2OlxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLUVPUE5PVFNVUFApXFxuMTkwNzpcXHRcXHRcXHRcXHRzaS5lbmFibGUgPSAwO1xcbjE5MDg6XFx0XFx0XFx0ZWxzZSB7XFxuMTkwOTpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuMTkxMDpcXHRcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTkxMTpcXHRcXHRcXHR9XFxuMTkxMjpcXHRcXHR9XFxuMTkxMzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MTcuNDg4NTE3MzY0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzYxODE1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gdGhlIE9DRlMyIFN5bWxpbmsgQ3JlYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHdhcyBsb29raW5nIGF0IGhvdyBPQ0ZTMiBoYW5kbGVzIHN5bWxpbmsgY3JlYXRpb24sIHNwZWNpZmljYWxseSwgdGhlIGludGVyYWN0aW9uIHdpdGggc2VjdXJpdHkgYXR0cmlidXRlcyBhbmQgQUNMcy4gSSB0aG91Z2h0IGBvY2ZzMl9zeW1saW5rYCBkaXJlY3RseSBjYWxsZWQgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAsIGJ1dCB1cG9uIGNsb3NlciBpbnNwZWN0aW9uLCBJIHNlZSBpdCBkb2Vzbid0LiBJbnN0ZWFkLCBpdCBzZWVtcyB0byBnbyB0aHJvdWdoIGEgY291cGxlIG9mIGludGVybWVkaWF0ZSBjYWxsczogZmlyc3QgYG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0YCwgYW5kIHRoZW4gaXQgbGVhZHMgdG8gYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuICBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBOb3cgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoYXQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgZG9pbmcsIHNvIEknbGwgY2hlY2sgaXQncyBpbXBsZW1lbnRhdGlvbiBpbiBgZnMvb2NmczIvbmFtZWkuY2AuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxMywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MjIuNDI0NzAyMTAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi9uYW1laS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MTQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTE0OlxcdFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgeGF0dHIgKi9cXG4xOTE1OlxcdFxcdGlmIChzaS5lbmFibGUpIHtcXG4xOTE2OlxcdFxcdFxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChkaXIsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuMTkxNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2eGF0dHJfYWMpO1xcbjE5MTg6XFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4xOTE5OlxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xOTIwOlxcdFxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xOTIxOlxcdFxcdFxcdH1cXG4xOTIyOlxcdFxcdH1cXG4xOTIzOlxcdFxcbjE5MjQ6XFx0XFx0LyogZG9uJ3QgcmVzZXJ2ZSBiaXRtYXAgc3BhY2UgZm9yIGZhc3Qgc3ltbGlua3MuICovXFxuMTkyNTpcXHRcXHRpZiAobCBcXHUwMDNlIG9jZnMyX2Zhc3Rfc3ltbGlua19jaGFycyhzYikpXFxuMTkyNjpcXHRcXHRcXHR3YW50X2NsdXN0ZXJzICs9IDE7XFxuMTkyNzpcXHRcXG4xOTI4OlxcdFxcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfY2x1c3RlcnMob3NiLCB3YW50X2NsdXN0ZXJzLCBcXHUwMDI2ZGF0YV9hYyk7XFxuMTkyOTpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbjE5MzA6XFx0XFx0XFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDKVxcbjE5MzE6XFx0XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE5MzI6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5MzM6XFx0XFx0fVxcbjE5MzQ6XFx0XFxuMTkzNTpcXHRcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIGNyZWRpdHMgKyB4YXR0cl9jcmVkaXRzKTtcXG4xOTM2OlxcdFxcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcbjE5Mzc6XFx0XFx0XFx0c3RhdHVzID0gUFRSX0VSUihoYW5kbGUpO1xcbjE5Mzg6XFx0XFx0XFx0aGFuZGxlID0gTlVMTDtcXG4xOTM5OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xOTQwOlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4xOTQxOlxcdFxcdH1cXG4xOTQyOlxcdFxcbjE5NDM6XFx0XFx0LyogU3RhcnRpbmcgdG8gY2hhbmdlIHRoaW5ncywgcmVzdGFydCBpcyBubyBsb25nZXIgcG9zc2libGUuICovXFxuMTk0NDpcXHRcXHRvY2ZzMl9ibG9ja19zaWduYWxzKFxcdTAwMjZvbGRzZXQpO1xcbjE5NDU6XFx0XFx0ZGlkX2Jsb2NrX3NpZ25hbHMgPSAxO1xcbjE5NDY6XFx0XFxuMTk0NzpcXHRcXHRzdGF0dXMgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7XFxuMTk0ODpcXHRcXHRpZiAoc3RhdHVzKVxcbjE5NDk6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5NTA6XFx0XFx0ZGlkX3F1b3RhX2lub2RlID0gMTtcXG4xOTUxOlxcdFxcbjE5NTI6XFx0XFx0dHJhY2Vfb2NmczJfc3ltbGlua19jcmVhdGUoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbixcXG4xOTUzOlxcdFxcdFxcdFxcdFxcdCAgIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuMTk1NDpcXHRcXHRcXHRcXHRcXHQgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuMTk1NTpcXHRcXHRcXHRcXHRcXHQgICBpbm9kZS1cXHUwMDNlaV9tb2RlKTtcXG4xOTU2OlxcdFxcbjE5NTc6XFx0XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcXG4xOTU4OlxcdFxcdFxcdFxcdFxcdCAgICAwLCBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4xOTU5OlxcdFxcdFxcdFxcdFxcdCAgICBpbm9kZV9hYyk7XFxuMTk2MDpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbjE5NjE6XFx0XFx0XFx0bWxvZ19lcnJubyhzdGF0dXMpO1xcbjE5NjI6XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5NjM6XFx0XFx0fVxcbjE5NjQ6XFx0XFxuMTk2NTpcXHRcXHRmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIG5ld19mZV9iaC1cXHUwMDNlYl9kYXRhO1xcbjE5NjY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfcmRldiA9IDA7XFxuMTk2NzpcXHRcXHRuZXdzaXplID0gbCAtIDE7XFxuMTk2ODpcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZvY2ZzMl9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7XFxuMTk2OTpcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbjE5NzA6XFx0XFx0aWYgKGwgXFx1MDAzZSBvY2ZzMl9mYXN0X3N5bWxpbmtfY2hhcnMoc2IpKSB7XFxuMTk3MTpcXHRcXHRcXHR1MzIgb2Zmc2V0ID0gMDtcXG4xOTcyOlxcdFxcbjE5NzM6XFx0XFx0XFx0c3RhdHVzID0gZHF1b3RfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSxcXG4xOTc0OlxcdFxcdFxcdCAgICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItXFx1MDAzZXNiLCAxKSk7XFxuMTk3NTpcXHRcXHRcXHRpZiAoc3RhdHVzKVxcbjE5NzY6XFx0XFx0XFx0XFx0Z290byBiYWlsO1xcbjE5Nzc6XFx0XFx0XFx0ZGlkX3F1b3RhID0gMTtcXG4xOTc4OlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNm9jZnMyX2FvcHM7XFxuMTk3OTpcXHRcXHRcXHRzdGF0dXMgPSBvY2ZzMl9hZGRfaW5vZGVfZGF0YShvc2IsIGlub2RlLCBcXHUwMDI2b2Zmc2V0LCAxLCAwLFxcbjE5ODA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmV3X2ZlX2JoLFxcbjE5ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaGFuZGxlLCBkYXRhX2FjLCBOVUxMLFxcbjE5ODI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgTlVMTCk7XFxuMTk4MzpcXHRcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMCkge1xcbjE5ODQ6XFx0XFx0XFx0XFx0aWYgKHN0YXR1cyAhPSAtRU5PU1BDIFxcdTAwMjZcXHUwMDI2IHN0YXR1cyAhPSAtRUlOVFIpIHtcXG4xOTg1OlxcdFxcdFxcdFxcdFxcdG1sb2coTUxfRVJST1IsXFxuMTk4NjpcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJGYWlsZWQgdG8gZXh0ZW5kIGZpbGUgdG8gJWxsdVxcXFxuXFxcIixcXG4xOTg3OlxcdFxcdFxcdFxcdFxcdCAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdzaXplKTtcXG4xOTg4OlxcdFxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4xOTg5OlxcdFxcdFxcdFxcdFxcdHN0YXR1cyA9IC1FTk9TUEM7XFxuMTk5MDpcXHRcXHRcXHRcXHR9XFxuMTk5MTpcXHRcXHRcXHRcXHRnb3RvIGJhaWw7XFxuMTk5MjpcXHRcXHRcXHR9XFxuMTk5MzpcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpO1xcbjE5OTQ6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gb2NmczJfaW5vZGVfc2VjdG9yX2NvdW50KGlub2RlKTtcXG4xOTk1OlxcdFxcdH0gZWxzZSB7XFxuMTk5NjpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZvY2ZzMl9mYXN0X3N5bWxpbmtfYW9wcztcXG4xOTk3OlxcdFxcdFxcdG1lbWNweSgoY2hhciAqKSBmZS1cXHUwMDNlaWQyLmlfc3ltbGluaywgc3ltbmFtZSwgbCk7XFxuMTk5ODpcXHRcXHRcXHRpX3NpemVfd3JpdGUoaW5vZGUsIG5ld3NpemUpO1xcbjE5OTk6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfYmxvY2tzID0gMDtcXG4yMDAwOlxcdFxcdH1cXG4yMDAxOlxcdFxcbjIwMDI6XFx0XFx0c3RhdHVzID0gb2NmczJfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlLCBuZXdfZmVfYmgpO1xcbjIwMDM6XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4yMDA0OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4yMDA1OlxcdFxcdFxcdGdvdG8gYmFpbDtcXG4yMDA2OlxcdFxcdH1cXG4yMDA3OlxcdFxcbjIwMDg6XFx0XFx0aWYgKCFvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSB7XFxuMjAwOTpcXHRcXHRcXHRzdGF0dXMgPSBvY2ZzMl9jcmVhdGVfc3ltbGlua19kYXRhKG9zYiwgaGFuZGxlLCBpbm9kZSxcXG4yMDEwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIHN5bW5hbWUpO1xcbjIwMTE6XFx0XFx0XFx0aWYgKHN0YXR1cyBcXHUwMDNjIDApIHtcXG4yMDEyOlxcdFxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4yMDEzOlxcdFxcdFxcdFxcdGdvdG8gYmFpbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6MjIuNDI0OTI0MTYxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjE5Mjg0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGNvZGU6XG5cbioqRGl2aW5nIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBzeW1saW5rIGNyZWF0aW9uIHBhdGgsIHNwZWNpZmljYWxseSBgb2NmczJfc3ltbGlua2AsIHdvdWxkIGFsc28gdHJpZ2dlciB0aGUgeGF0dHIgYW5kIEFDTCBpbml0aWFsaXphdGlvbiwgYnV0IGl0IHNlZW1zIHRoYXQncyBub3QgdGhlIGNhc2UuIE15IG1lbnRhbCBtb2RlbCBtdXN0IGJlIHdyb25nIHRoZXJlLiBJIGtub3cgYG9jZnMyX21rbm9kYCAqZG9lcyogcGVyZm9ybSB0aGlzIGluaXRpYWxpemF0aW9uLlxuXG5SaWdodCwgc28gdG8gY29uZmlybSB0aGlzIGRpc2NyZXBhbmN5LCBJIG5lZWQgdG8gdmVyaWZ5IGhvdyB0aGluZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIExldCdzIHRyYWNlIHRocm91Z2ggYG9jZnMyX21rbm9kYCwgd2hpY2ggaXMgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY2FsbHMuIFRoZSBjb2RlIGluIGBmcy9vY2ZzMi9uYW1laS5jYCBzaG91bGQgaG9sZCB0aGUgYW5zd2VyLiBJJ2xsIHRha2UgYSBsb29rIGF0IGl0IHRvIHNlZSBpZiBgb2NmczJfY2FsY194YXR0cl9pbml0YCBvciBgb2NmczJfaW5pdF9hY2xgIGFyZSBjYWxsZWQuIFRoaXMgd2lsbCBjbGVhciB0aGluZ3MgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDIxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjoyNi4wODY4NTcwMzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL29jZnMyL25hbWVpLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU2LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1NjpcXHRcXHRzaWdzZXRfdCBvbGRzZXQ7XFxuIDI1NzpcXHRcXHRpbnQgZGlkX2Jsb2NrX3NpZ25hbHMgPSAwO1xcbiAyNTg6XFx0XFx0c3RydWN0IG9jZnMyX2RlbnRyeV9sb2NrICpkbCA9IE5VTEw7XFxuIDI1OTpcXHRcXHRzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlIGFjbF9zdGF0ZSA9IHsgMCB9O1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHR0cmFjZV9vY2ZzMl9ta25vZChkaXIsIGRlbnRyeSwgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiAyNjI6XFx0XFx0XFx0XFx0ICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS1cXHUwMDNlaXBfYmxrbm8sXFxuIDI2MzpcXHRcXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nKWRldiwgbW9kZSk7XFxuIDI2NDpcXHRcXG4gMjY1OlxcdFxcdHN0YXR1cyA9IGRxdW90X2luaXRpYWxpemUoZGlyKTtcXG4gMjY2OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4gMjY3OlxcdFxcdFxcdG1sb2dfZXJybm8oc3RhdHVzKTtcXG4gMjY4OlxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDI2OTpcXHRcXHR9XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdC8qIGdldCBvdXIgc3VwZXIgYmxvY2sgKi9cXG4gMjcyOlxcdFxcdG9zYiA9IE9DRlMyX1NCKGRpci1cXHUwMDNlaV9zYik7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2lub2RlX2xvY2soZGlyLCBcXHUwMDI2cGFyZW50X2ZlX2JoLCAxKTtcXG4gMjc1OlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDI3NjpcXHRcXHRcXHRpZiAoc3RhdHVzICE9IC1FTk9FTlQpXFxuIDI3NzpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDI3ODpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiAyNzk6XFx0XFx0fVxcbiAyODA6XFx0XFxuIDI4MTpcXHRcXHRpZiAoU19JU0RJUihtb2RlKSBcXHUwMDI2XFx1MDAyNiAoZGlyLVxcdTAwM2VpX25saW5rIFxcdTAwM2U9IG9jZnMyX2xpbmtfbWF4KG9zYikpKSB7XFxuIDI4MjpcXHRcXHRcXHRzdGF0dXMgPSAtRU1MSU5LO1xcbiAyODM6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG4gMjg0OlxcdFxcdH1cXG4gMjg1OlxcdFxcbiAyODY6XFx0XFx0ZGlyZmUgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKSBwYXJlbnRfZmVfYmgtXFx1MDAzZWJfZGF0YTtcXG4gMjg3OlxcdFxcdGlmICghb2NmczJfcmVhZF9saW5rc19jb3VudChkaXJmZSkpIHtcXG4gMjg4OlxcdFxcdFxcdC8qIGNhbid0IG1ha2UgYSBmaWxlIGluIGEgZGVsZXRlZCBkaXJlY3RvcnkuICovXFxuIDI4OTpcXHRcXHRcXHRzdGF0dXMgPSAtRU5PRU5UO1xcbiAyOTA6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG4gMjkxOlxcdFxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0c3RhdHVzID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS1cXHUwMDNlZF9uYW1lLm5hbWUsXFxuIDI5NDpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZW50cnktXFx1MDAzZWRfbmFtZS5sZW4pO1xcbiAyOTU6XFx0XFx0aWYgKHN0YXR1cylcXG4gMjk2OlxcdFxcdFxcdGdvdG8gbGVhdmU7XFxuIDI5NzpcXHRcXG4gMjk4OlxcdFxcdC8qIGdldCBhIHNwb3QgaW5zaWRlIHRoZSBkaXIuICovXFxuIDI5OTpcXHRcXHRzdGF0dXMgPSBvY2ZzMl9wcmVwYXJlX2Rpcl9mb3JfaW5zZXJ0KG9zYiwgZGlyLCBwYXJlbnRfZmVfYmgsXFxuIDMwMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBkZW50cnktXFx1MDAzZWRfbmFtZS5uYW1lLFxcbiAzMDE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZGVudHJ5LVxcdTAwM2VkX25hbWUubGVuLCBcXHUwMDI2bG9va3VwKTtcXG4gMzAyOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDMwMzpcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMwNDpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMDU6XFx0XFx0fVxcbiAzMDY6XFx0XFxuIDMwNzpcXHRcXHQvKiByZXNlcnZlIGFuIGlub2RlIHNwb3QgKi9cXG4gMzA4OlxcdFxcdHN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfbmV3X2lub2RlKG9zYiwgXFx1MDAyNmlub2RlX2FjKTtcXG4gMzA5OlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDMxMDpcXHRcXHRcXHRpZiAoc3RhdHVzICE9IC1FTk9TUEMpXFxuIDMxMTpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMxMjpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMTM6XFx0XFx0fVxcbiAzMTQ6XFx0XFxuIDMxNTpcXHRcXHRpbm9kZSA9IG9jZnMyX2dldF9pbml0X2lub2RlKGRpciwgbW9kZSk7XFxuIDMxNjpcXHRcXHRpZiAoSVNfRVJSKGlub2RlKSkge1xcbiAzMTc6XFx0XFx0XFx0c3RhdHVzID0gUFRSX0VSUihpbm9kZSk7XFxuIDMxODpcXHRcXHRcXHRpbm9kZSA9IE5VTEw7XFxuIDMxOTpcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMyMDpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMjE6XFx0XFx0fVxcbiAzMjI6XFx0XFxuIDMyMzpcXHRcXHQvKiBnZXQgc2VjdXJpdHkgeGF0dHIgKi9cXG4gMzI0OlxcdFxcdHN0YXR1cyA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbmFtZSwgXFx1MDAyNnNpKTtcXG4gMzI1OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4gMzI2OlxcdFxcdFxcdGlmIChzdGF0dXMgPT0gLUVPUE5PVFNVUFApXFxuIDMyNzpcXHRcXHRcXHRcXHRzaS5lbmFibGUgPSAwO1xcbiAzMjg6XFx0XFx0XFx0ZWxzZSB7XFxuIDMyOTpcXHRcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDMzMDpcXHRcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzMzE6XFx0XFx0XFx0fVxcbiAzMzI6XFx0XFx0fVxcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRzdGF0dXMgPSBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlKGlub2RlLCBkaXIsIHBhcmVudF9mZV9iaCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuIDMzNTpcXHRcXHRpZiAoc3RhdHVzIFxcdTAwM2MgMClcXG4gMzM2OlxcdFxcdFxcdGdvdG8gbGVhdmU7XFxuIDMzNzpcXHRcXG4gMzM4OlxcdFxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbiAzMzk6XFx0XFx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXFx1MDAyNnNpLCBcXHUwMDI2d2FudF9jbHVzdGVycyxcXG4gMzQwOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2eGF0dHJfY3JlZGl0cywgXFx1MDAyNndhbnRfbWV0YSxcXG4gMzQxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YWNsX3N0YXRlKTtcXG4gMzQyOlxcdFxcdGlmIChzdGF0dXMgXFx1MDAzYyAwKSB7XFxuIDM0MzpcXHRcXHRcXHRtbG9nX2Vycm5vKHN0YXR1cyk7XFxuIDM0NDpcXHRcXHRcXHRnb3RvIGxlYXZlO1xcbiAzNDU6XFx0XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHQvKiBSZXNlcnZlIGEgY2x1c3RlciBpZiBjcmVhdGluZyBhbiBleHRlbnQgYmFzZWQgZGlyZWN0b3J5LiAqL1xcbiAzNDg6XFx0XFx0aWYgKFNfSVNESVIobW9kZSkgXFx1MDAyNlxcdTAwMjYgIW9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHtcXG4gMzQ5OlxcdFxcdFxcdHdhbnRfY2x1c3RlcnMgKz0gMTtcXG4gMzUwOlxcdFxcbiAzNTE6XFx0XFx0XFx0LyogRGlyIGluZGV4aW5nIHJlcXVpcmVzIGV4dHJhIHNwYWNlIGFzIHdlbGwgKi9cXG4gMzUyOlxcdFxcdFxcdGlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSlcXG4gMzUzOlxcdFxcdFxcdFxcdHdhbnRfbWV0YSsrO1xcbiAzNTQ6XFx0XFx0fVxcbiAzNTU6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjI2LjA4NzE3Nzk0OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODUxODM3NDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT0NGUzIgRmlsZXN5c3RlbSBDcmVhdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgT0NGUzIgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgbmV3IGZpbGUgc3lzdGVtIG9iamVjdHMuIEkgc2VlIHRoYXQgdGhlIGBvY2ZzMl9ta25vZGAgZnVuY3Rpb24gaXMgY2VudHJhbCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIHRoZSBwcmltYXJ5IHdvcmtob3JzZSwgYW5kIGl0IGNhbGxzIGBvY2ZzMl9hY2xfaW5pdF9wcmVwYXJlYCBhbmQgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIFNlZW1zIGxvZ2ljYWw7IHNldHRpbmcgdXAgQUNMcyBhbmQgaW5pdGlhbGl6aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIGltcG9ydGFudCBzdGVwcyBkdXJpbmcgb2JqZWN0IGNyZWF0aW9uLlxuXG5CdXQgaG9sZCBvbi4uLiBgb2NmczJfbWtub2RgIGlzIHVzZWQgZm9yIG1vcmUgdGhhbiBqdXN0IHNpbXBsZSBmaWxlcy4gSXQgY3JlYXRlcyBkZXZpY2VzLCB0b28uIE5vdywgSSdtIGdldHRpbmcgYSBodW5jaCB0aGF0IGl04oCZcyBtb3JlIHdpZGVseSB1c2VkIHRoYW4gSSBpbml0aWFsbHkgYXNzdW1lZC4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBob3cgb3RoZXIgY3JlYXRpb24gZnVuY3Rpb25zIG1pZ2h0IHJlbGF0ZS5cblxuQWhhISBOb3cgSSdtIHdvbmRlcmluZyBpZiBgb2NmczJfbWtkaXJgIGFuZCBgb2NmczJfY3JlYXRlYCBhcmUgYWN0dWFsbHkgbGV2ZXJhZ2luZyBgb2NmczJfbWtub2RgIHVuZGVyIHRoZSBob29kLiBJdCB3b3VsZCBtYWtlIHNlbnNlIHRvIGNvbnNvbGlkYXRlIHRoZSBjb3JlIGNyZWF0aW9uIGxvZ2ljLiBJIG5lZWQgdG8gY29uZmlybSB0aGlzLiBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGNvZGUgZm9yIGBvY2ZzMl9jcmVhdGVgIGFuZCBgb2NmczJfbWtkaXJgIGRpcmVjdGx5IGFuZCB2ZXJpZnkgdGhpcyByZWxhdGlvbnNoaXAuIFRoYXQncyB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI0MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjMyLjkzOTAxODg0NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk2NzY3MTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9ta25vZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzQ4LSAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxcbmZzL29jZnMyL2FjbC5jOjM0OTogKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXFxuZnMvb2NmczIvYWNsLmMtMzUwLSAqL1xcbi0tXFxuZnMvb2NmczIvZGlyLmM9MjIxMj1zdGF0aWMgc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqb2NmczJfZmlsbF9pbml0aWFsX2RpcmVudHMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2Rpci5jLTIyMzYtLypcXG5mcy9vY2ZzMi9kaXIuYzoyMjM3OiAqIFRoaXMgd29ya3MgdG9nZXRoZXIgd2l0aCBjb2RlIGluIG9jZnMyX21rbm9kX2xvY2tlZCgpIHdoaWNoIHNldHNcXG5mcy9vY2ZzMi9kaXIuYy0yMjM4LSAqIHRoZSBpbmxpbmUtZGF0YSBmbGFnIGFuZCBpbml0aWFsaXplcyB0aGUgaW5saW5lLWRhdGEgc2VjdGlvbi5cXG4tLVxcbmZzL29jZnMyL2lub2RlLmM9MzcyPXZvaWQgb2NmczJfcG9wdWxhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmUsXFxuLS1cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4Ny1cXHQgKiBUaGVzZSBoYXZlIGFsbCBiZWVuIGNoZWNrZWQgYnkgb2NmczJfcmVhZF9pbm9kZV9ibG9jaygpIG9yIHNldFxcbmZzL29jZnMyL2lub2RlLmM6Mzg4OlxcdCAqIGJ5IG9jZnMyX21rbm9kX2xvY2tlZCgpLCBzbyBhIGZhaWx1cmUgaXMgYSBjb2RlIGJ1Zy5cXG5mcy9vY2ZzMi9pbm9kZS5jLTM4OS1cXHQgKi9cXG4tLVxcbmZzL29jZnMyL2pvdXJuYWwuaD00MTM9c3RhdGljIGlubGluZSBpbnQgb2NmczJfYWRkX2Rpcl9pbmRleF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmgtNDIzLSAqIGJsb2NrcyArIHF1b3RhIHVwZGF0ZSAqL1xcbmZzL29jZnMyL2pvdXJuYWwuaDo0MjQ6c3RhdGljIGlubGluZSBpbnQgb2NmczJfbWtub2RfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgaXNfZGlyLFxcbmZzL29jZnMyL2pvdXJuYWwuaC00MjUtXFx0XFx0XFx0XFx0ICAgICAgaW50IHhhdHRyX2NyZWRpdHMpXFxuLS1cXG5mcy9vY2ZzMi9qb3VybmFsLmg9NTQ5PXN0YXRpYyBpbmxpbmUgaW50IG9jZnMyX2NhbGNfc3ltbGlua19jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuZnMvb2NmczIvam91cm5hbC5oLTU1MC17XFxuZnMvb2NmczIvam91cm5hbC5oOjU1MTpcXHRpbnQgYmxvY2tzID0gb2NmczJfbWtub2RfY3JlZGl0cyhzYiwgMCwgMCk7XFxuZnMvb2NmczIvam91cm5hbC5oLTU1Mi1cXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTUtXFxuZnMvb2NmczIvbmFtZWkuYzo1NjpzdGF0aWMgaW50IG9jZnMyX21rbm9kX2xvY2tlZChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi9uYW1laS5jLTU3LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yMTU9c3RhdGljIHZvaWQgb2NmczJfY2xlYW51cF9hZGRfZW50cnlfZmFpbHVyZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjI5LVxcbmZzL29jZnMyL25hbWVpLmM6MjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvb2NmczIvbmFtZWkuYy0yMzEtXFx0XFx0ICAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNjAtXFxuZnMvb2NmczIvbmFtZWkuYzoyNjE6XFx0dHJhY2Vfb2NmczJfbWtub2QoZGlyLCBkZW50cnksIGRlbnRyeS1cXHUwMDNlZF9uYW1lLmxlbiwgZGVudHJ5LVxcdTAwM2VkX25hbWUubmFtZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI2Mi1cXHRcXHRcXHQgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzY5LVxcbmZzL29jZnMyL25hbWVpLmM6MzcwOlxcdGhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgb2NmczJfbWtub2RfY3JlZGl0cyhvc2ItXFx1MDAzZXNiLFxcbmZzL29jZnMyL25hbWVpLmMtMzcxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBTX0lTRElSKG1vZGUpLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0zODktXFx0LyogZG8gdGhlIHJlYWwgd29yayBub3cuICovXFxuZnMvb2NmczIvbmFtZWkuYzozOTA6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSwgZGV2LFxcbmZzL29jZnMyL25hbWVpLmMtMzkxLVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bmV3X2ZlX2JoLCBwYXJlbnRfZmVfYmgsIGhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNTE3LVxcbmZzL29jZnMyL25hbWVpLmM6NTE4OnN0YXRpYyBpbnQgX19vY2ZzMl9ta25vZF9sb2NrZWQoc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvbmFtZWkuYy01MTktXFx0XFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjI5LVxcbmZzL29jZnMyL25hbWVpLmM6NjMwOnN0YXRpYyBpbnQgb2NmczJfbWtub2RfbG9ja2VkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLFxcbmZzL29jZnMyL25hbWVpLmMtNjMxLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02NTItXFxuZnMvb2NmczIvbmFtZWkuYzo2NTM6XFx0cmV0dXJuIF9fb2NmczJfbWtub2RfbG9ja2VkKGRpciwgaW5vZGUsIGRldiwgbmV3X2ZlX2JoLFxcbmZzL29jZnMyL25hbWVpLmMtNjU0LVxcdFxcdFxcdFxcdCAgICBoYW5kbGUsIGlub2RlX2FjLCBmZV9ibGtubyxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9NjU4PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtNjY2LVxcdFxcdFxcdCAgT0NGUzJfSShkaXIpLVxcdTAwM2VpcF9ibGtubywgbW9kZSk7XFxuZnMvb2NmczIvbmFtZWkuYzo2Njc6XFx0cmV0ID0gb2NmczJfbWtub2QoXFx1MDAyNm5vcF9tbnRfaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCk7XFxuZnMvb2NmczIvbmFtZWkuYy02NjgtXFx0aWYgKHJldClcXG4tLVxcbmZzL29jZnMyL25hbWVpLmM9Njc0PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy02ODMtXFx0XFx0XFx0ICAgKHVuc2lnbmVkIGxvbmcgbG9uZylPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX2Jsa25vLCBtb2RlKTtcXG5mcy9vY2ZzMi9uYW1laS5jOjY4NDpcXHRyZXQgPSBvY2ZzMl9ta25vZChcXHUwMDI2bm9wX21udF9pZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9vY2ZzMi9uYW1laS5jLTY4NS1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0xODE0PXN0YXRpYyBpbnQgb2NmczJfc3ltbGluayhzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMTk1Ni1cXG5mcy9vY2ZzMi9uYW1laS5jOjE5NTc6XFx0c3RhdHVzID0gb2NmczJfbWtub2RfbG9ja2VkKG9zYiwgZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTE5NTgtXFx0XFx0XFx0XFx0ICAgIDAsIFxcdTAwMjZuZXdfZmVfYmgsIHBhcmVudF9mZV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yNTIxPWludCBvY2ZzMl9jcmVhdGVfaW5vZGVfaW5fb3JwaGFuKHN0cnVjdCBpbm9kZSAqZGlyLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yNTYxLVxcbmZzL29jZnMyL25hbWVpLmM6MjU2MjpcXHRoYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIG9jZnMyX21rbm9kX2NyZWRpdHMob3NiLVxcdTAwM2VzYiwgMCwgMCkpO1xcbmZzL29jZnMyL25hbWVpLmMtMjU2My1cXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMjU4NC1cXHQvKiBkbyB0aGUgcmVhbCB3b3JrIG5vdy4gKi9cXG5mcy9vY2ZzMi9uYW1laS5jOjI1ODU6XFx0c3RhdHVzID0gX19vY2ZzMl9ta25vZF9sb2NrZWQoZGlyLCBpbm9kZSxcXG5mcy9vY2ZzMi9uYW1laS5jLTI1ODYtXFx0XFx0XFx0XFx0ICAgICAgMCwgXFx1MDAyNm5ld19kaV9iaCwgaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvbmFtZWkuYz0yOTMzPWNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIG9jZnMyX2Rpcl9pb3BzID0ge1xcbi0tXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQwLVxcdC5ta2RpclxcdFxcdD0gb2NmczJfbWtkaXIsXFxuZnMvb2NmczIvbmFtZWkuYzoyOTQxOlxcdC5ta25vZFxcdFxcdD0gb2NmczJfbWtub2QsXFxuZnMvb2NmczIvbmFtZWkuYy0yOTQyLVxcdC5yZW5hbWVcXHRcXHQ9IG9jZnMyX3JlbmFtZSxcXG4tLVxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmg9MjE5Nz1ERUZJTkVfT0NGUzJfUE9JTlRFUl9FVkVOVChvY2ZzMl9sb29rdXBfcmV0KTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTIxOTgtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoyMTk5OlRSQUNFX0VWRU5UKG9jZnMyX21rbm9kLFxcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMjIwMC1cXHRUUF9QUk9UTyh2b2lkICpkaXIsIHZvaWQgKmRlbnRyeSwgaW50IG5hbWVfbGVuLCBjb25zdCBjaGFyICpuYW1lLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjozNS45MDY2OTc5NDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMDE4ODYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHRoaW5raW5nIHRocm91Z2ggdGhpcyBsb2dpY2FsbHk6XG5cbioqUmVhY2hpbmcgYG9jZnMyX21rbm9kYCoqXG5cbkFscmlnaHQsIHNvIGBvY2ZzMl9ta25vZGAuLi4gaXQncyB0aGUgaW5vZGUgb3BlcmF0aW9uIGZvciBtYWtpbmcgbm9kZXMsIGdvdCBpdC4gTXkgbWVudGFsIG1hcCBzaG93cyBpdCdzIGNhbGxlZCBieSBgb2NmczJfbWtkaXJgIChjcmVhdGluZyBkaXJlY3RvcmllcyksIGFuZCBgb2NmczJfY3JlYXRlYCAoY3JlYXRpbmcgZmlsZXMsIG9idmlvdXNseSkuIFRoZXJlZm9yZSwgaXQncyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBObyBxdWVzdGlvbiB0aGVyZS4gSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBpdCdzICpiZWluZyogcmVhY2hlZCwgcGVyaGFwcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUgb2JzZXJ2ZWQgYmVoYXZpb3IgaXMgcG9zc2libGUuXG5cbk5vdywgSSBuZWVkIHRvIGxvb2sgaW50byBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYC4gVGhlIGRlc2NyaXB0aW9uIG1lbnRpb25zIHNvbWV0aGluZyB0byBkbyB3aXRoIGZpbGUgc3lzdGVtIGV4dGVuZGVkIGF0dHJpYnV0ZXMsIHNwZWNpZmljYWxseSwgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBTbyBsZXQncyBjaGVjayBpdC4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODg2LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6NDEuMjM2ODg4ODI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyNjQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MjY0OlxcdGludCBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2woc3RydWN0IGlub2RlICpkaXIsXFxuNzI2NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjcyNjY6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpXFxuNzI2NzpcXHR7XFxuNzI2ODpcXHRcXHRpbnQgcmV0ID0gMDtcXG43MjY5OlxcdFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqZGlyX2JoID0gTlVMTDtcXG43MjcwOlxcdFxcdHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgYWNsX3N0YXRlID0geyAwIH07XFxuNzI3MTpcXHRcXG43MjcyOlxcdFxcdHJldCA9IG9jZnMyX2luaXRfc2VjdXJpdHlfZ2V0KGlub2RlLCBkaXIsIHFzdHIsIE5VTEwpO1xcbjcyNzM6XFx0XFx0aWYgKHJldCkge1xcbjcyNzQ6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbjcyNzU6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG43Mjc2OlxcdFxcdH1cXG43Mjc3OlxcdFxcbjcyNzg6XFx0XFx0cmV0ID0gb2NmczJfaW5vZGVfbG9jayhkaXIsIFxcdTAwMjZkaXJfYmgsIDApO1xcbjcyNzk6XFx0XFx0aWYgKHJldCkge1xcbjcyODA6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbjcyODE6XFx0XFx0XFx0Z290byBsZWF2ZTtcXG43MjgyOlxcdFxcdH1cXG43MjgzOlxcdFxcbjcyODQ6XFx0XFx0cmV0ID0gb2NmczJfYWNsX2luaXRfcHJlcGFyZShpbm9kZSwgZGlyLCBkaXJfYmgsIFxcdTAwMjZhY2xfc3RhdGUpO1xcbjcyODU6XFx0XFx0aWYgKHJldClcXG43Mjg2OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbjcyODc6XFx0XFxuNzI4ODpcXHRcXHRyZXQgPSBvY2ZzMl9pbml0X2FjbChOVUxMLCBpbm9kZSwgTlVMTCwgTlVMTCwgTlVMTCwgXFx1MDAyNmFjbF9zdGF0ZSk7XFxuNzI4OTpcXHRcXHRpZiAocmV0KVxcbjcyOTA6XFx0XFx0XFx0bWxvZ19lcnJubyhyZXQpO1xcbjcyOTE6XFx0XFxuNzI5MjpcXHR1bmxvY2s6XFxuNzI5MzpcXHRcXHRvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlKFxcdTAwMjZhY2xfc3RhdGUpO1xcbjcyOTQ6XFx0XFx0b2NmczJfaW5vZGVfdW5sb2NrKGRpciwgMCk7XFxuNzI5NTpcXHRcXHRicmVsc2UoZGlyX2JoKTtcXG43Mjk2OlxcdGxlYXZlOlxcbjcyOTc6XFx0XFx0cmV0dXJuIHJldDtcXG43Mjk4OlxcdH1cXG43Mjk5OlxcdFxcbjczMDA6XFx0LypcXG43MzAxOlxcdCAqICdzZWN1cml0eScgYXR0cmlidXRlcyBzdXBwb3J0XFxuNzMwMjpcXHQgKi9cXG43MzAzOlxcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2VjdXJpdHlfZ2V0KGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyLFxcbjczMDQ6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZW50cnkgKnVudXNlZCwgc3RydWN0IGlub2RlICppbm9kZSxcXG43MzA1OlxcdFxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKVxcbjczMDY6XFx0e1xcbjczMDc6XFx0XFx0cmV0dXJuIG9jZnMyX3hhdHRyX2dldChpbm9kZSwgT0NGUzJfWEFUVFJfSU5ERVhfU0VDVVJJVFksXFxuNzMwODpcXHRcXHRcXHRcXHQgICAgICAgbmFtZSwgYnVmZmVyLCBzaXplKTtcXG43MzA5OlxcdH1cXG43MzEwOlxcdFxcbjczMTE6XFx0c3RhdGljIGludCBvY2ZzMl94YXR0cl9zZWN1cml0eV9zZXQoY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXIsXFxuNzMxMjpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuNzMxMzpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGRlbnRyeSAqdW51c2VkLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbjczMTQ6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbjczMTU6XFx0XFx0XFx0XFx0XFx0ICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpXFxuNzMxNjpcXHR7XFxuNzMxNzpcXHRcXHRyZXR1cm4gb2NmczJfeGF0dHJfc2V0KGlub2RlLCBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcXG43MzE4OlxcdFxcdFxcdFxcdCAgICAgICBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpO1xcbjczMTk6XFx0fVxcbjczMjA6XFx0XFxuNzMyMTpcXHRzdGF0aWMgaW50IG9jZnMyX2luaXR4YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgc3RydWN0IHhhdHRyICp4YXR0cl9hcnJheSxcXG43MzIyOlxcdFxcdFxcdCAgICAgdm9pZCAqZnNfaW5mbylcXG43MzIzOlxcdHtcXG43MzI0OlxcdFxcdHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSA9IGZzX2luZm87XFxuNzMyNTpcXHRcXHRjb25zdCBzdHJ1Y3QgeGF0dHIgKnhhdHRyO1xcbjczMjY6XFx0XFx0aW50IGVyciA9IDA7XFxuNzMyNzpcXHRcXG43MzI4OlxcdFxcdGlmIChzaSkge1xcbjczMjk6XFx0XFx0XFx0c2ktXFx1MDAzZXZhbHVlID0ga21lbWR1cCh4YXR0cl9hcnJheS1cXHUwMDNldmFsdWUsIHhhdHRyX2FycmF5LVxcdTAwM2V2YWx1ZV9sZW4sXFxuNzMzMDpcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX0tFUk5FTCk7XFxuNzMzMTpcXHRcXHRcXHRpZiAoIXNpLVxcdTAwM2V2YWx1ZSlcXG43MzMyOlxcdFxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjczMzM6XFx0XFxuNzMzNDpcXHRcXHRcXHRzaS1cXHUwMDNlbmFtZSA9IHhhdHRyX2FycmF5LVxcdTAwM2VuYW1lO1xcbjczMzU6XFx0XFx0XFx0c2ktXFx1MDAzZXZhbHVlX2xlbiA9IHhhdHRyX2FycmF5LVxcdTAwM2V2YWx1ZV9sZW47XFxuNzMzNjpcXHRcXHRcXHRyZXR1cm4gMDtcXG43MzM3OlxcdFxcdH1cXG43MzM4OlxcdFxcbjczMzk6XFx0XFx0Zm9yICh4YXR0ciA9IHhhdHRyX2FycmF5OyB4YXR0ci1cXHUwMDNlbmFtZSAhPSBOVUxMOyB4YXR0cisrKSB7XFxuNzM0MDpcXHRcXHRcXHRlcnIgPSBvY2ZzMl94YXR0cl9zZXQoaW5vZGUsIE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZLFxcbjczNDE6XFx0XFx0XFx0XFx0XFx0ICAgICAgeGF0dHItXFx1MDAzZW5hbWUsIHhhdHRyLVxcdTAwM2V2YWx1ZSxcXG43MzQyOlxcdFxcdFxcdFxcdFxcdCAgICAgIHhhdHRyLVxcdTAwM2V2YWx1ZV9sZW4sIFhBVFRSX0NSRUFURSk7XFxuNzM0MzpcXHRcXHRcXHRpZiAoZXJyKVxcbjczNDQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuNzM0NTpcXHRcXHR9XFxuNzM0NjpcXHRcXHRyZXR1cm4gZXJyO1xcbjczNDc6XFx0fVxcbjczNDg6XFx0XFxuNzM0OTpcXHRpbnQgb2NmczJfaW5pdF9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSxcXG43MzUwOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpcixcXG43MzUxOlxcdFxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgcXN0ciAqcXN0cixcXG43MzUyOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2kpXFxuNzM1MzpcXHR7XFxuNzM1NDpcXHRcXHRpbnQgcmV0O1xcbjczNTU6XFx0XFxuNzM1NjpcXHRcXHQvKiBjaGVjayB3aGV0aGVyIG9jZnMyIHN1cHBvcnQgZmVhdHVyZSB4YXR0ciAqL1xcbjczNTc6XFx0XFx0aWYgKCFvY2ZzMl9zdXBwb3J0c194YXR0cihPQ0ZTMl9TQihkaXItXFx1MDAzZWlfc2IpKSlcXG43MzU4OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG43MzU5OlxcdFxcdGlmIChzaSkge1xcbjczNjA6XFx0XFx0XFx0cmV0ID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCBxc3RyLFxcbjczNjE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNm9jZnMyX2luaXR4YXR0cnMsIHNpKTtcXG43MzYyOlxcdFxcdFxcdC8qXFxuNzM2MzpcXHRcXHRcXHQgKiBzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KCkgZG9lcyBub3QgcmV0dXJuIC1FT1BOT1RTVVBQLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjo0MS4yMzcxMzQ1ODRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA5NDQxMzk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgT0NGUzIgUmVmbGluayBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgSSBzZWUgYG9jZnMyX2luaXRfc2VjdXJpdHlfYW5kX2FjbGAgYmVpbmcgY2FsbGVkIGZyb20gYG9jZnMyX3JlZmxpbmtgLiBSaWdodCwgYG9jZnMyX3JlZmxpbmtgLi4uIEkgYmVsaWV2ZSB0aGF0J3MgYW4gYGlvY3RsYCBjYWxsLCByaWdodD8gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBhbmQgZGF0YSBmbG93IGhlcmUuIExldCdzIG1ha2Ugc3VyZSwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIGluIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBmcy9vY2ZzMi9yZWZjb3VudHRyZWUuY2AsIHRvIGNvbmZpcm0gdGhhdCBgb2NmczJfcmVmbGlua2AgaXMgZGVmaW5lZCB0aGVyZSBhbmQgdG8gZ2V0IGEgYmV0dGVyIGdyYXNwIG9uIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIHJlZmxpbmsgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgYSBjb21tb24gc3RhcnRpbmcgcG9pbnQgZm9yIGRpZ2dpbmcgaW50byB0aGUgc3BlY2lmaWNzIG9mIGEgcGFydGljdWxhciBmZWF0dXJlIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZmlsZSBzeXN0ZW0uIEtub3dpbmcgdGhhdCBgb2NmczJfcmVmbGlua2AgaXMgYW4gYGlvY3RsYCBnaXZlcyBtZSBhbiBpbXBvcnRhbnQgY29udGV4dCwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgaXRzIGRlZmluaXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzE0LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxMjozMjo0NS4zMzE1NTE0NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTgzMTE1NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2NmczJfcmVmbGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9maWxlLmM9MjcwNj1zdGF0aWMgbG9mZl90IG9jZnMyX3JlbWFwX2ZpbGVfcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGVfaW4sIGxvZmZfdCBwb3NfaW4sXFxuLS1cXG5mcy9vY2ZzMi9maWxlLmMtMjcyNS1cXHQvKiBMb2NrIGJvdGggZmlsZXMgYWdhaW5zdCBJTyAqL1xcbmZzL29jZnMyL2ZpbGUuYzoyNzI2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfaW5vZGVzX2xvY2soaW5vZGVfaW4sIFxcdTAwMjZpbl9iaCwgaW5vZGVfb3V0LCBcXHUwMDI2b3V0X2JoKTtcXG5mcy9vY2ZzMi9maWxlLmMtMjcyNy1cXHRpZiAocmV0KVxcbi0tXFxuZnMvb2NmczIvZmlsZS5jLTI3NTEtXFxuZnMvb2NmczIvZmlsZS5jOjI3NTI6XFx0cmVtYXBwZWQgPSBvY2ZzMl9yZWZsaW5rX3JlbWFwX2Jsb2Nrcyhpbm9kZV9pbiwgaW5fYmgsIHBvc19pbixcXG5mcy9vY2ZzMi9maWxlLmMtMjc1My1cXHRcXHRcXHRpbm9kZV9vdXQsIG91dF9iaCwgcG9zX291dCwgbGVuKTtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzY5LVxcbmZzL29jZnMyL2ZpbGUuYzoyNzcwOlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfdXBkYXRlX2Rlc3QoaW5vZGVfb3V0LCBvdXRfYmgsIHBvc19vdXQgKyBsZW4pO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzcxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmZzL29jZnMyL2ZpbGUuYy0yNzc2LW91dF91bmxvY2s6XFxuZnMvb2NmczIvZmlsZS5jOjI3Nzc6XFx0b2NmczJfcmVmbGlua19pbm9kZXNfdW5sb2NrKGlub2RlX2luLCBpbl9iaCwgaW5vZGVfb3V0LCBvdXRfYmgpO1xcbmZzL29jZnMyL2ZpbGUuYy0yNzc4LVxcdHJldHVybiByZW1hcHBlZCBcXHUwMDNlIDAgPyByZW1hcHBlZCA6IHJldDtcXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9ODUzPWxvbmcgb2NmczJfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05MTktXFxuZnMvb2NmczIvaW9jdGwuYzo5MjA6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIG9sZF9wYXRoLCBuZXdfcGF0aCwgcHJlc2VydmUpO1xcbmZzL29jZnMyL2lvY3RsLmMtOTIxLVxcdH1cXG4tLVxcbmZzL29jZnMyL2lvY3RsLmM9OTY1PWxvbmcgb2NmczJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxuZnMvb2NmczIvaW9jdGwuYy05ODYtXFxuZnMvb2NmczIvaW9jdGwuYzo5ODc6XFx0XFx0cmV0dXJuIG9jZnMyX3JlZmxpbmtfaW9jdGwoaW5vZGUsIGNvbXBhdF9wdHIoYXJncy5vbGRfcGF0aCksXFxuZnMvb2NmczIvaW9jdGwuYy05ODgtXFx0XFx0XFx0XFx0XFx0ICAgY29tcGF0X3B0cihhcmdzLm5ld19wYXRoKSwgcHJlc2VydmUpO1xcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODMxPURFRklORV9PQ0ZTMl9VTExfVUxMX1VJTlRfVUlOVF9FVkVOVChvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4MzItXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODMzOkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcik7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODM0LVxcbi0tXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaD0xODQxPURFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfcmVmY291bnQpO1xcbmZzL29jZnMyL29jZnMyX3RyYWNlLmgtMTg0Mi1cXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oOjE4NDM6REVGSU5FX09DRlMyX1VMTF9VSU5UX1VJTlRfRVZFTlQob2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKTtcXG5mcy9vY2ZzMi9vY2ZzMl90cmFjZS5oLTE4NDQtXFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaDoxODQ1OkRFRklORV9PQ0ZTMl9VTExfVUlOVF9FVkVOVChvY2ZzMl9yZWZsaW5rX3hhdHRyX3JlYyk7XFxuZnMvb2NmczIvb2NmczJfdHJhY2UuaC0xODQ2LVxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM9NDA4OT1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV9yZWZsaW5rX25vZGUoc3RydWN0IGlub2RlICpzX2lub2RlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0NS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MTQ2OnN0YXRpYyBpbnQgX19vY2ZzMl9yZWZsaW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDE0Ny1cXHRcXHRcXHQgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMDktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9IQVNfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0MjEwOlxcdFxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJzKGlub2RlLCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIxMS1cXHRcXHRcXHRcXHRcXHQgICBuZXdfaW5vZGUsIG5ld19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyMzctXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDIzODpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDIzOS1cXHRcXHRcXHQgc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeSwgYm9vbCBwcmVzZXJ2ZSlcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQyNzItXFx0ZG93bl93cml0ZShcXHUwMDI2T0NGUzJfSShpbm9kZSktXFx1MDAzZWlwX2FsbG9jX3NlbSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDI3MzpcXHRlcnJvciA9IF9fb2NmczJfcmVmbGluayhvbGRfZGVudHJ5LCBvbGRfYmgsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDI3NC1cXHRcXHRcXHRcXHRuZXdfb3JwaGFuX2lub2RlLCBwcmVzZXJ2ZSk7XFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYz00MzQ4PXN0YXRpYyBpbnQgb2NmczJfdmZzX3JlZmxpbmsoc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Mzk4LVxcdGlmICghZXJyb3IpXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmM6NDM5OTpcXHRcXHRlcnJvciA9IG9jZnMyX3JlZmxpbmsob2xkX2RlbnRyeSwgZGlyLCBuZXdfZGVudHJ5LCBwcmVzZXJ2ZSk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwMC1cXHRpbm9kZV91bmxvY2soaW5vZGUpO1xcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwNy0gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDA4OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQwOS1cXHRcXHRcXHRjb25zdCBjaGFyIF9fdXNlciAqb2xkbmFtZSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0NTAtLyogVXBkYXRlIGRlc3RpbmF0aW9uIGlub2RlIHNpemUsIGlmIG5lY2Vzc2FyeS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NDUxOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NDUyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZF9iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ0ODktLyogUmVtYXAgdGhlIHJhbmdlIHBvc19pbjpsZW4gaW4gc19pbm9kZSB0byBwb3Nfb3V0OmxlbiBpbiB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ0OTA6c3RhdGljIGxvZmZfdCBvY2ZzMl9yZWZsaW5rX3JlbWFwX2V4dGVudChzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDQ5MS1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDYwMy0vKiBTZXQgdXAgcmVmY291bnQgdHJlZSBhbmQgcmVtYXAgc19pbm9kZSB0byB0X2lub2RlLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ2MDQ6bG9mZl90IG9jZnMyX3JlZmxpbmtfcmVtYXBfYmxvY2tzKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NjA1LVxcdFxcdFxcdFxcdCAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzX2JoLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmMtNDY4NS1cXHQvKiBBY3R1YWxseSByZW1hcCBleHRlbnRzIG5vdy4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0Njg2OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfcmVtYXBfZXh0ZW50KHNfaW5vZGUsIHNfYmgsIHBvc19pbiwgdF9pbm9kZSwgdF9iaCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Njg3LVxcdFxcdFxcdFxcdFxcdCBwb3Nfb3V0LCBsZW4sIFxcdTAwMjZkZWFsbG9jKTtcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3MDItLyogTG9jayBhbiBpbm9kZSBhbmQgZ3JhYiBhIGJoIHBvaW50aW5nIHRvIHRoZSBpbm9kZS4gKi9cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYzo0NzAzOmludCBvY2ZzMl9yZWZsaW5rX2lub2Rlc19sb2NrKHN0cnVjdCBpbm9kZSAqc19pbm9kZSxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00NzA0LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoX3MsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYy00Nzk2LS8qIFVubG9jayBib3RoIGlub2RlcyBhbmQgcmVsZWFzZSBidWZmZXJzLiAqL1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jOjQ3OTc6dm9pZCBvY2ZzMl9yZWZsaW5rX2lub2Rlc191bmxvY2soc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5jLTQ3OTgtXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oPTk4PWludCBvY2ZzMl9pbmNyZWFzZV9yZWZjb3VudChoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTAzLVxcdFxcdFxcdCAgICBzdHJ1Y3Qgb2NmczJfY2FjaGVkX2RlYWxsb2NfY3R4dCAqZGVhbGxvYyk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTA0OmludCBvY2ZzMl9yZWZsaW5rX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA1LVxcdFxcdFxcdGNvbnN0IGNoYXIgX191c2VyICpvbGRuYW1lLFxcbi0tXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTA3LVxcdFxcdFxcdGJvb2wgcHJlc2VydmUpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjEwODpsb2ZmX3Qgb2NmczJfcmVmbGlua19yZW1hcF9ibG9ja3Moc3RydWN0IGlub2RlICpzX2lub2RlLFxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTEwOS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaCxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExNC1cXHRcXHRcXHRcXHQgIGxvZmZfdCBsZW4pO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExNTppbnQgb2NmczJfcmVmbGlua19pbm9kZXNfbG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTE2LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoMSxcXG4tLVxcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oLTExOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaDIpO1xcbmZzL29jZnMyL3JlZmNvdW50dHJlZS5oOjExOTp2b2lkIG9jZnMyX3JlZmxpbmtfaW5vZGVzX3VubG9jayhzdHJ1Y3QgaW5vZGUgKnNfaW5vZGUsXFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmgtMTIwLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYmgsXFxuLS1cXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjItXFx0XFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqdF9iaCk7XFxuZnMvb2NmczIvcmVmY291bnR0cmVlLmg6MTIzOmludCBvY2ZzMl9yZWZsaW5rX3VwZGF0ZV9kZXN0KHN0cnVjdCBpbm9kZSAqZGVzdCxcXG5mcy9vY2ZzMi9yZWZjb3VudHRyZWUuaC0xMjQtXFx0XFx0XFx0ICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MzA4PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3hhdHRyX3ZhbHVlX3Jvb3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjMzMS0gKi9cXG5mcy9vY2ZzMi94YXR0ci5jOjYzMzI6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYixcXG5mcy9vY2ZzMi94YXR0ci5jLTYzMzMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTYzODctICovXFxuZnMvb2NmczIveGF0dHIuYzo2Mzg4OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzODktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3JlZmxpbmsgKmFyZ3MsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY0MDctXFxuZnMvb2NmczIveGF0dHIuYzo2NDA4OlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfaGVhZGVyKCh1bnNpZ25lZCBsb25nIGxvbmcpb2xkX2JoLVxcdTAwM2ViX2Jsb2NrbnIsXFxuZnMvb2NmczIveGF0dHIuYy02NDA5LVxcdFxcdFxcdFxcdFxcdCBsZTE2X3RvX2NwdSh4aC1cXHUwMDNleGhfY291bnQpKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjUxNy1cXG5mcy9vY2ZzMi94YXR0ci5jOjY1MTg6c3RhdGljIGludCBvY2ZzMl9yZWZsaW5rX3hhdHRyX2lubGluZShzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncylcXG5mcy9vY2ZzMi94YXR0ci5jLTY1MTkte1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTQ0LVxcbmZzL29jZnMyL3hhdHRyLmM6NjU0NTpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX2xvY2tfeGF0dHJfYWxsb2NhdG9ycyhvc2IsIHhoLCBhcmdzLVxcdTAwM2VyZWZfcm9vdF9iaCxcXG5mcy9vY2ZzMi94YXR0ci5jLTY1NDYtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2Y3JlZGl0cywgXFx1MDAyNm1ldGFfYWMpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NTcxLVxcbmZzL29jZnMyL3hhdHRyLmM6NjU3MjpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2hlYWRlcihoYW5kbGUsIGFyZ3MsIGFyZ3MtXFx1MDAzZW9sZF9iaCwgeGgsXFxuZnMvb2NmczIveGF0dHIuYy02NTczLVxcdFxcdFxcdFxcdFxcdCBhcmdzLVxcdTAwM2VuZXdfYmgsIG5ld194aCwgXFx1MDAyNnZiLCBtZXRhX2FjLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NTk4PXN0YXRpYyBpbnQgb2NmczJfY3JlYXRlX2VtcHR5X3hhdHRyX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzMtXFxuZnMvb2NmczIveGF0dHIuYzo2NjM0OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY2MzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJsa19iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY1NS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2NTY6XFx0cmV0ID0gb2NmczJfcmVmbGlua19sb2NrX3hhdHRyX2FsbG9jYXRvcnMob3NiLCB4aCwgYXJncy1cXHUwMDNlcmVmX3Jvb3RfYmgsXFxuZnMvb2NmczIveGF0dHIuYy02NjU3LVxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmNyZWRpdHMsIFxcdTAwMjZtZXRhX2FjKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjY5MS1cXG5mcy9vY2ZzMi94YXR0ci5jOjY2OTI6XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLCBibGtfYmgsIHhoLFxcbmZzL29jZnMyL3hhdHRyLmMtNjY5My1cXHRcXHRcXHRcXHRcXHQgbmV3X2Jsa19iaCwgbmV3X3hoLCBcXHUwMDI2dmIsIG1ldGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY3MTktXFxuZnMvb2NmczIveGF0dHIuYzo2NzIwOnN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyB7XFxuZnMvb2NmczIveGF0dHIuYy02NzIxLVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICpyZWZsaW5rO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02NzM0PXN0YXRpYyBpbnQgb2NmczJfZ2V0X3JlZmxpbmtfeGF0dHJfdmFsdWVfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02NzQxLXtcXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDI6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzID1cXG5mcy9vY2ZzMi94YXR0ci5jOjY3NDM6XFx0XFx0XFx0KHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqKXBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy02NzQ0LVxcdHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldDtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9Njc5OT1zdGF0aWMgaW50IG9jZnMyX2xvY2tfcmVmbGlua194YXR0cl9yZWNfYWxsb2NhdG9ycyhcXG5mcy9vY2ZzMi94YXR0ci5jOjY4MDA6XFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNjgwMS1cXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfZXh0ZW50X3RyZWUgKnh0X2V0LFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg0LVxcbmZzL29jZnMyL3hhdHRyLmM6Njg4NTpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfYnVja2V0KGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02ODg2LVxcdFxcdFxcdFxcdHU2NCBibGtubywgdTY0IG5ld19ibGtubywgdTMyIGNsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02ODg5LVxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICpkYXRhX2FjLFxcbmZzL29jZnMyL3hhdHRyLmM6Njg5MDpcXHRcXHRcXHRcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MpXFxuZnMvb2NmczIveGF0dHIuYy02ODkxLXtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjkzOC1cXG5mcy9vY2ZzMi94YXR0ci5jOjY5Mzk6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9oZWFkZXIoaGFuZGxlLCBhcmdzLVxcdTAwM2VyZWZsaW5rLFxcbmZzL29jZnMyL3hhdHRyLmMtNjk0MC1cXHRcXHRcXHRcXHRcXHRhcmdzLVxcdTAwM2VvbGRfYnVja2V0LVxcdTAwM2VidV9iaHNbMF0sXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzUtXFxuZnMvb2NmczIveGF0dHIuYzo2OTc2OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9idWNrZXRzKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvb2NmczIveGF0dHIuYy02OTc3LVxcdFxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYzo2OTc4OlxcdFxcdFxcdFxcdHN0cnVjdCBvY2ZzMl9yZWZsaW5rX3hhdHRyX3RyZWVfYXJncyAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTY5NzktXFx0XFx0XFx0XFx0c3RydWN0IG9jZnMyX2V4dGVudF90cmVlICpldCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzAwOS1cXG5mcy9vY2ZzMi94YXR0ci5jOjcwMTA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9idWNrZXQoaGFuZGxlLCBibGtubyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcwMTEtXFx0XFx0XFx0XFx0XFx0XFx0IG5ld19ibGtubywgbnVtX2NsdXN0ZXJzLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDMyLVxcbmZzL29jZnMyL3hhdHRyLmM6NzAzMzpcXHRcXHR0cmFjZV9vY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoKHVuc2lnbmVkIGxvbmcgbG9uZyluZXdfYmxrbm8sXFxuZnMvb2NmczIveGF0dHIuYy03MDM0LVxcdFxcdFxcdFxcdFxcdFxcdCAgbnVtX2NsdXN0ZXJzLCByZWZsaW5rX2Nwb3MpO1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDQ2LSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6NzA0NzpzdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvb2NmczIveGF0dHIuYy03MDQ4LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBidWZmZXJfaGVhZCAqcm9vdF9iaCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzA1NS1cXHRoYW5kbGVfdCAqaGFuZGxlO1xcbmZzL29jZnMyL3hhdHRyLmM6NzA1NjpcXHRzdHJ1Y3Qgb2NmczJfcmVmbGlua194YXR0cl90cmVlX2FyZ3MgKmFyZ3MgPVxcbmZzL29jZnMyL3hhdHRyLmM6NzA1NzpcXHRcXHRcXHQoc3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzICopcGFyYTtcXG5mcy9vY2ZzMi94YXR0ci5jLTcwNTgtXFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcwNjItXFxuZnMvb2NmczIveGF0dHIuYzo3MDYzOlxcdHRyYWNlX29jZnMyX3JlZmxpbmtfeGF0dHJfcmVjKCh1bnNpZ25lZCBsb25nIGxvbmcpYmxrbm8sIGxlbik7XFxuZnMvb2NmczIveGF0dHIuYy03MDY0LVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDgzLVxcbmZzL29jZnMyL3hhdHRyLmM6NzA4NDpcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2J1Y2tldHMoaGFuZGxlLCBpbm9kZSwgYXJncywgXFx1MDAyNmV0LFxcbmZzL29jZnMyL3hhdHRyLmMtNzA4NS1cXHRcXHRcXHRcXHRcXHQgIG1ldGFfYWMsIGRhdGFfYWMsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDQtICovXFxuZnMvb2NmczIveGF0dHIuYzo3MTA1OnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl90cmVlKHN0cnVjdCBvY2ZzMl94YXR0cl9yZWZsaW5rICphcmdzLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEwNi1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxMDktXFx0aW50IHJldDtcXG5mcy9vY2ZzMi94YXR0ci5jOjcxMTA6XFx0c3RydWN0IG9jZnMyX3JlZmxpbmtfeGF0dHJfdHJlZV9hcmdzIHBhcmE7XFxuZnMvb2NmczIveGF0dHIuYy03MTExLVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MTMwLVxcdHJldCA9IG9jZnMyX2l0ZXJhdGVfeGF0dHJfaW5kZXhfYmxvY2soYXJncy1cXHUwMDNlb2xkX2lub2RlLCBibGtfYmgsXFxuZnMvb2NmczIveGF0dHIuYzo3MTMxOlxcdFxcdFxcdFxcdFxcdCAgICAgIG9jZnMyX3JlZmxpbmtfeGF0dHJfcmVjLFxcbmZzL29jZnMyL3hhdHRyLmMtNzEzMi1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2cGFyYSk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTQyOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9pbl9ibG9jayhzdHJ1Y3Qgb2NmczJfeGF0dHJfcmVmbGluayAqYXJncyxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxNDMtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpibGtfYmgpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNjEtXFx0aWYgKCFpbmRleGVkKVxcbmZzL29jZnMyL3hhdHRyLmM6NzE2MjpcXHRcXHRyZXQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX2Jsb2NrKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTYzLVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcxNjQ6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl90cmVlKGFyZ3MsIGJsa19iaCwgbmV3X2Jsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MTY1LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxNzItXFxuZnMvb2NmczIveGF0dHIuYzo3MTczOnN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxcbmZzL29jZnMyL3hhdHRyLmMtNzE3NC17XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcxODEtXFxuZnMvb2NmczIveGF0dHIuYzo3MTgyOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTcxODMtXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqb2xkX2JoLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MjE2LVxcdGVsc2VcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMTc6XFx0XFx0YXJncy54YXR0cl9yZWZsaW5rZWQgPSBvY2ZzMl9yZWZsaW5rX3hhdHRyX25vX3NlY3VyaXR5O1xcbmZzL29jZnMyL3hhdHRyLmMtNzIxOC1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMTktXFx0aWYgKG9pLVxcdTAwM2VpcF9keW5fZmVhdHVyZXMgXFx1MDAyNiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpIHtcXG5mcy9vY2ZzMi94YXR0ci5jOjcyMjA6XFx0XFx0cmV0ID0gb2NmczJfcmVmbGlua194YXR0cl9pbmxpbmUoXFx1MDAyNmFyZ3MpO1xcbmZzL29jZnMyL3hhdHRyLmMtNzIyMS1cXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTcyMzYtXFxuZnMvb2NmczIveGF0dHIuYzo3MjM3OlxcdHJldCA9IG9jZnMyX3JlZmxpbmtfeGF0dHJfaW5fYmxvY2soXFx1MDAyNmFyZ3MsIGJsa19iaCk7XFxuZnMvb2NmczIveGF0dHIuYy03MjM4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTc4PWludCBvY2ZzMl94YXR0cl9hdHRhY2hfcmVmY291bnRfdHJlZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuaC04Mi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBvY2ZzMl9jYWNoZWRfZGVhbGxvY19jdHh0ICpkZWFsbG9jKTtcXG5mcy9vY2ZzMi94YXR0ci5oOjgzOmludCBvY2ZzMl9yZWZsaW5rX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTg0LVxcdFxcdFxcdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKm9sZF9iaCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6NDcuMjg5ODcwNzEyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MzkwNjkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgUmVmbGluayBQYXRoKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBgb2NmczJfcmVmbGlua2AgZ2V0cyBpbnZva2VkLiBJdCBsb29rcyBsaWtlIHRoZSBjYWxsIGNoYWluIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIHJpZ2h0PyBgb2NmczJfcmVmbGlua2AgaXMgY2FsbGVkIGJ5IGBvY2ZzMl92ZnNfcmVmbGlua2AsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBvY2ZzMl9yZWZsaW5rX2lvY3RsYC4gQW5kIHRoYXQgYG9jZnMyX3JlZmxpbmtfaW9jdGxgIGZ1bmN0aW9uPyBJdCdzIGNhbGxlZCBmcm9tIGBvY2ZzMl9pb2N0bGAgaXRzZWxmLCBzcGVjaWZpY2FsbHkgd2hlbiBhbiBgT0NGUzJfSU9DX1JFRkxJTktgIGlvY3RsIGlzIGlzc3VlZC4gU28sIGluIGVmZmVjdCwgdGhpcyByZWZsaW5rIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIGFuIGlvY3RsIGNhbGwsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5vdywgSSdtIGp1c3QgY3VyaW91cyBhYm91dCBhbm90aGVyIGZ1bmN0aW9uOiBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAuIEZyb20gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQgbWlnaHQgYmUgdXNlZnVsIHRvIGxvb2sgYXQgaXRzIGNhbGwgY2hhaW4uIEl0IHNlZW1zIHRoYXQgdGhpcyBoYW5kbGUgaXMgY2FsbGVkIGZyb20gYG9jZnMyX3hhdHRyX3NldGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDc5LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMyOjUxLjAyODk0Mjk3OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NjA3MjkzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTI0OS1cXHRpZiAoaGFuZGxlKVxcbmZzL29jZnMyL2FjbC5jOjI1MDpcXHRcXHRyZXQgPSBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlKGhhbmRsZSwgaW5vZGUsIGRpX2JoLCBuYW1lX2luZGV4LFxcbmZzL29jZnMyL2FjbC5jLTI1MS1cXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJcXFwiLCB2YWx1ZSwgc2l6ZSwgMCxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9MzMwNT1zdGF0aWMgaW50IG9jZnMyX2luaXRfeGF0dHJfc2V0X2N0eHQoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtMzM2MC1cXG5mcy9vY2ZzMi94YXR0ci5jOjMzNjE6c3RhdGljIGludCBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTMzNjItXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNTAyLSAqL1xcbmZzL29jZnMyL3hhdHRyLmM6MzUwMzppbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL29jZnMyL3hhdHRyLmMtMzUwNC1cXHRcXHRcXHQgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNTY2LVxcbmZzL29jZnMyL3hhdHRyLmM6MzU2NzpcXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcXHUwMDI2eGksIFxcdTAwMjZ4aXMsIFxcdTAwMjZ4YnMsIFxcdTAwMjZjdHh0KTtcXG5mcy9vY2ZzMi94YXR0ci5jLTM1NjgtXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTM1ODM9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNzAzLVxcbmZzL29jZnMyL3hhdHRyLmM6MzcwNDpcXHRyZXQgPSBfX29jZnMyX3hhdHRyX3NldF9oYW5kbGUoaW5vZGUsIGRpLCBcXHUwMDI2eGksIFxcdTAwMjZ4aXMsIFxcdTAwMjZ4YnMsIFxcdTAwMjZjdHh0KTtcXG5mcy9vY2ZzMi94YXR0ci5jLTM3MDUtXFx0b2NmczJfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGN0eHQuaGFuZGxlLCBpbm9kZSwgMCk7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTczNzY9aW50IG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTczODIte1xcbmZzL29jZnMyL3hhdHRyLmM6NzM4MzpcXHRyZXR1cm4gb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGUsIGlub2RlLCBkaV9iaCxcXG5mcy9vY2ZzMi94YXR0ci5jLTczODQtXFx0XFx0XFx0XFx0ICAgICBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9Mzg9aW50IG9jZnMyX3hhdHRyX3NldChzdHJ1Y3QgaW5vZGUgKiwgaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKixcXG5mcy9vY2ZzMi94YXR0ci5oLTM5LVxcdFxcdCAgICBzaXplX3QsIGludCk7XFxuZnMvb2NmczIveGF0dHIuaDo0MDppbnQgb2NmczJfeGF0dHJfc2V0X2hhbmRsZShoYW5kbGVfdCAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICosXFxuZnMvb2NmczIveGF0dHIuaC00MS1cXHRcXHRcXHQgICBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzI6NTMuMDE1MDIxNjI2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNjUzNzQ4NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgT0NGUzIgQUNMIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBhbmQgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmb3IgT0NGUzIgQUNMcy4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgdGhhdCBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWAgZ2V0cyBjYWxsZWQgZnJvbSBib3RoIGBvY2ZzMl9zZXRfYWNsYCBhbmQgYG9jZnMyX2luaXRfc2VjdXJpdHlfc2V0YC4gYG9jZnMyX3NldF9hY2xgIGl0c2VsZiBpcyBjYWxsZWQgZnJvbSBgb2NmczJfaW5pdF9hY2xgIGFuZCBgb2NmczJfaW9wX3NldF9hY2xgLCB3aGlsZSBgb2NmczJfaW5pdF9zZWN1cml0eV9zZXRgIGlzIGNhbGxlZCBmcm9tIGBvY2ZzMl9ta25vZF9sb2NrZWRgLlxuXG5UaGF0IGdpdmVzIG1lIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIGNyaXRpY2FsOiBgb2NmczJfbWtub2RgLCBgb2NmczJfaW5pdF9hY2xgLCBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAsIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCwgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAsIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYCwgYW5kIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgLiBJJ20gbGVhbmluZyB0b3dhcmQgZm9jdXNpbmcgb24gYG9jZnMyX2luaXRfYWNsYCBhcyBhIGJldHRlciBzdGFydGluZyBwb2ludCB0aGFuIHRoZSBtb3JlIGdlbmVyYWwgYG9jZnMyX21rbm9kYC5cblxuU28sIHRoZSBrZXkgZnVuY3Rpb25zIEknbSB6ZXJvaW5nIGluIG9uIGFyZTpcblxuKiAgIGBvY2ZzMl9pbml0X2FjbGBcbiogICBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWBcbiogICBgb2NmczJfYWNsX2luaXRfcmVsZWFzZWBcbiogICBgb2NmczJfY2FsY194YXR0cl9pbml0YFxuKiAgIGBvY2ZzMl94YXR0cl9zZXRfaGFuZGxlYFxuKiAgIGBvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xgXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBvY2ZzMl9pbml0X2FjbGAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQgb3IgaWYgaXQncyBzdGF0aWMuIEkgY2FuIHNlZSBpdCdzIGRlZmluZWQgaW4gYGZzL29jZnMyL2FjbC5jYCBhbmQgZGVjbGFyZWQgaW4gYGZzL29jZnMyL2FjbC5oYC4gTG9va3MgbGlrZSBgb2NmczJfYWNsX2luaXRfcHJlcGFyZWAgYW5kIGBvY2ZzMl9hY2xfaW5pdF9yZWxlYXNlYCBhcmUgaW4gYGZzL29jZnMyL2FjbC5jYCBhcyB3ZWxsLiBUaGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBpbiBgZnMvb2NmczIveGF0dHIuY2AuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSBrbm93IE9DRlMyIG5lZWRzIGBPQ0ZTMl9GU2AsIGFuZCBpdCBkZXBlbmRzIG9uIGBDT05GSUdGU19GU2AuIEFuZCBJIHNlZSB0aGF0IGBGU19QT1NJWF9BQ0xgIGlzIHNlbGVjdGVkIGJ5IGBPQ0ZTMl9GU2AuXG5cbkkgbmVlZCB0byBjaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgYWdhaW4gdG8gY29uZmlybSBhbGwgb2YgdGhpcy5cblllcywgdGhlIEtjb25maWcgY29uZmlybXM6XG5gY29uZmlnIE9DRlMyX0ZTYFxuYGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTYFxuYHNlbGVjdCBGU19QT1NJWF9BQ0xgXG5cbkFscmlnaHQsIHRoYXQgbWVhbnMgSSBzaG91bGQgdHJhY2sgdGhlIGZvbGxvd2luZyBjb25maWcgb3B0aW9uczpcblxuKiAgIGBPQ0ZTMl9GU2BcbiogICBgQ09ORklHRlNfRlNgXG5cbkJ1dCBoZXJlJ3MgYSB3cmlua2xlOiBgT0NGUzJfRlNgICpzZWxlY3RzKiBgRlNfUE9TSVhfQUNMYC4gRG9lcyBPQ0ZTMiBhbHNvIGhhdmUgYW55IG90aGVyIHNldHRpbmdzIGZvciBgUE9TSVhfQUNMYD8gSSdkIGJldHRlciBjaGVjayBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyMzcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzM6MDIuMDgwMzk5NDkzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5ODA4NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUE9TSVhfQUNMXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9vY2ZzMi9LY29uZmlnPTI9Y29uZmlnIE9DRlMyX0ZTXFxuLS1cXG5mcy9vY2ZzMi9LY29uZmlnLTktXFx0c2VsZWN0IFFVT1RBX1RSRUVcXG5mcy9vY2ZzMi9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG5mcy9vY2ZzMi9LY29uZmlnLTExLVxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0xMTM9c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMTIyLVxcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxcbmZzL29jZnMyL2FjbC5jOjEyMzpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcXG5mcy9vY2ZzMi9hY2wuYy0xMjQtXFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmMtMTI1LVxcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcXG5mcy9vY2ZzMi9hY2wuYzoxMjY6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL2FjbC5jLTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTIzMS1cXHRjYXNlIEFDTF9UWVBFX0FDQ0VTUzpcXG5mcy9vY2ZzMi9hY2wuYzoyMzI6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M7XFxuZnMvb2NmczIvYWNsLmMtMjMzLVxcdFxcdGJyZWFrO1xcbmZzL29jZnMyL2FjbC5jLTIzNC1cXHRjYXNlIEFDTF9UWVBFX0RFRkFVTFQ6XFxuZnMvb2NmczIvYWNsLmM6MjM1OlxcdFxcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcXG5mcy9vY2ZzMi9hY2wuYy0yMzYtXFx0XFx0aWYgKCFTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpKVxcbi0tXFxuZnMvb2NmczIvYWNsLmM9MjkzPXN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2lvcF9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBib29sIHJjdSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTMwNC1cXHRvc2IgPSBPQ0ZTMl9TQihpbm9kZS1cXHUwMDNlaV9zYik7XFxuZnMvb2NmczIvYWNsLmM6MzA1OlxcdGlmICghKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxcbmZzL29jZnMyL2FjbC5jLTMwNi1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMjktXFxuZnMvb2NmczIvYWNsLmM6MzMwOlxcdGlmICghKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxcbmZzL29jZnMyL2FjbC5jLTMzMS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTM1OT1pbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTM3Mi1cXG5mcy9vY2ZzMi9hY2wuYzozNzM6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi9hY2wuYy0zNzQtXFx0XFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGRpciktXFx1MDAzZWlwX3hhdHRyX3NlbSk7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz00MTQ9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy00MjUtXFxuZnMvb2NmczIvYWNsLmM6NDI2OlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIvYWNsLmMtNDI3LVxcdFxcdGlmIChTX0lTRElSKGlub2RlLVxcdTAwM2VpX21vZGUpIFxcdTAwMjZcXHUwMDI2IHN0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCkge1xcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDQyLVxcbmZzL29jZnMyL2FjbC5jOjQ0MzpcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbmZzL29jZnMyL2FjbC5jLTQ0NC1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbi0tXFxuZnMvb2NmczIvb2NmczIuaD0yNTc9ZW51bSBvY2ZzMl9tb3VudF9vcHRpb25zXFxuLS1cXG5mcy9vY2ZzMi9vY2ZzMi5oLTI2Ni1cXHRPQ0ZTMl9NT1VOVF9JTk9ERTY0ID0gMSBcXHUwMDNjXFx1MDAzYyA3LFxcdC8qIEFsbG93IGlub2RlIG51bWJlcnMgXFx1MDAzZSAyXjMyICovXFxuZnMvb2NmczIvb2NmczIuaDoyNjc6XFx0T0NGUzJfTU9VTlRfUE9TSVhfQUNMID0gMSBcXHUwMDNjXFx1MDAzYyA4LFxcdC8qIEZvcmNlIFBPU0lYIGFjY2VzcyBjb250cm9sIGxpc3RzICovXFxuZnMvb2NmczIvb2NmczIuaDoyNjg6XFx0T0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMID0gMSBcXHUwMDNjXFx1MDAzYyA5LFxcdC8qIERpc2FibGUgUE9TSVggYWNjZXNzXFxuZnMvb2NmczIvb2NmczIuaC0yNjktXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29udHJvbCBsaXN0cyAqL1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz02MDc9c3RhdGljIGludCBvY2ZzMl9yZWNvbmZpZ3VyZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTcxNy1cXHRcXHRzYi1cXHUwMDNlc19mbGFncyA9IChzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IH5TQl9QT1NJWEFDTCkgfFxcbmZzL29jZnMyL3N1cGVyLmM6NzE4OlxcdFxcdFxcdCgob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgP1xcbmZzL29jZnMyL3N1cGVyLmMtNzE5LVxcdFxcdFxcdFxcdFxcdFxcdFxcdFNCX1BPU0lYQUNMIDogMCk7XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTk3Mz1zdGF0aWMgaW50IG9jZnMyX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMDI0LVxcdHNiLVxcdTAwM2VzX2ZsYWdzID0gKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgfihTQl9QT1NJWEFDTCB8IFNCX05PU0VDKSkgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8gU0JfUE9TSVhBQ0wgOiAwKTtcXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjYtXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyMzI9c3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVxcdH1cXG5mcy9vY2ZzMi9zdXBlci5jOjEyNjE6XFx0aWYgKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3N1cGVyLmMtMTI2Mi1cXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMjY3LVxcdC8qIE5vIEFDTCBzZXR0aW5nIHNwZWNpZmllZD8gVXNlIFhBVFRSIGZlYXR1cmUuLi4gKi9cXG5mcy9vY2ZzMi9zdXBlci5jOjEyNjg6XFx0aWYgKCEob3B0aW9ucy1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjYgKE9DRlMyX01PVU5UX1BPU0lYX0FDTCB8XFxuZnMvb2NmczIvc3VwZXIuYzoxMjY5OlxcdFxcdFxcdFxcdCAgICBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wpKSkge1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3MC1cXHRcXHRpZiAoT0NGUzJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIE9DRlMyX0ZFQVRVUkVfSU5DT01QQVRfWEFUVFIpKVxcbmZzL29jZnMyL3N1cGVyLmM6MTI3MTpcXHRcXHRcXHRvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3Mi1cXHRcXHRlbHNlXFxuZnMvb2NmczIvc3VwZXIuYzoxMjczOlxcdFxcdFxcdG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYy0xMjc0LVxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTI3OD1zdGF0aWMgaW50IG9jZnMyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTEzODQtXFx0XFx0aWYgKHJlc3VsdC5uZWdhdGVkKSB7XFxuZnMvb2NmczIvc3VwZXIuYzoxMzg1OlxcdFxcdFxcdG1vcHQtXFx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYzoxMzg2OlxcdFxcdFxcdG1vcHQtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2PSB+T0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTM4Ny1cXHRcXHR9IGVsc2Uge1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4ODpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4OTpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNj0gfk9DRlMyX01PVU5UX05PX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEzOTAtXFx0XFx0fVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYz0xNDE2PXN0YXRpYyBpbnQgb2NmczJfc2hvd19vcHRpb25zKHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4tLVxcbmZzL29jZnMyL3N1cGVyLmMtMTQ4NC1cXG5mcy9vY2ZzMi9zdXBlci5jOjE0ODU6XFx0aWYgKG9wdHMgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpXFxuZnMvb2NmczIvc3VwZXIuYy0xNDg2LVxcdFxcdHNlcV9wcmludGYocywgXFxcIixhY2xcXFwiKTtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9MTAxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IG9jZnMyX3hhdHRyX2hhbmRsZXJfbWFwW09DRlMyX1hBVFRSX01BWF0gPSB7XFxuZnMvb2NmczIveGF0dHIuYy0xMDItXFx0W09DRlMyX1hBVFRSX0lOREVYX1VTRVJdXFx0XFx0PSBcXHUwMDI2b2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLFxcbmZzL29jZnMyL3hhdHRyLmM6MTAzOlxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTXVxcdD0gXFx1MDAyNm5vcF9wb3NpeF9hY2xfYWNjZXNzLFxcbmZzL29jZnMyL3hhdHRyLmM6MTA0OlxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVF1cXHQ9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2RlZmF1bHQsXFxuZnMvb2NmczIveGF0dHIuYy0xMDUtXFx0W09DRlMyX1hBVFRSX0lOREVYX1RSVVNURURdXFx0XFx0PSBcXHUwMDI2b2NmczJfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MTQ9aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy02MjYtXFxuZnMvb2NmczIveGF0dHIuYzo2Mjc6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi94YXR0ci5jLTYyOC1cXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCBcXHUwMDI2XFx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTY3OC1cXHR9XFxuZnMvb2NmczIveGF0dHIuYzo2Nzk6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi94YXR0ci5jLTY4MC1cXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VkZWZhdWx0X2FjbCBcXHUwMDI2XFx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTg5MT1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtOTA2LVxcbmZzL29jZnMyL3hhdHRyLmM6OTA3OlxcdGNhc2UgT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUzpcXG5mcy9vY2ZzMi94YXR0ci5jOjkwODpcXHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUOlxcbmZzL29jZnMyL3hhdHRyLmMtOTA5LVxcdFxcdGlmICghKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgU0JfUE9TSVhBQ0wpKVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz03MTczPXN0YXRpYyBpbnQgb2NmczJfcmVmbGlua194YXR0cl9ub19zZWN1cml0eShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKVxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MTc3LVxcdHJldHVybiB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1NFQ1VSSVRZIFxcdTAwMjZcXHUwMDI2XFxuZnMvb2NmczIveGF0dHIuYzo3MTc4OlxcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MgXFx1MDAyNlxcdTAwMjZcXG5mcy9vY2ZzMi94YXR0ci5jOjcxNzk6XFx0ICAgICAgIHR5cGUgIT0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQ7XFxuZnMvb2NmczIveGF0dHIuYy03MTgwLX1cXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9MTQ9ZW51bSBvY2ZzMl94YXR0cl90eXBlIHtcXG5mcy9vY2ZzMi94YXR0ci5oLTE1LVxcdE9DRlMyX1hBVFRSX0lOREVYX1VTRVIgPSAxLFxcbmZzL29jZnMyL3hhdHRyLmg6MTY6XFx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUyxcXG5mcy9vY2ZzMi94YXR0ci5oOjE3OlxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxULFxcbmZzL29jZnMyL3hhdHRyLmgtMTgtXFx0T0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTI6MzM6MDIuMjk3Mzg1MTU5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjUxNjY1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE9DRlMyIEFDTCBJbml0aWFsaXphdGlvbiBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIE9DRlMyIEFDTCBpbml0aWFsaXphdGlvbiBjb2RlIGFuZCB0aGlua2luZyBhYm91dCBob3cgdG8gZWZmZWN0aXZlbHkgZnV6eiBpdC4gIFRoZSBrZXkgaGVyZSBpcyB0aGF0IHRoZSBwYXRjaCB0b3VjaGVzIGhvdyBBQ0xzIGFyZSBoYW5kbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbiDigJMgbWtub2QsIG1rZGlyLCBjcmVhdGUsIHN5bWxpbmsgb3BlcmF0aW9ucyBzcGVjaWZpY2FsbHkuIEl0IHNlZW1zIHRoZSBsb2dpYyBhcm91bmQgZmV0Y2hpbmcsIGR1cGxpY2F0aW5nLCBhbmQgc2V0dGluZyBBQ0xzIGlzIGJlaW5nIHJldmlzZWQsIGFuZCB0aGVyZSdzIHNvbWUgbG9ja2luZyBiZWhhdmlvciBjaGFuZ2UgYXJvdW5kIHhhdHRyIHNldHRpbmcuIFRoaXMgaXMgKmNvcmUqIGZpbGVzeXN0ZW0gc3R1ZmY7IHdlICpuZWVkKiB0byBmdXp6IHRoaXMgdG8gZW5zdXJlIG5vIG5hc3R5IGJ1Z3Mgc2xpcHBlZCBpbi5cblxuRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBJIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBkZWZpbmUgYEZTX1BPU0lYX0FDTGAgaWYgSSBzcGVjaWZ5IGBPQ0ZTMl9GU2AsIHdoaWNoIGlzIGdyZWF0LCBsZXNzIGNsdXR0ZXIuICBMZXQncyBzZWUsIGBPQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVGAsIGBTWVNGU2AsIGFuZCBgQ09ORklHRlNfRlNgLiAgU2luY2UgYElORVRgIGFuZCBgU1lTRlNgIGFyZSBwcmV0dHkgc3RhbmRhcmQsIHRoZSBpbXBvcnRhbnQgb25lIHRvIGVuc3VyZSB3ZSBoYXZlIGVuYWJsZWQgaXMgYENPTkZJR0ZTX0ZTYC4gVGh1cywgSSdsbCBuZWVkIGBPQ0ZTMl9GU2AgYW5kIGBDT05GSUdGU19GU2AuXG5cbkknbSB0aGlua2luZywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFRoZSBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcgYW5kLCBhcyBzdWNoLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIFJlYXNvbmluZyBpcyB0aGF0IGl0IGRlYWxzIHdpdGggQUNMIGluaXRpYWxpemF0aW9uIGxvZ2ljIGluIE9DRlMyLCBkdXJpbmcgaW5vZGUgY3JlYXRpb24g4oCTIGEgY29yZSBwYXJ0IG9mIHRoZSBzeXN0ZW0uIFRoaXMgY2FuIGxlYWQgdG8gbWVtb3J5IGxlYWtzLCB1c2UtYWZ0ZXItZnJlZXMsIG9yIGxvY2tpbmcgaXNzdWVzLiAgSSd2ZSBkZWNpZGVkIG9uIHRoZSBmb2xsb3dpbmcgYEZvY3VzU3ltYm9sc2A6XG5cbiogICBgb2NmczJfaW5pdF9hY2xgXG4qICAgYG9jZnMyX2FjbF9pbml0X3ByZXBhcmVgXG4qICAgYG9jZnMyX2FjbF9pbml0X3JlbGVhc2VgXG4qICAgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGBcbiogICBgb2NmczJfeGF0dHJfc2V0X2hhbmRsZWBcbiogICBgb2NmczJfaW5pdF9zZWN1cml0eV9hbmRfYWNsYFxuXG5TbywgdG8gZW5hYmxlIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIEknbSBnb2luZyB0byBzZXQgYEVuYWJsZUNvbmZpZ3NgOlxuXG4qICAgYE9DRlMyX0ZTYFxuKiAgIGBDT05GSUdGU19GU2BcblxuSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuICBgSU5FVGAgYW5kIGBTWVNGU2AgYXJlIGNvbW1vbiBlbm91Z2ggdG8gbm90IHdvcnJ5IGFib3V0LiBETE0gaXMgdXNlZCB3aXRoIGBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUmAsIGJ1dCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnkgZm9yIGxvY2FsIG1vdW50cyBhbmQgdGhhdCBpdCBjYW4gdXNlIGxvY2FsIG1vdW50IG9yIE8yQ0IuIEFzIE8yQ0IgaXMgdGhlIGRlZmF1bHQsIEkgdGhpbmsgSSdtIGdvb2QgdG8gZ28uXG5cbkkgd2FzIGJyaWVmbHkgY29uc2lkZXJpbmcgYG9jZnMyX21rbm9kYCBhcyBhIGZvY3VzIHN5bWJvbCwgYnV0IHRoYXQgc2VlbXMgYSBiaXQgdG9vIGJyb2FkLiBUaGUgQUNMLXNwZWNpZmljIGZ1bmN0aW9ucyBJJ3ZlIHNlbGVjdGVkIGFyZSBkZWZpbml0ZWx5IHRoZSBiZXR0ZXIgdGFyZ2V0cy4gVGh1cywgSSdsbCBzdGljayB0byBteSBzZWxlY3RlZCBzeW1ib2xzLiBJIGFtIG5vdyBjb25maWRlbnQgaW4gbXkgc2VsZWN0aW9uIGFuZCBJIHdpbGwgc3VibWl0IHRoaXMgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4NjEsIk91dHB1dFRva2VucyI6MTk5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDEyOjMzOjEyLjU0OTA1NTMxN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1MjUxNzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcmVsZWFzZVwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCIsXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiLFxuICAgIFwiQ09ORklHRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9pbml0X2FjbFwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcHJlcGFyZVwiLFxuICAgIFwib2NmczJfYWNsX2luaXRfcmVsZWFzZVwiLFxuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl94YXR0cl9zZXRfaGFuZGxlXCIsXG4gICAgXCJvY2ZzMl9pbml0X3NlY3VyaXR5X2FuZF9hY2xcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBBQ0wgaW5pdGlhbGl6YXRpb24gbG9naWMgaW4gT0NGUzIsIHNwZWNpZmljYWxseSBkdXJpbmcgaW5vZGUgY3JlYXRpb24gKG1rbm9kLCBta2RpciwgY3JlYXRlLCBzeW1saW5rKS4gSXQgY2hhbmdlcyBob3cgQUNMcyBhcmUgZmV0Y2hlZCwgZHVwbGljYXRlZCwgYW5kIHNldCwgYW5kIG1vZGlmaWVzIHRoZSBsb2NraW5nIGJlaGF2aW9yIGFyb3VuZCB4YXR0ciBzZXR0aW5nLiBUaGlzIGlzIHJlYWNoYWJsZSBjb3JlIGZpbGVzeXN0ZW0gbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBsZWFrcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgaXNzdWVzIHdlcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[1] Phase: Succeeded StartedAt: 2026-07-27 12:33:25 +0000 UTC FinishedAt: 2026-07-27 12:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 12:33:25 +0000 UTC FinishedAt: 2026-07-27 12:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2] Phase: Succeeded StartedAt: 2026-07-27 12:33:25 +0000 UTC FinishedAt: 2026-07-27 16:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 12:33:25 +0000 UTC FinishedAt: 2026-07-27 16:47:40 +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","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 12:33:25 +0000 UTC FinishedAt: 2026-07-27 12:34:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 12:33:25 +0000 UTC FinishedAt: 2026-07-27 12:33:36 +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","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowd88h5/series-workflowd88h5-convert-artifact-1952283310/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 12:34:14 +0000 UTC FinishedAt: 2026-07-27 12:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 12:34:14 +0000 UTC FinishedAt: 2026-07-27 12:59:56 +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:*2ef01ffe-1496-4799-a9db-dcc2a7107720,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-workflowd88h5/series-workflowd88h5-convert-artifact-1952283310/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": "7078dcb3-2a56-418e-9aa1-6b4685f68a80", "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-workflowd88h5/series-workflowd88h5-build-action-3580599828/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 12:34:14 +0000 UTC FinishedAt: 2026-07-27 12:59:46 +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:*2ef01ffe-1496-4799-a9db-dcc2a7107720,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-workflowd88h5/series-workflowd88h5-convert-artifact-1952283310/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": "7078dcb3-2a56-418e-9aa1-6b4685f68a80", "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-workflowd88h5/series-workflowd88h5-build-action-3580599828/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 12:59:56 +0000 UTC FinishedAt: 2026-07-27 12:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 12:59:56 +0000 UTC FinishedAt: 2026-07-27 12:59:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 12:59:56 +0000 UTC FinishedAt: 2026-07-27 13:00:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 12:59:56 +0000 UTC FinishedAt: 2026-07-27 13:00:03 +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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowd88h5/series-workflowd88h5-convert-artifact-1540686753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 13:00:06 +0000 UTC FinishedAt: 2026-07-27 13:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 13:00:06 +0000 UTC FinishedAt: 2026-07-27 13:01:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7078dcb3-2a56-418e-9aa1-6b4685f68a80,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-workflowd88h5/series-workflowd88h5-build-action-3580599828/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-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 13:02:08 +0000 UTC FinishedAt: 2026-07-27 13:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 13:02:08 +0000 UTC FinishedAt: 2026-07-27 13:02:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 13:02:08 +0000 UTC FinishedAt: 2026-07-27 13:36:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 13:02:08 +0000 UTC FinishedAt: 2026-07-27 13:36:52 +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:*2ef01ffe-1496-4799-a9db-dcc2a7107720,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-workflowd88h5/series-workflowd88h5-convert-artifact-1540686753/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": "07ea6dbd-c3f7-4e39-9536-9a8d7513755e", "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-workflowd88h5/series-workflowd88h5-build-action-3528404653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 13:02:08 +0000 UTC FinishedAt: 2026-07-27 13:36:40 +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:*2ef01ffe-1496-4799-a9db-dcc2a7107720,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-workflowd88h5/series-workflowd88h5-convert-artifact-1540686753/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": "07ea6dbd-c3f7-4e39-9536-9a8d7513755e", "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-workflowd88h5/series-workflowd88h5-build-action-3528404653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 13:36:52 +0000 UTC FinishedAt: 2026-07-27 13:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 13:36:53 +0000 UTC FinishedAt: 2026-07-27 13:36:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 13:36:53 +0000 UTC FinishedAt: 2026-07-27 13:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 13:36:53 +0000 UTC FinishedAt: 2026-07-27 13:38:54 +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:*07ea6dbd-c3f7-4e39-9536-9a8d7513755e,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-workflowd88h5/series-workflowd88h5-build-action-3528404653/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-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 16:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 16:47:40 +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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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:*7078dcb3-2a56-418e-9aa1-6b4685f68a80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07ea6dbd-c3f7-4e39-9536-9a8d7513755e,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-workflowd88h5/series-workflowd88h5-build-action-3580599828/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-workflowd88h5/series-workflowd88h5-build-action-3528404653/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 13:40:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 13:40:04 +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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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-workflowd88h5/series-workflowd88h5-convert-artifact-3415231030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 13:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 13:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 13:39:04 +0000 UTC FinishedAt: 2026-07-27 13:39:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 13:40:14 +0000 UTC FinishedAt: 2026-07-27 16:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd88h5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS","CONFIGFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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_init_acl","ocfs2_acl_init_prepare","ocfs2_acl_init_release","ocfs2_calc_xattr_init","ocfs2_xattr_set_handle","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","CONFIGFS_FS"],"series_id":"741c36f8-3725-4dcd-a5a2-46b216e94cfb","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 13:40:14 +0000 UTC FinishedAt: 2026-07-27 16:47:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7078dcb3-2a56-418e-9aa1-6b4685f68a80,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*07ea6dbd-c3f7-4e39-9536-9a8d7513755e,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-workflowd88h5/series-workflowd88h5-build-action-3580599828/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-workflowd88h5/series-workflowd88h5-build-action-3528404653/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-workflowd88h5/series-workflowd88h5-convert-artifact-3415231030/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,}