Name: series-workflow8c4h6 Phase: Succeeded StartedAt: 2026-09-09 11:18:23 +0000 UTC FinishedAt: 2026-09-09 15:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[0] Phase: Succeeded StartedAt: 2026-09-09 11:18:23 +0000 UTC FinishedAt: 2026-09-09 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[0].run-triage Phase: Succeeded StartedAt: 2026-09-09 11:18:23 +0000 UTC FinishedAt: 2026-09-09 11:37:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0725b7946601a5af57e7f25fa81906dd34eaa341", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0725b7946601a5af57e7f25fa81906dd34eaa341", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "dca74b8b-77e0-4a3f-8b23-425b82229521" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pudp_invalidate", "change_huge_pud" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O2NoYW5nZV9odWdlX3B1ZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXG5cblRoZXNlIGNoYW5nZXMgb25seSBtYW5pcHVsYXRlIGFyY2hpdGVjdHVyYWwgcGFnZSB0YWJsZSBlbnRyaWVzIChQVUQvUE1EL1BURSBiaXQtZmxhZ3MsIHBhZ2UgdGFibGUgZXN0YWJsaXNobWVudCwgYW5kIFRMQiBpbnZhbGlkYXRpb24pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0by9mcm9tIHVzZXJzcGFjZSwgYWx0ZXIgc3RydWN0IHBhZGRpbmcvaW5pdGlhbGl6YXRpb24sIG9yIGNyZWF0ZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgY291bGQgYmUgZXZhbHVhdGVkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9kZWJ1ZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDExOjM2OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjVhNTFiMGVmOTQ0MC4uOGE3Y2ExODYzNTk1YSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMTczLDYgJiM0MzsxNzMsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1RcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgUEFHRV9TSVpFXzRLQlxuIFx0c2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLXG4gXHRzZWxlY3QgSEFWRV9BUk1fU01DQ0NcbiBcdHNlbGVjdCBIQVZFX0FTTV9NT0RWRVJTSU9OU1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDYwMDA5MDVhMmU4NjUuLmZkYzMzODk3MDkzNGQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0yNDMsMTggJiM0MzsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdClcbiBcdHJldHVybiBwdGU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgY2xlYXJfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpXG4te1xuLVx0cG1kX3ZhbChwbWQpIFx1MDAyNj0gfnBncHJvdF92YWwocHJvdCk7XG4tXHRyZXR1cm4gcG1kO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHBtZF90IHNldF9wbWRfYml0KHBtZF90IHBtZCwgcGdwcm90X3QgcHJvdClcbi17XG4tXHRwbWRfdmFsKHBtZCkgfD0gcGdwcm90X3ZhbChwcm90KTtcbi1cdHJldHVybiBwbWQ7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGVfbm92bWEocHRlX3QgcHRlKVxuIHtcbiBcdHB0ZSA9IHNldF9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoUFRFX1dSSVRFKSk7XG5AQCAtNjE5LDExICYjNDM7NjA3LDEzIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21raHVnZShwbWRfdCBwbWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG4tI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpXHQoISEoKHBtZF92YWwocHRlKSBcdTAwMjYgUFRFX1NQRUNJQUwpKSlcbi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKVxuLXtcbi1cdHJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7XG4tfVxuJiM0MzsjZGVmaW5lIHBtZF9zcGVjaWFsKHBtZClcdHB0ZV9zcGVjaWFsKHBtZF9wdGUocG1kKSlcbiYjNDM7I2RlZmluZSBwbWRfbWtzcGVjaWFsKHBtZClcdHB0ZV9wbWQocHRlX21rc3BlY2lhbChwbWRfcHRlKHBtZCkpKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4mIzQzOyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKVx0cHRlX3NwZWNpYWwocHVkX3B0ZShwdWQpKVxuJiM0MzsjZGVmaW5lIHB1ZF9ta3NwZWNpYWwocHVkKVx0cHRlX3B1ZChwdGVfbWtzcGVjaWFsKHB1ZF9wdGUocHVkKSkpXG4gI2VuZGlmXG4gXG4gI2RlZmluZSBfX3BtZF90b19waHlzKHBtZClcdF9fcHRlX3RvX3BoeXMocG1kX3B0ZShwbWQpKVxuQEAgLTYzNCw4ICYjNDM7NjI0LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXG4gI2RlZmluZSBwdWRfeW91bmcocHVkKVx0XHRwdGVfeW91bmcocHVkX3B0ZShwdWQpKVxuICNkZWZpbmUgcHVkX21reW91bmcocHVkKVx0cHRlX3B1ZChwdGVfbWt5b3VuZyhwdWRfcHRlKHB1ZCkpKVxuICNkZWZpbmUgcHVkX21rd3JpdGVfbm92bWEocHVkKVx0cHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKVxuJiM0MzsjZGVmaW5lIHB1ZF9ta3dyaXRlKHB1ZClcdHB1ZF9ta3dyaXRlX25vdm1hKHB1ZClcbiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKVx0cHRlX3B1ZChwdGVfbWt2YWxpZF9rKHB1ZF9wdGUocHVkKSkpXG4gI2RlZmluZSBwdWRfd3JpdGUocHVkKVx0XHRwdGVfd3JpdGUocHVkX3B0ZShwdWQpKVxuJiM0MzsjZGVmaW5lIHB1ZF9kaXJ0eShwdWQpXHRcdHB0ZV9kaXJ0eShwdWRfcHRlKHB1ZCkpXG4mIzQzOyNkZWZpbmUgcHVkX3dycHJvdGVjdChwdWQpXHRwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSlcbiYjNDM7I2RlZmluZSBwdWRfbWtkaXJ0eShwdWQpXHRwdGVfcHVkKHB0ZV9ta2RpcnR5KHB1ZF9wdGUocHVkKSkpXG4mIzQzOyNkZWZpbmUgcHVkX21rb2xkKHB1ZClcdFx0cHRlX3B1ZChwdGVfbWtvbGQocHVkX3B0ZShwdWQpKSlcbiYjNDM7I2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZClcdHB0ZV9wdWQocHRlX21raW52YWxpZChwdWRfcHRlKHB1ZCkpKVxuJiM0MzsjZGVmaW5lIHB1ZF9ta2NsZWFuKHB1ZClcdHB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSlcbiBcbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta2h1Z2UocHVkX3QgcHVkKVxuIHtcbkBAIC04ODYsNiAmIzQzOzg4MywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVxuICNkZWZpbmUgcHVkX3VzZXIocHVkKVx0XHRwdGVfdXNlcihwdWRfcHRlKHB1ZCkpXG4gI2RlZmluZSBwdWRfdXNlcl9leGVjKHB1ZClcdHB0ZV91c2VyX2V4ZWMocHVkX3B0ZShwdWQpKVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfdGFibGUoX19wdWQocHVkX3ZhbChwdWQpIHwgUFRFX1ZBTElEKSk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdWQocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbkBAIC0xMjUyLDYgJiM0MzsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpXG4gXHRyZXR1cm4gcHRlX3BtZChwdGVfbW9kaWZ5KHBtZF9wdGUocG1kKSwgbmV3cHJvdCkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwdGVfcHVkKHB0ZV9tb2RpZnkocHVkX3B0ZShwdWQpLCBuZXdwcm90KSk7XG4mIzQzO31cbiYjNDM7XG4gZXh0ZXJuIGludCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFnc19hbnlzeihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG4gXHRcdFx0XHRcdCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5LFxuQEAgLTEyNzYsNiAmIzQzOzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCxcbiYjNDM7XHRcdFx0XHRcdHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3oodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwLFxuJiM0MztcdFx0XHRcdFx0ICAgICBwdWRfcHRlKGVudHJ5KSwgZGlydHksIFBVRF9TSVpFKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLXG4gc3RhdGljIGlubGluZSBib29sIHB0ZV91c2VyX2FjY2Vzc2libGVfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpXG4ge1xuQEAgLTEzNTAsNiAmIzQzOzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HICovXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwdWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0X2FuZF9jbGVhcl9hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHB0ZV90ICpwdGVwLFxuQEAgLTE1MTIsNiAmIzQzOzE1MzksMTUgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuJiM0MztzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxuJiM0Mzt7XG4mIzQzO1x0cGFnZV90YWJsZV9jaGVja19wdWRfc2V0KHZtYS1cdTAwM2V2bV9tbSwgYWRkcmVzcywgcHVkcCwgcHVkKTtcbiYjNDM7XHRyZXR1cm4gX19wdWQoeGNoZ19yZWxheGVkKFx1MDAyNnB1ZF92YWwoKnB1ZHApLCBwdWRfdmFsKHB1ZCkpKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnk6XG4gICpcdGJpdHMgMC0xOlx0cHJlc2VudCAobXVzdCBiZSB6ZXJvKVxuQEAgLTE1ODYsNiAmIzQzOzE2MjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcXFxuIFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHBtZCkgZG8geyB9IHdoaWxlICgwKVxuJiM0MzsjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHZtYSwgYWRkcmVzcywgcHVkKSBkbyB7IH0gd2hpbGUgKDApXG4gXG4gI2lmZGVmIENPTkZJR19BUk02NF9QQV9CSVRTXzUyXG4gI2RlZmluZSBwaHlzX3RvX3R0YnIoYWRkcilcdCgoKGFkZHIpIHwgKChhZGRyKSBcdTAwM2VcdTAwM2UgNDYpKSBcdTAwMjYgVFRCUl9CQUREUl9NQVNLXzUyKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbmluZGV4IGY0ZGI3ZDdmYmQ1YzYuLjU1ZDMzYzU1MzdmMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbkBAIC0xNDE5LDYgJiM0MzsxNDE5LDcgQEAgc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUE1EUF9JTlZBTElEQVRFXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgICAgcG1kX3QgKnBtZHApO1xuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA0MGIxZWQ0ZjNlYTg5Li4zMjdmYTM3ODAzMmI3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTE1OSw5ICYjNDM7MTE1OSw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21raW52YWxpZChwdWRfdCBwdWQpXG4gXHRyZXR1cm4gX19wdWQocHVkX3ZhbChwdWQpIFx1MDAyNiB+KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UX05PTkUpKTtcbiB9XG4gXG4tZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuLVxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpXG4ge1xuIFx0cmV0dXJuIHB0ZV9wdWQocHRlX21vZGlmeShwdWRfcHRlKHB1ZCksIG5ld3Byb3QpKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuYyBiL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jXG5pbmRleCA5YzQ0MjdkMGIxODc0Li4xNTZlMzg1ZTdkYjQ0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jXG5AQCAtMTU0LDE1ICYjNDM7MTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBwbWQ7XG4gfVxuIFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbi17XG4tXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XG4tXHRwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTtcbi1cbi1cdGZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IEhQQUdFX1BVRF9TSVpFKTtcbi1cdHJldHVybiBvbGQ7XG4tfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTM4Nyw5ICYjNDM7MTM4Nyw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApO1xuIFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgICBwdWRfdCAqcHVkcCk7XG4tXG4gLypcbiAgKiBQYWdlIHRhYmxlIHBhZ2VzIGFyZSBwYWdlLWFsaWduZWQuICBUaGUgbG93ZXIgaGFsZiBvZiB0aGUgdG9wXG4gICogbGV2ZWwgaXMgdXNlZCBmb3IgdXNlcnNwYWNlIGFuZCB0aGUgdG9wIGhhbGYgZm9yIHRoZSBrZXJuZWwuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5pbmRleCBjYjAzZjVhMmIyNDMzLi4wOTQ1OTA4NjMxZGM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbkBAIC01MTksMTggJiM0Mzs1MTksNiBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbi1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgICAgcHVkX3QgKnB1ZHApXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuLVx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4tXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyAmIzQzOyBIUEFHRV9QVURfU0laRSk7XG4tXHRyZXR1cm4gb2xkO1xuLX1cbi0jZW5kaWZcbi1cbiAvKipcbiAgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gUmVzZXJ2ZSBhIGhvbGUgaW4gdGhlIHRvcCBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmVcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCA4YzA5M2MxMTllNWE4Li4zMjE3MzAwNWIwODdmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMTMxOCw2ICYjNDM7MTMxOCwxMyBAQCBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kcCk7XG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuJiM0MztleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4mIzQzO1x0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX1NBTUVcbiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0XG4tLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbkBAIC0yMTcsNiAmIzQzOzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuJiM0MztwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiYjNDM7XHRcdCAgICAgIHB1ZF90ICpwdWRwKVxuJiM0Mzt7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuJiM0MztcdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xuJiM0MztcbiYjNDM7XHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyAmIzQzOyBIUEFHRV9QVURfU0laRSk7XG4mIzQzO1x0cmV0dXJuIG9sZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaFxuIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgIHBtZF90ICpwbWRwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O2NoYW5nZV9odWdlX3B1ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDExOjM2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGI1YTUxYjBlZjk0NDAuLjhhN2NhMTg2MzU5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfQVJDSF9USFJFQURfU1RSVUNUX1dISVRFTElTVAogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCCiAJc2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLCiAJc2VsZWN0IEhBVkVfQVJNX1NNQ0NDCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDYwMDA5MDVhMmU4NjUuLmZkYzMzODk3MDkzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNDMsMTggJiM0MzsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdCkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90IGNsZWFyX3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KQotewotCXBtZF92YWwocG1kKSAmYW1wOz0gfnBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQotc3RhdGljIGlubGluZSBwbWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpCi17Ci0JcG1kX3ZhbChwbWQpIHw9IHBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZV9ub3ZtYShwdGVfdCBwdGUpCiB7CiAJcHRlID0gc2V0X3B0ZV9iaXQocHRlLCBfX3BncHJvdChQVEVfV1JJVEUpKTsKQEAgLTYxOSwxMSAmIzQzOzYwNywxMyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta2h1Z2UocG1kX3QgcG1kKQogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUAotI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpCSghISgocG1kX3ZhbChwdGUpICZhbXA7IFBURV9TUEVDSUFMKSkpCi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQotewotCXJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7Ci19CiYjNDM7I2RlZmluZSBwbWRfc3BlY2lhbChwbWQpCXB0ZV9zcGVjaWFsKHBtZF9wdGUocG1kKSkKJiM0MzsjZGVmaW5lIHBtZF9ta3NwZWNpYWwocG1kKQlwdGVfcG1kKHB0ZV9ta3NwZWNpYWwocG1kX3B0ZShwbWQpKSkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzOyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKQlwdGVfc3BlY2lhbChwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfbWtzcGVjaWFsKHB1ZCkJcHRlX3B1ZChwdGVfbWtzcGVjaWFsKHB1ZF9wdGUocHVkKSkpCiAjZW5kaWYKIAogI2RlZmluZSBfX3BtZF90b19waHlzKHBtZCkJX19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpCkBAIC02MzQsOCAmIzQzOzYyNCwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQogI2RlZmluZSBwdWRfeW91bmcocHVkKQkJcHRlX3lvdW5nKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX21reW91bmcocHVkKQlwdGVfcHVkKHB0ZV9ta3lvdW5nKHB1ZF9wdGUocHVkKSkpCiAjZGVmaW5lIHB1ZF9ta3dyaXRlX25vdm1hKHB1ZCkJcHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rd3JpdGUocHVkKQlwdWRfbWt3cml0ZV9ub3ZtYShwdWQpCiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKQlwdGVfcHVkKHB0ZV9ta3ZhbGlkX2socHVkX3B0ZShwdWQpKSkKICNkZWZpbmUgcHVkX3dyaXRlKHB1ZCkJCXB0ZV93cml0ZShwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfZGlydHkocHVkKQkJcHRlX2RpcnR5KHB1ZF9wdGUocHVkKSkKJiM0MzsjZGVmaW5lIHB1ZF93cnByb3RlY3QocHVkKQlwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSkKJiM0MzsjZGVmaW5lIHB1ZF9ta2RpcnR5KHB1ZCkJcHRlX3B1ZChwdGVfbWtkaXJ0eShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rb2xkKHB1ZCkJCXB0ZV9wdWQocHRlX21rb2xkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZCkJcHRlX3B1ZChwdGVfbWtpbnZhbGlkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtjbGVhbihwdWQpCXB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSkKIAogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtodWdlKHB1ZF90IHB1ZCkKIHsKQEAgLTg4Niw2ICYjNDM7ODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpCiAjZGVmaW5lIHB1ZF91c2VyKHB1ZCkJCXB0ZV91c2VyKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX3VzZXJfZXhlYyhwdWQpCXB0ZV91c2VyX2V4ZWMocHVkX3B0ZShwdWQpKQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgJmFtcDsmYW1wOyAhcHVkX3RhYmxlKF9fcHVkKHB1ZF92YWwocHVkKSB8IFBURV9WQUxJRCkpOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpCkBAIC0xMjUyLDYgJiM0MzsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpCiAJcmV0dXJuIHB0ZV9wbWQocHRlX21vZGlmeShwbWRfcHRlKHBtZCksIG5ld3Byb3QpKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwomIzQzO30KJiM0MzsKIGV4dGVybiBpbnQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3ooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLAogCQkJCQkgcHRlX3QgZW50cnksIGludCBkaXJ0eSwKQEAgLTEyNzYsNiAmIzQzOzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsCiYjNDM7CQkJCQlwdWRfdCBlbnRyeSwgaW50IGRpcnR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCwKJiM0MzsJCQkJCSAgICAgcHVkX3B0ZShlbnRyeSksIGRpcnR5LCBQVURfU0laRSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLCiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKIHsKQEAgLTEzNTAsNiAmIzQzOzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyAqLwogCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHVkcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0X2FuZF9jbGVhcl9hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQkJICAgICAgIHB0ZV90ICpwdGVwLApAQCAtMTUxMiw2ICYjNDM7MTUzOSwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcGFnZV90YWJsZV9jaGVja19wdWRfc2V0KHZtYS0mZ3Q7dm1fbW0sIGFkZHJlc3MsIHB1ZHAsIHB1ZCk7CiYjNDM7CXJldHVybiBfX3B1ZCh4Y2hnX3JlbGF4ZWQoJmFtcDtwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeToKICAqCWJpdHMgMC0xOglwcmVzZW50IChtdXN0IGJlIHplcm8pCkBAIC0xNTg2LDYgJiM0MzsxNjIyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcCiAJdXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgYWRkcmVzcywgcG1kKSBkbyB7IH0gd2hpbGUgKDApCiYjNDM7I2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3B1ZCh2bWEsIGFkZHJlc3MsIHB1ZCkgZG8geyB9IHdoaWxlICgwKQogCiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTIKICNkZWZpbmUgcGh5c190b190dGJyKGFkZHIpCSgoKGFkZHIpIHwgKChhZGRyKSAmZ3Q7Jmd0OyA0NikpICZhbXA7IFRUQlJfQkFERFJfTUFTS181MikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKaW5kZXggZjRkYjdkN2ZiZDVjNi4uNTVkMzNjNTUzN2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTE0MTksNiAmIzQzOzE0MTksNyBAQCBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BNRFBfSU5WQUxJREFURQogZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgICBwbWRfdCAqcG1kcCk7CiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCSAgICAgcHVkX3QgKnB1ZHApOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDQwYjFlZDRmM2VhODkuLjMyN2ZhMzc4MDMyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMTU5LDkgJiM0MzsxMTU5LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtpbnZhbGlkKHB1ZF90IHB1ZCkKIAlyZXR1cm4gX19wdWQocHVkX3ZhbChwdWQpICZhbXA7IH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1RfTk9ORSkpOwogfQogCi1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHB1ZF90ICpwdWRwKTsKLQogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdCkKIHsKIAlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwppbmRleCA5YzQ0MjdkMGIxODc0Li4xNTZlMzg1ZTdkYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwpAQCAtMTU0LDE1ICYjNDM7MTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gcG1kOwogfQogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCi0JZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwotCXJldHVybiBvbGQ7Ci19CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM4Nyw5ICYjNDM7MTM4Nyw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApOwogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApOwotCiAvKgogICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcAogICogbGV2ZWwgaXMgdXNlZCBmb3IgdXNlcnNwYWNlIGFuZCB0aGUgdG9wIGhhbGYgZm9yIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNTE5LDE4ICYjNDM7NTE5LDYgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmYW1wOyZhbXA7IFwKLQlkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKQotcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCWZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IEhQQUdFX1BVRF9TSVpFKTsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KIC8qKgogICogcmVzZXJ2ZV90b3BfYWRkcmVzcyAtIFJlc2VydmUgYSBob2xlIGluIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggOGMwOTNjMTE5ZTVhOC4uMzIxNzMwMDViMDg3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKQEAgLTEzMTgsNiAmIzQzOzEzMTgsMTMgQEAgZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTsKICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiYjNDM7CQkJICAgICBwdWRfdCAqcHVkcCk7CiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FCiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpCiB7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0yMTcsNiAmIzQzOzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIH0KICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKJiM0MzsJCSAgICAgIHB1ZF90ICpwdWRwKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwomIzQzOwlwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTsKJiM0MzsKJiM0MzsJZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaAogcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICBwbWRfdCAqcG1kcCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDk2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwdWRwX2ludmFsaWRhdGVgIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHRhcmdldCBpcyBBTUQ2NCwgd2hpY2ggaXMgY3J1Y2lhbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGF0IGFyY2hpdGVjdHVyZS4KCkkgc2VlIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgcGd0YWJsZS5oYCBmaWxlcyBhbmQgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBwdWRwX2ludmFsaWRhdGVgLCB3aGljaCBzdWdnZXN0cyBhIG1vZGlmaWNhdGlvbiB0byBob3cgcGFnZSB0YWJsZSBlbnRyaWVzLCBzcGVjaWZpY2FsbHkgUFVEcyAoUGFnZSBVcHBlciBEaXJlY3RvcnkpLCBhcmUgaGFuZGxlZCBhbmQgaW52YWxpZGF0ZWQuCgpTcGVjaWZpY2FsbHksIEkgbm90ZSB0aGVzZSBrZXkgbW9kaWZpY2F0aW9uczoKCiogICBUaGUgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgY2hhbmdlOiBJdCBzZWxlY3RzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCB1bmRlciBjZXJ0YWluIGBQQUdFX1NJWkVfNEtCYCBjb25kaXRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGZvciB0aGUgbmV3LCBnZW5lcmFsaXplZCBgcHVkcF9pbnZhbGlkYXRlYCBhbmQgaW1wbGllcyBzb21lIEFSTTY0IHN5c3RlbXMgd2lsbCBiZW5lZml0IGZyb20gdGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uLgoqICAgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCBpcyBjaGFuZ2VkIHNpZ25pZmljYW50bHk6IEl0IHVwZGF0ZXMgc29tZSBtYWNyb3MvZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUFVEcywgZGVmaW5lcyBhbmQgdXBkYXRlcyBmdW5jdGlvbnMgKGUuZy4sIGBwdWRfbWt3cml0ZWAsIGBwdWRfZGlydHlgLCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYCkuIFRoZXNlIGFkZGl0aW9ucyBhcmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIHRhYmxlIGludmFsaWRhdGlvbi4gVGhlIGRlZmluaXRpb24gb2YgYHB1ZF90cmFuc19odWdlYCBpcyB2ZXJ5IHJlbGV2YW50IGluIHRoZSBjb250ZXh0IG9mIGh1Z2UgcGFnZXMuCiogICBUaGUgcmVtb3ZhbCBvZiBgcHVkcF9pbnZhbGlkYXRlYCBmcm9tIFJJU0MtViBhbmQgeDg2IGZpbGVzLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGFyZSBiZWluZyByZW1vdmVkLgoqICAgVGhlIGFkZGl0aW9uIG9mIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGd1YXJkZWQgYnkgYm90aCBgIV9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAuIFRoaXMgbWVhbnMgdGhlIG5ldyBnZW5lcmljIGltcGxlbWVudGF0aW9uIGlzIG5vdyBiZWluZyB1c2VkIGlmIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2ZXJzaW9uIGlzIGF2YWlsYWJsZSAqYW5kKiBpZiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgaGlnaGx5IHJlbGV2YW50IGZvciBBTUQ2NCwgYXMgVEhQIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgZmVhdHVyZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHg4NiBjaGFuZ2VzLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBtb3ZlcyBgcHVkcF9pbnZhbGlkYXRlYCBmcm9tIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgIHRvIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AuIFRoZSBjb2RlIGl0c2VsZiBsb29rcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLgoKVGhpcyBtZWFucyB4ODYgKEFNRDY0KSBpcyBub3cgdXNpbmcgdGhlIGdlbmVyaWMgdmVyc2lvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB4ODYgaGFzIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgZW5hYmxlZCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyB4ODZcXzY0LiBUaGlzIGdlbmVyaWMgaW1wbGVtZW50YXRpb24mIzM5O3MgaW5jbHVzaW9uIG1lYW5zIGl0JiMzOTtzIG5vdyBiZWluZyB1dGlsaXplZC4KCk5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiBgcHVkcF9pbnZhbGlkYXRlYCBpcyB1c2VkIGluIHRoZSBrZXJuZWwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMgYXJlIHJlbGV2YW50IHRvIGl0LiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29tcGxldGUgaW1wYWN0IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgYGdyZXBgIHRocm91Z2ggdGhlIGNvZGUgYmFzZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyb3VuZCBpdC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSB0byBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0IHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTE0MjA9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTE0MjItI2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjE0MjM6ZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTQyNC1cdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jPTE1NT1wbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2Ny1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM6MTY4OnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjktXHRcdCAgICAgIHB1ZF90ICpwdWRwKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEzMTc9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzIyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzI0LVx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjg0Mz1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg3MS1cdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoyODcyOlx0b2xkcHVkID0gcHVkcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcHVkcCk7XG5tbS9odWdlX21lbW9yeS5jLTI4NzMtXHRlbnRyeSA9IHB1ZF9tb2RpZnkob2xkcHVkLCBuZXdwcm90KTtcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMTI9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIyOnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIzLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQXVkaXQgQ2hlY2tsaXN0KioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBrZXJuZWwgY29kZSwgc28gdGhlIHVzdWFsIHN1c3BlY3RzIGFwcGx5LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnl0aGluZyB0aGF0IHRvdWNoZXMgY29yZSBzdWJzeXN0ZW1zOiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLCBCUEYsIHRoZSBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBhbmQgc3lzdGVtIGNhbGwgaGFuZGxpbmcuIFRob3NlIGFyZSB0aGUgaGlnaC1yaXNrIGFyZWFzLgoKTmV4dCB1cCwgcmVmYWN0b3JpbmdzIGFuZCBjb2RlIGNsZWFudXBzLiBUaGUgcnVsZSBpcyBjbGVhcjogKm5ldmVyKiBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZy4mIzM0OyBJZiB0aGVyZSYjMzk7cyBhbnkgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIEkgbmVlZCB0byB0cmVhdCBpdCBhcyBhIHBvdGVudGlhbCBidWcgc291cmNlLiBSZWZhY3RvcmluZ3MgY2FuIGludHJvZHVjZSBzdWJ0bGUsIGVhc2lseSBtaXNzZWQgcmVncmVzc2lvbnMuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIHdoZW4gbW9kaWZ5aW5nIHN0cnVjdHVyZXMsIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLiBJZiB0aGUgY29kZSAqY2FuKiBiZSByZWFjaGVkIGFuZCBleGVjdXRlZCwgaXQmIzM5O3MgZ2V0dGluZyBmdXp6ZWQuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50OiAqcmVhY2hhYmlsaXR5IGlzIGtpbmcqLiBGdXp6aW5nIGlzIG9ubHkgZWZmZWN0aXZlIGlmIHRoZSBjb2RlICpjYW4qIGFjdHVhbGx5IHJ1biBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2Agd2hpY2gsIGl0IHNlZW1zLCBoYXMgYSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZWAgdGhhdCByZXBsYWNlcyB0aGUgb25lIGluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLiBUaGVyZSBhcmUgYWxzbyBhcm02NCBjaGFuZ2VzLCBidXQgSSYjMzk7bSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGdlbmVyaWMgY2hhbmdlIHRoYXQmIzM5O3MgaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhbmQgYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYC4gU2luY2UgYW1kNjQgKmRvZXNuJiMzOTt0KiBkZWZpbmUgYF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAsIHRoaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyB3aGF0IHdlJiMzOTtsbCBiZSB1c2luZy4KClRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBvbiBhbWQ2NC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIHRoYXQgc3ltYm9sLCBhbmQgc2VlIHdoZXJlIHdlIGdvIGZyb20gdGhlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBuZXcgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgYW1kNjQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTEwMz1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4tLVxuYXJjaC9LY29uZmlnLTExMDUtXG5hcmNoL0tjb25maWc6MTEwNjpjb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC9LY29uZmlnLTExMDctXHRib29sXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE3NS1cdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzY6XHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXG5hcmNoL2FybTY0L0tjb25maWctMTc3LVx0c2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9ODc1PXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtODg1LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6ODg2OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtODg3LXN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc19odWdlKHB1ZF90IHB1ZClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaD0xNTM0PXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0MS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE1NDI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTQzLXN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9MTEwPWNvbmZpZyBQUENfVEhQXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE0LSAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTYtICAgICAgIHNlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFUyBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTUyLVx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBpZiA2NEJJVCBcdTAwMjZcdTAwMjYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTUzOlx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgNjRCSVQgXHUwMDI2XHUwMDI2IE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTE1NC1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgaWYgNjRCSVQgXHUwMDI2XHUwMDI2IFVTRVJGQVVMVEZEXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMTItXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3g4Ni9LY29uZmlnOjIxMzpcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0yMTQtXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQICAgICAgICAgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0yOTc9c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMDEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzAyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMy1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzNTc9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTM3MC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMzcxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzItc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oPTEyMD1zdGF0aWMgaW5saW5lIGJvb2wgZGF4X2FsaWduX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWxpZ24pXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMS17XG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oOjEyMjpcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCkpXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMy1cdFx0cmV0dXJuIHRydWU7XG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MTIwPXN0YXRpYyB2bV9mYXVsdF90IF9fZGV2X2RheF9wbWRfZmF1bHQoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMTYzLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM6MTY0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMTY1LXN0YXRpYyB2bV9mYXVsdF90IF9fZGV2X2RheF9wdWRfZmF1bHQoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MjEwPXN0YXRpYyB2bV9mYXVsdF90IF9fZGV2X2RheF9wdWRfZmF1bHQoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMjE0LX1cbmRyaXZlcnMvZGF4L2RldmljZS5jOjIxNTojZW5kaWYgLyogIUNPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yMTYtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTU9aW50IGNvcHlfaHVnZV9wdWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxOTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTIwLXZvaWQgaHVnZV9wdWRfc2V0X2FjY2Vzc2VkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDgzPXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfaXNfaHVnZShwdWRfdCBwdWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkyLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDkzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk0LWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI3MTA9c3RhdGljIGlubGluZSBwbWRfdCBmb2xpb19ta19wbWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgcGdwcm90X3QgcGdwcm90KVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yNzE0LVxuaW5jbHVkZS9saW51eC9tbS5oOjI3MTU6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5pbmNsdWRlL2xpbnV4L21tLmgtMjcxNi0vKipcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MjcyNj1zdGF0aWMgaW5saW5lIHB1ZF90IGZvbGlvX21rX3B1ZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwZ3Byb3RfdCBwZ3Byb3QpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTI3MjktfVxuaW5jbHVkZS9saW51eC9tbS5oOjI3MzA6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5pbmNsdWRlL2xpbnV4L21tLmgtMjczMS0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTIyNT1zdGF0aWMgaW5saW5lIHZvaWQgcG1kcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEyMzItI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX1NFVF9XUlBST1RFQ1RcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEyMzM6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjM0LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTI0OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjQ5OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTI1MC0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMzE3PWV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyMS0jaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEzMjMtZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIwODk9c3RhdGljIGlubGluZSBpbnQgcHVkX3dyaXRlKHB1ZF90IHB1ZClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDk2LSNpZiAhZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IFxcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMDk3Olx0IWRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDk4LXN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc19odWdlKHB1ZF90IHB1ZClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMTA0PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc191bnN0YWJsZShwdWRfdCAqcHVkKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxMDYtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIxMDc6XHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjEwOC1cdHB1ZF90IHB1ZHZhbCA9IHB1ZHBfZ2V0KHB1ZCk7XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMwNT1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBndGFibGVfbGV2ZWxfdG9fc3RyKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzQyLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjM0MzojZGVmaW5lIGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjM0NC0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaD0zND1lbnVtIHZtX2V2ZW50X2l0ZW0geyBQR1BHSU4sIFBHUEdPVVQsIFBTV1BJTiwgUFNXUE9VVCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC0xMDMtXHRcdFRIUF9TQ0FOX0VYQ0VFRF9TSEFSRURfUFRFLFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg6MTA0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmgtMTA1LVx0XHRUSFBfU1BMSVRfUFVELFxuLS1cbm1tL0tjb25maWc9MTAwOT1jb25maWcgSEFWRV9HSUdBTlRJQ19GT0xJT1Ncbm1tL0tjb25maWctMTAxMC1cdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXG5tbS9LY29uZmlnOjEwMTE6XHRcdCAoWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9LY29uZmlnLTEwMTItXG4tLVxubW0vS2NvbmZpZz0xMDI1PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbm1tL0tjb25maWctMTAyNi1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyNzpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vS2NvbmZpZy0xMDI4LVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0yODI9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTI5OC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoyOTk6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMzAwLXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeClcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NDA1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy00MTktfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyMDojZWxzZSAgLyogIUNPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDIxLXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeCkgeyB9XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDI0OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNS0jZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05MDU9c3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTMzLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjkzNDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MzUtc3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTUzLX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTQ6I2Vsc2UgIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1NS1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTY6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTU3LSNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4tLVxubW0vaG1tLmM9NDAzPXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9obW0uYy00NzktXG5tbS9obW0uYzo0ODA6I2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9obW0uYy00ODEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF90b19obW1fcGZuX2ZsYWdzKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTc0OT1FWFBPUlRfU1lNQk9MX0dQTCh2bWZfaW5zZXJ0X2ZvbGlvX3BtZCk7XG5tbS9odWdlX21lbW9yeS5jLTE3NTAtXG5tbS9odWdlX21lbW9yeS5jOjE3NTE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9odWdlX21lbW9yeS5jLTE3NTItc3RhdGljIHB1ZF90IG1heWJlX3B1ZF9ta3dyaXRlKHB1ZF90IHB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xODY1PUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcHVkKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTg2NjojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2h1Z2VfbWVtb3J5LmMtMTg2Ny1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTE5NTA9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMDYxLVxubW0vaHVnZV9tZW1vcnkuYzoyMDYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYy0yMDYzLXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMTExPXZvaWQgaHVnZV9wdWRfc2V0X2FjY2Vzc2VkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIxMjItfVxubW0vaHVnZV9tZW1vcnkuYzoyMTIzOiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vaHVnZV9tZW1vcnkuYy0yMTI0LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjczND1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg0MS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg0MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0My1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzAzMz1zcGlubG9ja190ICpfX3B1ZF90cmFuc19odWdlX2xvY2socHVkX3QgKnB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMDQzLVxubW0vaHVnZV9tZW1vcnkuYzozMDQ0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYy0zMDQ1LWludCB6YXBfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMTMyPXZvaWQgX19zcGxpdF9odWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxMzUtfVxubW0vaHVnZV9tZW1vcnkuYzozMTM2OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vaHVnZV9tZW1vcnkuYy0zMTM3LVxuLS1cbm1tL21hcHBpbmdfZGlydHlfaGVscGVycy5jPTE0OD1zdGF0aWMgaW50IHdwX2NsZWFuX3B1ZF9lbnRyeShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hcHBpbmdfZGlydHlfaGVscGVycy5jLTE1MC17XG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYzoxNTE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYy0xNTItXHRwdWRfdCBwdWR2YWwgPSBwdWRwX2dldChwdWQpO1xuLS1cbm1tL21lbW9yeS5jPTY0MjE9c3RhdGljIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTY0MjMtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmM6NjQyNDpcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9tZW1vcnkuYy02NDI1LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuLS1cbm1tL21lbW9yeS5jPTY0MzU9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKVxuLS1cbm1tL21lbW9yeS5jLTY0MzctI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmM6NjQzODpcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9tZW1vcnkuYy02NDM5LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuLS1cbm1tL21lbW9yeS5jLTY0NTQtXHRfX3NwbGl0X2h1Z2VfcHVkKHZtYSwgdm1mLVx1MDAzZXB1ZCwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vbWVtb3J5LmM6NjQ1NTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vbWVtb3J5LmMtNjQ1Ni1cdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcbi0tXG5tbS9tcmVtYXAuYz00Nzk9c3RhdGljIGlubGluZSBib29sIG1vdmVfbm9ybWFsX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxuLS1cbm1tL21yZW1hcC5jLTQ4NS1cbm1tL21yZW1hcC5jOjQ4NjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxubW0vbXJlbWFwLmMtNDg3LXN0YXRpYyBib29sIG1vdmVfaHVnZV9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0xNDE9cG1kX3QgcG1kcF9odWdlX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTUxLVxubW0vcGd0YWJsZS1nZW5lcmljLmM6MTUyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTUzLXB1ZF90IHB1ZHBfaHVnZV9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jPTIxMj1wbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMjAtI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjIyMTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIyMi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9ybWFwLmM9MTc3MT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNzc0LSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG5tbS9ybWFwLmM6MTc3NTpcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9ybWFwLmMtMTc3Ni1cdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUFVEX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUFVEKTtcbi0tXG5tbS9ybWFwLmM9MTkzOT12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3B1ZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTk0Mi0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBcXFxubW0vcm1hcC5jOjE5NDM6XHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxubW0vcm1hcC5jLTE5NDQtXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QVURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuLS1cbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTQzMC1cdFtJKFRIUF9TQ0FOX0VYQ0VFRF9TSEFSRURfUFRFKV1cdFx0PSBcJiMzNDt0aHBfc2Nhbl9leGNlZWRfc2hhcmVfcHRlXCYjMzQ7LFxubW0vdm1zdGF0LmM6MTQzMTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL3Ztc3RhdC5jLTE0MzItXHRbSShUSFBfU1BMSVRfUFVEKV1cdFx0XHQ9IFwmIzM0O3RocF9zcGxpdF9wdWRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBhZmZlY3RzIGEgcHJldHR5IGJyb2FkIHN3YXRoZSBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHk6IEFSTTY0LCBQb3dlclBDLCBSSVNDLVYsIGFuZCB4ODYsIGFsb25nIHdpdGggc29tZSBjb3JlIGBwZ3RhYmxlYCBoZWFkZXJzIGFuZCBnZW5lcmljIGNvZGUuIEl0IGludHJvZHVjZXMgYSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGVgIGZ1bmN0aW9uIGludG8gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIFRoaXMgbWVhbnMgbG9naWMgdGhhdCB1c2VkIHRvIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpcyBub3cgY2VudHJhbGl6ZWQuIEl0IGFsc28gaW1wbGllcyBhIGZhaXIgYW1vdW50IG9mIHBvdGVudGlhbCBjcm9zcy1hcmNoaXRlY3R1cmUgYmVoYXZpb3IgdGhhdCBuZWVkcyBzY3J1dGlueS4KClRoZSBpbnRyb2R1Y3Rpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZWAsIGNvdXBsZWQgd2l0aCB0aGUgcmVtb3ZhbCBvZiBhcmNoLXNwZWNpZmljIHZlcnNpb25zLCBqdW1wcyBvdXQuIFRoaXMgZ2VuZXJpYyBmdW5jdGlvbiAqaXRzZWxmKiBjb250YWlucyBgVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO2AsIGEgY3JpdGljYWwgcnVudGltZSBhc3NlcnRpb24uIFRoaXMgaXMgYSB2ZXJ5IHN0cm9uZyBpbmRpY2F0b3IsIGdpdmVuIHRoZSBmdXp6aW5nIHJ1bGVzOiAmIzM0O1J1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLiYjMzQ7IFRoZSBjaGVjayBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBwYWdlIHRhYmxlIGVudHJpZXMsIHdoaWNoIGNvdWxkIGJlIHZlcnkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuCgpUaGUgcnVsZSBzZXQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIGBtbS9gIGFzIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGF0IGRpcmVjdG9yeSBkaXJlY3RseS4gVGhlIGZhY3QgdGhhdCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBpcyB1c2VkIGluIGBtbS9odWdlX21lbW9yeS5jYCB3aXRoaW4gYGNoYW5nZV9odWdlX3B1ZGAgZnVydGhlciByZWluZm9yY2VzIHRoZSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhhdCBhcmVhLiBUaGUgdXNlIGNhc2UgaXMgYGNoYW5nZV9odWdlX3B1ZGAsIHdoaWNoIGlzIGEga2V5IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGZvciBoYW5kbGluZyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHdlIG5lZWQgdG8gZnV6ei4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgZGV0YWlscyB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYHB1ZHBfaW52YWxpZGF0ZWAgYW5kIHNlZSBleGFjdGx5IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjaGFuZ2VfaHVnZV9wdWRgLiBVbmRlcnN0YW5kaW5nIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgaXMgY3JpdGljYWwgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYW5nZV9odWdlX3B1ZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTI3MzQ9aW50IGNoYW5nZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI4NDItI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9odWdlX21lbW9yeS5jOjI4NDM6aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0NC1cdFx0ICAgIHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IG5ld3Byb3QsXG4tLVxubW0vbXByb3RlY3QuYz01NzQ9c3RhdGljIGlubGluZSBsb25nIGNoYW5nZV9wdWRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tcHJvdGVjdC5jLTYxMS1cdFx0XHR9IGVsc2Uge1xubW0vbXByb3RlY3QuYzo2MTI6XHRcdFx0XHRyZXQgPSBjaGFuZ2VfaHVnZV9wdWQodGxiLCB2bWEsIHB1ZHAsXG5tbS9tcHJvdGVjdC5jLTYxMy1cdFx0XHRcdFx0XHQgICAgICBhZGRyLCBuZXdwcm90LCBjcF9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYHB1ZHBfaW52YWxpZGF0ZWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHB1ZHBfaW52YWxpZGF0ZWAsIHNvIEkmIzM5O2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AuIEFscmlnaHQsIGxvb2tzIGxpa2UgaXQgKmlzKiBhIG5vbi1zdGF0aWMgc3ltYm9sLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBHb29kLiBOb3csIGV4YW1pbmluZyB0aGUgY29kZSBibG9jaywgaXQmIzM5O3MgZGVmaW5lZCBjb25kaXRpb25hbGx5OiBpdCB1c2VzIGFuIGAjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgZ3VhcmQgYW5kIGFuIGAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURgLiBJIHNlZSBhIGNhbGwgdG8gYGZsdXNoX3B1ZF90bGJfcmFuZ2VgLCB0aGF0JiMzOTtzIGFuIGltcG9ydGFudCBzaWduYWwuIEFuZCBJIHNlZSB0aGF0IGBwdWRwX2ludmFsaWRhdGVgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGBjaGFuZ2VfaHVnZV9wdWRgIGZ1bmN0aW9uLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNvIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHg4Nl82NC9hbWQ2NCBhcmNoaXRlY3R1cmVzLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCwgdGhhdCYjMzk7cyBjbGVhci4gQnV0IHRoZSBtb3JlIGNydWNpYWwgZGV0YWlsIGlzIHRoYXQgYENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBpcyBzZWxlY3RlZCBieSBgWDg2XzY0YCAob3IgcmF0aGVyIHdoZW4gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2VsZWN0ZWQpLiBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgaXMga2V5IGhlcmUuIFRvIGJlIHN1cmUgbGV0JiMzOTtzIGFsc28gZXhhbWluZSBgbW0vS2NvbmZpZ2AgYXJvdW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM0LVxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzYtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1OC1cbm1tL0tjb25maWc6ODU5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NjAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjUtXG5tbS9LY29uZmlnOjg2NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Ny1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzQtXG5tbS9LY29uZmlnOjg3NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzYtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg4Mj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5MS1cbm1tL0tjb25maWc6ODkyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkzLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDEtXG5tbS9LY29uZmlnOjkwMjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDMtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDktXG5tbS9LY29uZmlnOjkxMDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkxMS1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE3LVxubW0vS2NvbmZpZzo5MTg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE5LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI3PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTM2LVxubW0vS2NvbmZpZzo5Mzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzgtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0NS1cbm1tL0tjb25maWc6OTQ2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Ny1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1My1cbm1tL0tjb25maWc6OTU0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTU1LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjEtXG5tbS9LY29uZmlnOjk2MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjMtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBpcyBiZWluZyBjb21waWxlZC4gRmlyc3Qgc3RlcD8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aDogdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVzaWRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoaWNoIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGBwZ3RhYmxlLWdlbmVyaWMuY2AuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBidWlsZCBwcm9jZXNzIG9yIGlkZW50aWZ5aW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBiYXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BndGFibGUtZ2VuZXJpYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxuLS1cbm1tL01ha2VmaWxlLTM5LVx0XHRcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxubW0vTWFrZWZpbGU6NDA6XHRcdFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXG5tbS9NYWtlZmlsZS00MS1cbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yLS8qXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzozOiAqICBtbS9wZ3RhYmxlLWdlbmVyaWMuY1xubW0vcGd0YWJsZS1nZW5lcmljLmMtNC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYzNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgQ29uZmlndXJhdGlvbiBhbmQgQ2FsbGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYG1tL0tjb25maWdgIGZpbGUgYW5kIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBkZXBlbmRzIG9uIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTU1VYC4gT24gYW4geDg2XzY0IHN5c3RlbSwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNpbmNlIGl0JiMzOTtzIGFuIGFtZDY0IHNldHVwLCBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgZ2V0cyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIGBYODZfNjRgIGlzIGRlZmluZWQuIFRoZXJlZm9yZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoaXMgd2hvbGUgY29kZSBwYXRoIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQsIHdobyBjYWxscyBpdCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjYWxsZXJzLiBJJiMzOTtsbCBtb3ZlIG9uIHRvIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHdoZXJlIGBwdWRwX2ludmFsaWRhdGVgIGlzIGNhbGxlZC4gQWgsIHRoZXJlIGl0IGlzISBgY2hhbmdlX2h1Z2VfcHVkYCBjYWxscyBgcHVkcF9pbnZhbGlkYXRlYC4gSSBzZWUgdGhhdCBgY2hhbmdlX2h1Z2VfcHVkYCBpcyBpbiB0dXJuIGNhbGxlZCB3aXRoaW4gYG1tL21wcm90ZWN0LmNgIGZyb20gYGNoYW5nZV9wdWRfcmFuZ2VgLiBBbmQgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBjaGFuZ2VfcHVkX3JhbmdlYCBpcyBwYXJ0IG9mIGBjaGFuZ2VfcHJvdGVjdGlvbl9yYW5nZWAsIHdoaWNoIGlzIHVzZWQgYnkgYG1wcm90ZWN0X2ZpeHVwYCwgYGRvX21wcm90ZWN0X3BrZXlgIGFuZCB1bHRpbWF0ZWx5LCBgc3lzX21wcm90ZWN0YC4gVGhpcyBpbXBsaWVzIHRoYXQgcHJvdGVjdGlvbiBtb2RpZmljYXRpb25zIG9uIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIHNwZWNpZmljYWxseSBhdCB0aGUgUFVEIGxldmVsLCB0cmlnZ2VyIGBjaGFuZ2VfaHVnZV9wdWRgLgoKTmV4dCwgSSYjMzk7bGwgYnJvYWRlbiBteSBzZWFyY2guIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGNoZWNrIHRvIHNlZSBpZiBgcHVkcF9pbnZhbGlkYXRlYCBvciBgY2hhbmdlX2h1Z2VfcHVkYCBhcmUgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTE0MjA9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTE0MjItI2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjE0MjM6ZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTQyNC1cdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jPTE1NT1wbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2Ny1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM6MTY4OnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjktXHRcdCAgICAgIHB1ZF90ICpwdWRwKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEzMTc9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzIyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzI0LVx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjg0Mz1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg3MS1cdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoyODcyOlx0b2xkcHVkID0gcHVkcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcHVkcCk7XG5tbS9odWdlX21lbW9yeS5jLTI4NzMtXHRlbnRyeSA9IHB1ZF9tb2RpZnkob2xkcHVkLCBuZXdwcm90KTtcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMTI9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIyOnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIzLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGNoYW5nZV9odWdlX3B1ZGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgZGVmaW5pdGVseSB0byBhdWRpdCB0aGUgY2FsbHMgdG8gdGhhdCBgY2hhbmdlX2h1Z2VfcHVkYCBmdW5jdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiAqd2hvKiBpcyB1c2luZyBpdCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIHRoZXkmIzM5O3JlIHVzaW5nIGl0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgZXZlcnkgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBmdW5jdGlvbiBjYWxsOyBpdCYjMzk7cyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQsIG9yIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tIHNvbWUgZGVlcGx5IG5lc3RlZCwgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aD8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8ga25vdy4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGltcGFjdCB0aGlzIGZ1bmN0aW9uIGNhbiBtYWtlIGFuZCBob3cgaXRzIGltcGxlbWVudGF0aW9uIG1heSBhZmZlY3QgdGhlIGxhcmdlciBzeXN0ZW0sIGFuZCBhbGxvd3MgbWUgdG8gYmVnaW4gdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGFueSBjaGFuZ2VzIHdpbGwgcmlwcGxlIG91dHdhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VfaHVnZV9wdWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDgzPXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfaXNfaHVnZShwdWRfdCBwdWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkzLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk0OmludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTUtXHRcdCAgICBwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ3Byb3RfdCBuZXdwcm90LFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ5OD1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk5OmNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUwMC1cdFx0cHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgbmV3cHJvdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03OTI9c3RhdGljIGlubGluZSB2b2lkIF9fc3BsaXRfaHVnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzk2LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Nzk3OnN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzk4LVx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZHAsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNzM0PWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yODQyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYzoyODQzOmludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTI4NDQtXHRcdCAgICBwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ3Byb3RfdCBuZXdwcm90LFxuLS1cbm1tL21wcm90ZWN0LmM9NTc0PXN0YXRpYyBpbmxpbmUgbG9uZyBjaGFuZ2VfcHVkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbXByb3RlY3QuYy02MTEtXHRcdFx0fSBlbHNlIHtcbm1tL21wcm90ZWN0LmM6NjEyOlx0XHRcdFx0cmV0ID0gY2hhbmdlX2h1Z2VfcHVkKHRsYiwgdm1hLCBwdWRwLFxubW0vbXByb3RlY3QuYy02MTMtXHRcdFx0XHRcdFx0ICAgICAgYWRkciwgbmV3cHJvdCwgY3BfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk4MgoJCQkJCQkJb3V0cHV0OiAxNDIKCQkJCQkJCXRob3VnaHRzOiAzODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYHB1ZHBfaW52YWxpZGF0ZWAgYW5kIGBjaGFuZ2VfaHVnZV9wdWRgLiBJIHNlZSB0aGF0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0IGFuZCB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgYmVjYXVzZSB0aGF0IGZpbGUgY29tcGlsZXMgZm9yIGFtZDY0ICp3aGVuKiBgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURgIGlzIGVuYWJsZWQsIHdoaWNoIGluIHR1cm4gaXMgbGlua2VkIHRvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpOb3csIEkmIzM5O20gbm90aW5nIHRoYXQgYHB1ZHBfaW52YWxpZGF0ZWAgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggcGFnZSB0YWJsZSBlbnRyeSBtYW5pcHVsYXRpb24gYW5kIFRMQiBpbnZhbGlkYXRpb24uIEl0IGNvbnRhaW5zIGBWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSlgLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gUnVudGltZSBhc3NlcnRpb25zIGxpa2UgdGhpcyBvZnRlbiBpbmRpY2F0ZSBhcmVhcyB0aGF0IGFyZSBwcm9uZSB0byBzdWJ0bGUgYnVncyBvciBjb3JuZXIgY2FzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBHaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYGNoYW5nZV9odWdlX3B1ZGAsIHdoaWNoIEkgdW5kZXJzdGFuZCBoYW5kbGVzIGh1Z2UgcGFnZSBvcGVyYXRpb25zLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYGNoYW5nZV9odWdlX3B1ZGAgaXMgc3VmZmljaWVudGx5IGhpZ2guIFRoZSBrZXkgZWxlbWVudHMgdG8gdHJhY2sgYXJlIGRlZmluaXRlbHkgYHB1ZHBfaW52YWxpZGF0ZWAsIGBjaGFuZ2VfaHVnZV9wdWRgLCBhbmQgdGhlIHVuZGVybHlpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQgbWUgYXNzZW1ibGUgdGhlIEpTT04gb3V0cHV0IGZvciBgc2V0LXJlc3VsdHNgLiBUaGUgc3RydWN0dXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6CgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUKKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyYjMzQ7cHVkcFxfaW52YWxpZGF0ZSYjMzQ7LCAmIzM0O2NoYW5nZVxfaHVnZVxfcHVkJiMzNDtdCiogICBgRW5hYmxlQ29uZmlnc2A6IFxbJiMzNDtUUkFOU1BBUkVOVFxfSFVHRVBBR0UmIzM0O10KKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlKClgIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgKHVzZWQgYnkgeDg2L2FtZDY0IHdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhdCBQVUQgbGV2ZWwgYXJlIHN1cHBvcnRlZCkgcmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbW9kaWZpZXMgcGFnZSB0YWJsZSBoYW5kbGluZyBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChgVk1fV0FSTl9PTl9PTkNFYCkgcmVhY2hhYmxlIGR1cmluZyBodWdlIFBVRCBvcGVyYXRpb25zIHN1Y2ggYXMgYGNoYW5nZV9odWdlX3B1ZCgpYCBvbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiYjMzQ7CgpBbHJpZ2h0LCB3aXRoIHRoYXQgaW5mb3JtYXRpb24gYXNzZW1ibGVkLCBJJiMzOTttIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLiBUaGlzIHNob3VsZCBwcm92aWRlIGVub3VnaCBkZXRhaWwgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgZnV6emluZyBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwdWRwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7Y2hhbmdlX2h1Z2VfcHVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHB1ZHBfaW52YWxpZGF0ZSgpIGluIG1tL3BndGFibGUtZ2VuZXJpYy5jIChyZXBsYWNpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvbiB4ODYgYW5kIHJpc2N2KSwgd2hpY2ggaXMgdXNlZCBvbiBhbWQ2NCB3aGVuIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXQgUFVEIGxldmVsIGFyZSBlbmFibGVkLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCBpbmNsdWRlcyBydW50aW1lIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkgaW4gcmVhY2hhYmxlIHBhdGhzIGV4ZWN1dGVkIGJ5IGNoYW5nZV9odWdlX3B1ZCgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3B1ZHBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtjaGFuZ2VfaHVnZV9wdWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgcHVkcF9pbnZhbGlkYXRlKCkgaW4gbW0vcGd0YWJsZS1nZW5lcmljLmMgKHJlcGxhY2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9uIHg4NiBhbmQgcmlzY3YpLCB3aGljaCBpcyB1c2VkIG9uIGFtZDY0IHdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhdCBQVUQgbGV2ZWwgYXJlIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGluY2x1ZGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKSBpbiByZWFjaGFibGUgcGF0aHMgZXhlY3V0ZWQgYnkgY2hhbmdlX2h1Z2VfcHVkKCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdXBwb3J0IGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgUFVEcyBhbmQgUFVEIFBGTk1BUCBvbiBhcm02NCwgd2hpbGUgY29uc29saWRhdGluZyB0aGUgZ2VuZXJpYyBgcHVkcF9pbnZhbGlkYXRlKClgIGltcGxlbWVudGF0aW9uIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgYWNyb3NzIGFyY2hpdGVjdHVyZXMgKHg4NiwgcmlzY3YsIHBvd2VycGMpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBhcmNoaXRlY3R1cmFsIHBhZ2UgdGFibGUgZW50cmllcyAoUFVEL1BNRC9QVEUgYml0LWZsYWdzLCBwYWdlIHRhYmxlIGVzdGFibGlzaG1lbnQsIGFuZCBUTEIgaW52YWxpZGF0aW9uKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8vZnJvbSB1c2Vyc3BhY2UsIGFsdGVyIHN0cnVjdCBwYWRkaW5nL2luaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGNvdWxkIGJlIGV2YWx1YXRlZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vZGVidWcgYnVpbGRzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDExOjM2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGI1YTUxYjBlZjk0NDAuLjhhN2NhMTg2MzU5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfQVJDSF9USFJFQURfU1RSVUNUX1dISVRFTElTVAogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCCiAJc2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLCiAJc2VsZWN0IEhBVkVfQVJNX1NNQ0NDCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDYwMDA5MDVhMmU4NjUuLmZkYzMzODk3MDkzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNDMsMTggJiM0MzsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdCkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90IGNsZWFyX3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KQotewotCXBtZF92YWwocG1kKSAmYW1wOz0gfnBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQotc3RhdGljIGlubGluZSBwbWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpCi17Ci0JcG1kX3ZhbChwbWQpIHw9IHBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZV9ub3ZtYShwdGVfdCBwdGUpCiB7CiAJcHRlID0gc2V0X3B0ZV9iaXQocHRlLCBfX3BncHJvdChQVEVfV1JJVEUpKTsKQEAgLTYxOSwxMSAmIzQzOzYwNywxMyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta2h1Z2UocG1kX3QgcG1kKQogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUAotI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpCSghISgocG1kX3ZhbChwdGUpICZhbXA7IFBURV9TUEVDSUFMKSkpCi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQotewotCXJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7Ci19CiYjNDM7I2RlZmluZSBwbWRfc3BlY2lhbChwbWQpCXB0ZV9zcGVjaWFsKHBtZF9wdGUocG1kKSkKJiM0MzsjZGVmaW5lIHBtZF9ta3NwZWNpYWwocG1kKQlwdGVfcG1kKHB0ZV9ta3NwZWNpYWwocG1kX3B0ZShwbWQpKSkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzOyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKQlwdGVfc3BlY2lhbChwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfbWtzcGVjaWFsKHB1ZCkJcHRlX3B1ZChwdGVfbWtzcGVjaWFsKHB1ZF9wdGUocHVkKSkpCiAjZW5kaWYKIAogI2RlZmluZSBfX3BtZF90b19waHlzKHBtZCkJX19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpCkBAIC02MzQsOCAmIzQzOzYyNCwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQogI2RlZmluZSBwdWRfeW91bmcocHVkKQkJcHRlX3lvdW5nKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX21reW91bmcocHVkKQlwdGVfcHVkKHB0ZV9ta3lvdW5nKHB1ZF9wdGUocHVkKSkpCiAjZGVmaW5lIHB1ZF9ta3dyaXRlX25vdm1hKHB1ZCkJcHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rd3JpdGUocHVkKQlwdWRfbWt3cml0ZV9ub3ZtYShwdWQpCiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKQlwdGVfcHVkKHB0ZV9ta3ZhbGlkX2socHVkX3B0ZShwdWQpKSkKICNkZWZpbmUgcHVkX3dyaXRlKHB1ZCkJCXB0ZV93cml0ZShwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfZGlydHkocHVkKQkJcHRlX2RpcnR5KHB1ZF9wdGUocHVkKSkKJiM0MzsjZGVmaW5lIHB1ZF93cnByb3RlY3QocHVkKQlwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSkKJiM0MzsjZGVmaW5lIHB1ZF9ta2RpcnR5KHB1ZCkJcHRlX3B1ZChwdGVfbWtkaXJ0eShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rb2xkKHB1ZCkJCXB0ZV9wdWQocHRlX21rb2xkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZCkJcHRlX3B1ZChwdGVfbWtpbnZhbGlkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtjbGVhbihwdWQpCXB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSkKIAogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtodWdlKHB1ZF90IHB1ZCkKIHsKQEAgLTg4Niw2ICYjNDM7ODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpCiAjZGVmaW5lIHB1ZF91c2VyKHB1ZCkJCXB0ZV91c2VyKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX3VzZXJfZXhlYyhwdWQpCXB0ZV91c2VyX2V4ZWMocHVkX3B0ZShwdWQpKQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgJmFtcDsmYW1wOyAhcHVkX3RhYmxlKF9fcHVkKHB1ZF92YWwocHVkKSB8IFBURV9WQUxJRCkpOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpCkBAIC0xMjUyLDYgJiM0MzsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpCiAJcmV0dXJuIHB0ZV9wbWQocHRlX21vZGlmeShwbWRfcHRlKHBtZCksIG5ld3Byb3QpKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwomIzQzO30KJiM0MzsKIGV4dGVybiBpbnQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3ooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLAogCQkJCQkgcHRlX3QgZW50cnksIGludCBkaXJ0eSwKQEAgLTEyNzYsNiAmIzQzOzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsCiYjNDM7CQkJCQlwdWRfdCBlbnRyeSwgaW50IGRpcnR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCwKJiM0MzsJCQkJCSAgICAgcHVkX3B0ZShlbnRyeSksIGRpcnR5LCBQVURfU0laRSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLCiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKIHsKQEAgLTEzNTAsNiAmIzQzOzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyAqLwogCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHVkcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0X2FuZF9jbGVhcl9hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQkJICAgICAgIHB0ZV90ICpwdGVwLApAQCAtMTUxMiw2ICYjNDM7MTUzOSwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcGFnZV90YWJsZV9jaGVja19wdWRfc2V0KHZtYS0mZ3Q7dm1fbW0sIGFkZHJlc3MsIHB1ZHAsIHB1ZCk7CiYjNDM7CXJldHVybiBfX3B1ZCh4Y2hnX3JlbGF4ZWQoJmFtcDtwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeToKICAqCWJpdHMgMC0xOglwcmVzZW50IChtdXN0IGJlIHplcm8pCkBAIC0xNTg2LDYgJiM0MzsxNjIyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcCiAJdXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgYWRkcmVzcywgcG1kKSBkbyB7IH0gd2hpbGUgKDApCiYjNDM7I2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3B1ZCh2bWEsIGFkZHJlc3MsIHB1ZCkgZG8geyB9IHdoaWxlICgwKQogCiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTIKICNkZWZpbmUgcGh5c190b190dGJyKGFkZHIpCSgoKGFkZHIpIHwgKChhZGRyKSAmZ3Q7Jmd0OyA0NikpICZhbXA7IFRUQlJfQkFERFJfTUFTS181MikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKaW5kZXggZjRkYjdkN2ZiZDVjNi4uNTVkMzNjNTUzN2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTE0MTksNiAmIzQzOzE0MTksNyBAQCBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BNRFBfSU5WQUxJREFURQogZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgICBwbWRfdCAqcG1kcCk7CiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCSAgICAgcHVkX3QgKnB1ZHApOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDQwYjFlZDRmM2VhODkuLjMyN2ZhMzc4MDMyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMTU5LDkgJiM0MzsxMTU5LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtpbnZhbGlkKHB1ZF90IHB1ZCkKIAlyZXR1cm4gX19wdWQocHVkX3ZhbChwdWQpICZhbXA7IH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1RfTk9ORSkpOwogfQogCi1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHB1ZF90ICpwdWRwKTsKLQogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdCkKIHsKIAlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwppbmRleCA5YzQ0MjdkMGIxODc0Li4xNTZlMzg1ZTdkYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwpAQCAtMTU0LDE1ICYjNDM7MTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gcG1kOwogfQogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCi0JZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwotCXJldHVybiBvbGQ7Ci19CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM4Nyw5ICYjNDM7MTM4Nyw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApOwogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApOwotCiAvKgogICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcAogICogbGV2ZWwgaXMgdXNlZCBmb3IgdXNlcnNwYWNlIGFuZCB0aGUgdG9wIGhhbGYgZm9yIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNTE5LDE4ICYjNDM7NTE5LDYgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmYW1wOyZhbXA7IFwKLQlkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKQotcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCWZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IEhQQUdFX1BVRF9TSVpFKTsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KIC8qKgogICogcmVzZXJ2ZV90b3BfYWRkcmVzcyAtIFJlc2VydmUgYSBob2xlIGluIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggOGMwOTNjMTE5ZTVhOC4uMzIxNzMwMDViMDg3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKQEAgLTEzMTgsNiAmIzQzOzEzMTgsMTMgQEAgZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTsKICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiYjNDM7CQkJICAgICBwdWRfdCAqcHVkcCk7CiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FCiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpCiB7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0yMTcsNiAmIzQzOzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIH0KICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKJiM0MzsJCSAgICAgIHB1ZF90ICpwdWRwKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwomIzQzOwlwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTsKJiM0MzsKJiM0MzsJZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaAogcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICBwbWRfdCAqcG1kcCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODAKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogNzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBhbWQ2NCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFuZCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCkZpcnN0LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgY29uZmlndXJhdGlvbiBiZWluZyBhZGRlZCBmb3IgQVJNNjQ6IHNlbGVjdGluZyBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgYmFzZWQgb24gYFBBR0VfU0laRV80S0JgLiBUaGF0JiMzOTtzIGEgY29uZGl0aW9uYWwgc2V0dGluZywgYW5kIGV4cGVjdGVkLiBUaGVuLCBhIGJ1bmNoIG9mIEFSTTY0LXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgZm9yIFBVRC1sZXZlbCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgTWFwIChQRk5NQVApIGFyZSBhZGRlZC4gVGhpcyBzZWVtcyByZWFzb25hYmxlIGZvciBzdXBwb3J0aW5nIFRIUCBhdCB0aGF0IGxldmVsLgoKTmV4dCwgSSBzZWUgYSBiaXQgb2YgY2xlYW51cC4gUG93ZXJQQyBpcyBkZWZpbmluZyBgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFYCBhbmQgZXh0ZXJucyBhIGZ1bmN0aW9uLiBSSVNDLVYgYW5kIHg4NiBhcmUgcmVtb3ZpbmcgZHVwbGljYXRlIGFyY2gtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBwdWRwX2ludmFsaWRhdGVgLiBBaCwgc28gaXQgbG9va3MgbGlrZSB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGdlbmVyYWxpemVkLgoKVGhlIGNvcmUgb2YgdGhlIGdlbmVyYWxpemF0aW9uIGlzIGhhcHBlbmluZyBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgIGFuZCBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlYCBpcyBhZGRlZCBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2VzbiYjMzk7dCogaGF2ZSBpdHMgb3duIGRlZmluaXRpb24sIGFuZCBpZiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgaXMgY29uZmlndXJlZC4gVGhlbiBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQgaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYC4gVGhpcyBtYWtlcyBzZW5zZSDigJMgY29uc29saWRhdGUgdGhlIGNvZGUsIHJlZHVjZSBkdXBsaWNhdGlvbiwgYW5kIHByb3ZpZGUgYSBzdGFuZGFyZCBpbnRlcmZhY2UuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyBzYWZlPyBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcz8gVGhlIGNoYW5nZXMgYXJlICpwcmltYXJpbHkqIGFib3V0IFBVRC1sZXZlbCBUSFAgaGVscGVycyBhbmQgdGhlIGBwdWRwX2ludmFsaWRhdGVgIGdlbmVyYWxpemF0aW9uLiBGcm9tIHdoYXQgSSBzZWUsIGBwdWRwX2ludmFsaWRhdGVgIGlzIGVzc2VudGlhbGx5IGp1c3QgYmVpbmcgbW92ZWQgZnJvbSB4ODYgYW5kIFJJU0MtViB0byB0aGUgZ2VuZXJpYyBjb2RlLiBBUk02NCBpcyBnZXR0aW5nIG5ldyBUSFAvUEZOTUFQIHN1cHBvcnQgYXQgdGhlIFBVRCBsZXZlbCwgd2hpY2ggaXMgd2hhdCB0aGUgaGVscGVycyBhcmUgZG9pbmcuCgpUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSB0YWJsZSBvcGVyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIGJpdCBwYXR0ZXJucyAocHRlL3BtZC9wdWQgdmFsdWVzKSB0aGF0IGFyZSBiaXR3aXNlLW1hbmlwdWxhdGVkLiBUaGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCBsb29rcyBsaWtlIGl0IGlzIHdyaXRpbmcgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdW5pbml0aWFsaXplZCBkYXRhLiBUaGVzZSBhcmUgdHlwaWNhbGx5IGJpdHdpc2Ugb3BzIGFuZCBhdG9taWMgZXhjaGFuZ2VzLCB3aGljaCB3b3VsZCBub3Qgbm9ybWFsbHkgZXhwb3NlIGFueSBzZWN1cml0eSBpc3N1ZXMuCgpTbywgbGV0JiMzOTtzIGdvIGRlZXBlciBhbmQgY29tcGFyZSBpdCB0byBib3RoIEtBU0FOIGFuZCBLTVNBTiBjaGVja3M6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkPyBOby4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQgZGVhbHMgd2l0aCB0aGlzLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gSXQmIzM5O3MganVzdCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBjb25zb2xpZGF0aW9uLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3QgdGhhdCBJIGNhbiBzZWUuIFdlJiMzOTtyZSBtYWlubHkganVzdCB3b3JraW5nIHdpdGggcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBOb3BlLgoKQmFzZWQgb24gYWxsIG9mIHRoYXQsIGl0IGxvb2tzIGxpa2UgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFuYWx5c2lzLiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBleHBsYWluIHRoZSByYXRpb25hbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXG5cblRoZXNlIGNoYW5nZXMgb25seSBtYW5pcHVsYXRlIGFyY2hpdGVjdHVyYWwgcGFnZSB0YWJsZSBlbnRyaWVzIChQVUQvUE1EL1BURSBiaXQtZmxhZ3MsIHBhZ2UgdGFibGUgZXN0YWJsaXNobWVudCwgYW5kIFRMQiBpbnZhbGlkYXRpb24pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0by9mcm9tIHVzZXJzcGFjZSwgYWx0ZXIgc3RydWN0IHBhZGRpbmcvaW5pdGlhbGl6YXRpb24sIG9yIGNyZWF0ZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgY291bGQgYmUgZXZhbHVhdGVkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9kZWJ1ZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIFBVRHMgYW5kIFBVRCBQRk5NQVAgb24gYXJtNjQsIHdoaWxlIGNvbnNvbGlkYXRpbmcgdGhlIGdlbmVyaWMgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFjcm9zcyBhcmNoaXRlY3R1cmVzICh4ODYsIHJpc2N2LCBwb3dlcnBjKS5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IG1hbmlwdWxhdGUgYXJjaGl0ZWN0dXJhbCBwYWdlIHRhYmxlIGVudHJpZXMgKFBVRC9QTUQvUFRFIGJpdC1mbGFncywgcGFnZSB0YWJsZSBlc3RhYmxpc2htZW50LCBhbmQgVExCIGludmFsaWRhdGlvbikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlLCBhbHRlciBzdHJ1Y3QgcGFkZGluZy9pbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBjb3VsZCBiZSBldmFsdWF0ZWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL2RlYnVnIGJ1aWxkcyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM2OjM5LjU5NDE5MzY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0OTcxNzEwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwdWRwX2ludmFsaWRhdGVcIixcbiAgICBcImNoYW5nZV9odWdlX3B1ZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIFBVRHMgYW5kIFBVRCBQRk5NQVAgb24gYXJtNjQsIHdoaWxlIGNvbnNvbGlkYXRpbmcgdGhlIGdlbmVyaWMgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFjcm9zcyBhcmNoaXRlY3R1cmVzICh4ODYsIHJpc2N2LCBwb3dlcnBjKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBhcmNoaXRlY3R1cmFsIHBhZ2UgdGFibGUgZW50cmllcyAoUFVEL1BNRC9QVEUgYml0LWZsYWdzLCBwYWdlIHRhYmxlIGVzdGFibGlzaG1lbnQsIGFuZCBUTEIgaW52YWxpZGF0aW9uKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8vZnJvbSB1c2Vyc3BhY2UsIGFsdGVyIHN0cnVjdCBwYWRkaW5nL2luaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGNvdWxkIGJlIGV2YWx1YXRlZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vZGVidWcgYnVpbGRzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6MzkuNTk0MTk5MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzY2NTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTozNjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiNWE1MWIwZWY5NDQwLi44YTdjYTE4NjM1OTVhIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbkBAIC0xNzMsNiArMTczLDcgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1RcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfVk1BUF9TVEFDS1xcbiBcXHRzZWxlY3QgSEFWRV9BUk1fU01DQ0NcXG4gXFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCA2MDAwOTA1YTJlODY1Li5mZGMzMzg5NzA5MzRkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMjQzLDE4ICsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdClcXG4gXFx0cmV0dXJuIHB0ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBwbWRfdCBjbGVhcl9wbWRfYml0KHBtZF90IHBtZCwgcGdwcm90X3QgcHJvdClcXG4te1xcbi1cXHRwbWRfdmFsKHBtZCkgXFx1MDAyNj0gfnBncHJvdF92YWwocHJvdCk7XFxuLVxcdHJldHVybiBwbWQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgcG1kX3Qgc2V0X3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KVxcbi17XFxuLVxcdHBtZF92YWwocG1kKSB8PSBwZ3Byb3RfdmFsKHByb3QpO1xcbi1cXHRyZXR1cm4gcG1kO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX25vdm1hKHB0ZV90IHB0ZSlcXG4ge1xcbiBcXHRwdGUgPSBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KFBURV9XUklURSkpO1xcbkBAIC02MTksMTEgKzYwNywxMyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta2h1Z2UocG1kX3QgcG1kKVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbi0jZGVmaW5lIHBtZF9zcGVjaWFsKHB0ZSlcXHQoISEoKHBtZF92YWwocHRlKSBcXHUwMDI2IFBURV9TUEVDSUFMKSkpXFxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXFxuLXtcXG4tXFx0cmV0dXJuIHNldF9wbWRfYml0KHBtZCwgX19wZ3Byb3QoUFRFX1NQRUNJQUwpKTtcXG4tfVxcbisjZGVmaW5lIHBtZF9zcGVjaWFsKHBtZClcXHRwdGVfc3BlY2lhbChwbWRfcHRlKHBtZCkpXFxuKyNkZWZpbmUgcG1kX21rc3BlY2lhbChwbWQpXFx0cHRlX3BtZChwdGVfbWtzcGVjaWFsKHBtZF9wdGUocG1kKSkpXFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcXG4rI2RlZmluZSBwdWRfc3BlY2lhbChwdWQpXFx0cHRlX3NwZWNpYWwocHVkX3B0ZShwdWQpKVxcbisjZGVmaW5lIHB1ZF9ta3NwZWNpYWwocHVkKVxcdHB0ZV9wdWQocHRlX21rc3BlY2lhbChwdWRfcHRlKHB1ZCkpKVxcbiAjZW5kaWZcXG4gXFxuICNkZWZpbmUgX19wbWRfdG9fcGh5cyhwbWQpXFx0X19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpXFxuQEAgLTYzNCw4ICs2MjQsMTUgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWtzcGVjaWFsKHBtZF90IHBtZClcXG4gI2RlZmluZSBwdWRfeW91bmcocHVkKVxcdFxcdHB0ZV95b3VuZyhwdWRfcHRlKHB1ZCkpXFxuICNkZWZpbmUgcHVkX21reW91bmcocHVkKVxcdHB0ZV9wdWQocHRlX21reW91bmcocHVkX3B0ZShwdWQpKSlcXG4gI2RlZmluZSBwdWRfbWt3cml0ZV9ub3ZtYShwdWQpXFx0cHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKVxcbisjZGVmaW5lIHB1ZF9ta3dyaXRlKHB1ZClcXHRwdWRfbWt3cml0ZV9ub3ZtYShwdWQpXFxuICNkZWZpbmUgcHVkX21rdmFsaWRfayhwdWQpXFx0cHRlX3B1ZChwdGVfbWt2YWxpZF9rKHB1ZF9wdGUocHVkKSkpXFxuICNkZWZpbmUgcHVkX3dyaXRlKHB1ZClcXHRcXHRwdGVfd3JpdGUocHVkX3B0ZShwdWQpKVxcbisjZGVmaW5lIHB1ZF9kaXJ0eShwdWQpXFx0XFx0cHRlX2RpcnR5KHB1ZF9wdGUocHVkKSlcXG4rI2RlZmluZSBwdWRfd3Jwcm90ZWN0KHB1ZClcXHRwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSlcXG4rI2RlZmluZSBwdWRfbWtkaXJ0eShwdWQpXFx0cHRlX3B1ZChwdGVfbWtkaXJ0eShwdWRfcHRlKHB1ZCkpKVxcbisjZGVmaW5lIHB1ZF9ta29sZChwdWQpXFx0XFx0cHRlX3B1ZChwdGVfbWtvbGQocHVkX3B0ZShwdWQpKSlcXG4rI2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZClcXHRwdGVfcHVkKHB0ZV9ta2ludmFsaWQocHVkX3B0ZShwdWQpKSlcXG4rI2RlZmluZSBwdWRfbWtjbGVhbihwdWQpXFx0cHRlX3B1ZChwdGVfbWtjbGVhbihwdWRfcHRlKHB1ZCkpKVxcbiBcXG4gc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtodWdlKHB1ZF90IHB1ZClcXG4ge1xcbkBAIC04ODYsNiArODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpXFxuICNkZWZpbmUgcHVkX3VzZXIocHVkKVxcdFxcdHB0ZV91c2VyKHB1ZF9wdGUocHVkKSlcXG4gI2RlZmluZSBwdWRfdXNlcl9leGVjKHB1ZClcXHRwdGVfdXNlcl9leGVjKHB1ZF9wdGUocHVkKSlcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbitzdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXFxuK3tcXG4rXFx0cmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgXFx1MDAyNlxcdTAwMjYgIXB1ZF90YWJsZShfX3B1ZChwdWRfdmFsKHB1ZCkgfCBQVEVfVkFMSUQpKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxcbkBAIC0xMjUyLDYgKzEyNTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbW9kaWZ5KHBtZF90IHBtZCwgcGdwcm90X3QgbmV3cHJvdClcXG4gXFx0cmV0dXJuIHB0ZV9wbWQocHRlX21vZGlmeShwbWRfcHRlKHBtZCksIG5ld3Byb3QpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcXG4re1xcbitcXHRyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpO1xcbit9XFxuK1xcbiBleHRlcm4gaW50IF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcXG4gXFx0XFx0XFx0XFx0XFx0IHB0ZV90IGVudHJ5LCBpbnQgZGlydHksXFxuQEAgLTEyNzYsNiArMTI4NSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxcbitzdGF0aWMgaW5saW5lIGludCBwdWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsXFxuK1xcdFxcdFxcdFxcdFxcdHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwdWRfcHRlKGVudHJ5KSwgZGlydHksIFBVRF9TSVpFKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcXG4ge1xcbkBAIC0xMzUwLDYgKzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcgKi9cXG4gXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwdWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB1ZF90ICpwdWRwKVxcbit7XFxuK1xcdHJldHVybiBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldF9hbmRfY2xlYXJfYW55c3ooc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBwdGVfdCAqcHRlcCxcXG5AQCAtMTUxMiw2ICsxNTM5LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG4rc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxcbit7XFxuK1xcdHBhZ2VfdGFibGVfY2hlY2tfcHVkX3NldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdWRwLCBwdWQpO1xcbitcXHRyZXR1cm4gX19wdWQoeGNoZ19yZWxheGVkKFxcdTAwMjZwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKlxcbiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnk6XFxuICAqXFx0Yml0cyAwLTE6XFx0cHJlc2VudCAobXVzdCBiZSB6ZXJvKVxcbkBAIC0xNTg2LDYgKzE2MjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlcCkgXFxcXFxcbiBcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKE5VTEwsIHZtYSwgYWRkciwgcHRlcCwgMSlcXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHBtZCkgZG8geyB9IHdoaWxlICgwKVxcbisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHZtYSwgYWRkcmVzcywgcHVkKSBkbyB7IH0gd2hpbGUgKDApXFxuIFxcbiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTJcXG4gI2RlZmluZSBwaHlzX3RvX3R0YnIoYWRkcilcXHQoKChhZGRyKSB8ICgoYWRkcikgXFx1MDAzZVxcdTAwM2UgNDYpKSBcXHUwMDI2IFRUQlJfQkFERFJfTUFTS181MilcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxcbmluZGV4IGY0ZGI3ZDdmYmQ1YzYuLjU1ZDMzYzU1MzdmMTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxcbkBAIC0xNDE5LDYgKzE0MTksNyBAQCBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUE1EUF9JTlZBTElEQVRFXFxuIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0ICAgICBwbWRfdCAqcG1kcCk7XFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxuIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0ICAgICBwdWRfdCAqcHVkcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggNDBiMWVkNGYzZWE4OS4uMzI3ZmEzNzgwMzJiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTExNTksOSArMTE1OSw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21raW52YWxpZChwdWRfdCBwdWQpXFxuIFxcdHJldHVybiBfX3B1ZChwdWRfdmFsKHB1ZCkgXFx1MDAyNiB+KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UX05PTkUpKTtcXG4gfVxcbiBcXG4tZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHRcXHQgICAgIHB1ZF90ICpwdWRwKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpXFxuIHtcXG4gXFx0cmV0dXJuIHB0ZV9wdWQocHRlX21vZGlmeShwdWRfcHRlKHB1ZCksIG5ld3Byb3QpKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xcbmluZGV4IDljNDQyN2QwYjE4NzQuLjE1NmUzODVlN2RiNDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xcbkBAIC0xNTQsMTUgKzE1NCw2IEBAIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBwbWQ7XFxuIH1cXG4gXFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHQgICAgICBwdWRfdCAqcHVkcClcXG4te1xcbi1cXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XFxuLVxcdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xcbi1cXG4tXFx0Zmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgKyBIUEFHRV9QVURfU0laRSk7XFxuLVxcdHJldHVybiBvbGQ7XFxuLX1cXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4gcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTM4Nyw5ICsxMzg3LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kcCk7XFxuIFxcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tXFx0XFx0ICAgICAgcHVkX3QgKnB1ZHApO1xcbi1cXG4gLypcXG4gICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcFxcbiAgKiBsZXZlbCBpcyB1c2VkIGZvciB1c2Vyc3BhY2UgYW5kIHRoZSB0b3AgaGFsZiBmb3IgdGhlIGtlcm5lbC5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXFxuaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcXG5AQCAtNTE5LDE4ICs1MTksNiBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbi1cXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tXFx0XFx0ICAgICBwdWRfdCAqcHVkcClcXG4te1xcbi1cXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XFxuLVxcdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xcbi1cXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcXG4tXFx0cmV0dXJuIG9sZDtcXG4tfVxcbi0jZW5kaWZcXG4tXFxuIC8qKlxcbiAgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gUmVzZXJ2ZSBhIGhvbGUgaW4gdGhlIHRvcCBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2VcXG4gICogQHJlc2VydmU6IFNpemUgb2YgaG9sZSB0byByZXNlcnZlXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5pbmRleCA4YzA5M2MxMTllNWE4Li4zMjE3MzAwNWIwODdmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtMTMxOCw2ICsxMzE4LDEzIEBAIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApO1xcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbitleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuK1xcdFxcdFxcdCAgICAgcHVkX3QgKnB1ZHApO1xcbisjZW5kaWZcXG4rI2VuZGlmXFxuK1xcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FXFxuIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zYW1lKHB0ZV90IHB0ZV9hLCBwdGVfdCBwdGVfYilcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXFxuaW5kZXggYjkxYjFhOTgwMjljNy4uYWMxMTc1ZDlhNTlhNyAxMDA2NDRcXG4tLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xcbisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXFxuQEAgLTIxNyw2ICsyMTcsMjAgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG4rcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuK1xcdFxcdCAgICAgIHB1ZF90ICpwdWRwKVxcbit7XFxuK1xcdFZNX1dBUk5fT05fT05DRSghcHVkX3ByZXNlbnQoKnB1ZHApKTtcXG4rXFx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XFxuK1xcbitcXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbisjZW5kaWZcXG4rI2VuZGlmXFxuK1xcbiAjaWZuZGVmIHBtZHBfY29sbGFwc2VfZmx1c2hcXG4gcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXHRcXHRcXHQgIHBtZF90ICpwbWRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNjo0MC4xOTI1MDg4MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MzgyMzI3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHVkcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJjaGFuZ2VfaHVnZV9wdWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDgzZDljM2ZlYjUxY2U3YTRmNmYxMzM5MDhhNmRiMDFmYzZlNzg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTozNjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjVhNTFiMGVmOTQ0MC4uOGE3Y2ExODYzNTk1YSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMTczLDYgKzE3Myw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9USFJFQURfU1RSVUNUX1dISVRFTElTVFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFBBR0VfU0laRV80S0JcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVk1BUF9TVEFDS1xuIFx0c2VsZWN0IEhBVkVfQVJNX1NNQ0NDXG4gXHRzZWxlY3QgSEFWRV9BU01fTU9EVkVSU0lPTlNcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA2MDAwOTA1YTJlODY1Li5mZGMzMzg5NzA5MzRkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMjQzLDE4ICsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdClcbiBcdHJldHVybiBwdGU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgY2xlYXJfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpXG4te1xuLVx0cG1kX3ZhbChwbWQpIFx1MDAyNj0gfnBncHJvdF92YWwocHJvdCk7XG4tXHRyZXR1cm4gcG1kO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHBtZF90IHNldF9wbWRfYml0KHBtZF90IHBtZCwgcGdwcm90X3QgcHJvdClcbi17XG4tXHRwbWRfdmFsKHBtZCkgfD0gcGdwcm90X3ZhbChwcm90KTtcbi1cdHJldHVybiBwbWQ7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGVfbm92bWEocHRlX3QgcHRlKVxuIHtcbiBcdHB0ZSA9IHNldF9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoUFRFX1dSSVRFKSk7XG5AQCAtNjE5LDExICs2MDcsMTMgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWtodWdlKHBtZF90IHBtZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbi0jZGVmaW5lIHBtZF9zcGVjaWFsKHB0ZSlcdCghISgocG1kX3ZhbChwdGUpIFx1MDAyNiBQVEVfU1BFQ0lBTCkpKVxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXG4te1xuLVx0cmV0dXJuIHNldF9wbWRfYml0KHBtZCwgX19wZ3Byb3QoUFRFX1NQRUNJQUwpKTtcbi19XG4rI2RlZmluZSBwbWRfc3BlY2lhbChwbWQpXHRwdGVfc3BlY2lhbChwbWRfcHRlKHBtZCkpXG4rI2RlZmluZSBwbWRfbWtzcGVjaWFsKHBtZClcdHB0ZV9wbWQocHRlX21rc3BlY2lhbChwbWRfcHRlKHBtZCkpKVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4rI2RlZmluZSBwdWRfc3BlY2lhbChwdWQpXHRwdGVfc3BlY2lhbChwdWRfcHRlKHB1ZCkpXG4rI2RlZmluZSBwdWRfbWtzcGVjaWFsKHB1ZClcdHB0ZV9wdWQocHRlX21rc3BlY2lhbChwdWRfcHRlKHB1ZCkpKVxuICNlbmRpZlxuIFxuICNkZWZpbmUgX19wbWRfdG9fcGh5cyhwbWQpXHRfX3B0ZV90b19waHlzKHBtZF9wdGUocG1kKSlcbkBAIC02MzQsOCArNjI0LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXG4gI2RlZmluZSBwdWRfeW91bmcocHVkKVx0XHRwdGVfeW91bmcocHVkX3B0ZShwdWQpKVxuICNkZWZpbmUgcHVkX21reW91bmcocHVkKVx0cHRlX3B1ZChwdGVfbWt5b3VuZyhwdWRfcHRlKHB1ZCkpKVxuICNkZWZpbmUgcHVkX21rd3JpdGVfbm92bWEocHVkKVx0cHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKVxuKyNkZWZpbmUgcHVkX21rd3JpdGUocHVkKVx0cHVkX21rd3JpdGVfbm92bWEocHVkKVxuICNkZWZpbmUgcHVkX21rdmFsaWRfayhwdWQpXHRwdGVfcHVkKHB0ZV9ta3ZhbGlkX2socHVkX3B0ZShwdWQpKSlcbiAjZGVmaW5lIHB1ZF93cml0ZShwdWQpXHRcdHB0ZV93cml0ZShwdWRfcHRlKHB1ZCkpXG4rI2RlZmluZSBwdWRfZGlydHkocHVkKVx0XHRwdGVfZGlydHkocHVkX3B0ZShwdWQpKVxuKyNkZWZpbmUgcHVkX3dycHJvdGVjdChwdWQpXHRwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta2RpcnR5KHB1ZClcdHB0ZV9wdWQocHRlX21rZGlydHkocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta29sZChwdWQpXHRcdHB0ZV9wdWQocHRlX21rb2xkKHB1ZF9wdGUocHVkKSkpXG4rI2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZClcdHB0ZV9wdWQocHRlX21raW52YWxpZChwdWRfcHRlKHB1ZCkpKVxuKyNkZWZpbmUgcHVkX21rY2xlYW4ocHVkKVx0cHRlX3B1ZChwdGVfbWtjbGVhbihwdWRfcHRlKHB1ZCkpKVxuIFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21raHVnZShwdWRfdCBwdWQpXG4ge1xuQEAgLTg4Niw2ICs4ODMsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHB1ZF9sZWFmKHB1ZF90IHB1ZClcbiAjZGVmaW5lIHB1ZF91c2VyKHB1ZClcdFx0cHRlX3VzZXIocHVkX3B0ZShwdWQpKVxuICNkZWZpbmUgcHVkX3VzZXJfZXhlYyhwdWQpXHRwdGVfdXNlcl9leGVjKHB1ZF9wdGUocHVkKSlcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbitzdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4re1xuK1x0cmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfdGFibGUoX19wdWQocHVkX3ZhbChwdWQpIHwgUFRFX1ZBTElEKSk7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdWQocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbkBAIC0xMjUyLDYgKzEyNTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbW9kaWZ5KHBtZF90IHBtZCwgcGdwcm90X3QgbmV3cHJvdClcbiBcdHJldHVybiBwdGVfcG1kKHB0ZV9tb2RpZnkocG1kX3B0ZShwbWQpLCBuZXdwcm90KSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpXG4re1xuK1x0cmV0dXJuIHB0ZV9wdWQocHRlX21vZGlmeShwdWRfcHRlKHB1ZCksIG5ld3Byb3QpKTtcbit9XG4rXG4gZXh0ZXJuIGludCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFnc19hbnlzeihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG4gXHRcdFx0XHRcdCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5LFxuQEAgLTEyNzYsNiArMTI4NSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4rc3RhdGljIGlubGluZSBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB1ZF90ICpwdWRwLFxuK1x0XHRcdFx0XHRwdWRfdCBlbnRyeSwgaW50IGRpcnR5KVxuK3tcbitcdHJldHVybiBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFnc19hbnlzeih2bWEsIGFkZHJlc3MsIChwdGVfdCAqKXB1ZHAsXG4rXHRcdFx0XHRcdCAgICAgcHVkX3B0ZShlbnRyeSksIGRpcnR5LCBQVURfU0laRSk7XG4rfVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuIHtcbkBAIC0xMzUwLDYgKzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HICovXG4gXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbitzdGF0aWMgaW5saW5lIGJvb2wgcHVkcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcClcbit7XG4rXHRyZXR1cm4gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCk7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldF9hbmRfY2xlYXJfYW55c3ooc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRcdFx0XHRcdCAgICAgICBwdGVfdCAqcHRlcCxcbkBAIC0xNTEyLDYgKzE1MzksMTUgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gI2VuZGlmXG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4rc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxuK3tcbitcdHBhZ2VfdGFibGVfY2hlY2tfcHVkX3NldCh2bWEtXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB1ZHAsIHB1ZCk7XG4rXHRyZXR1cm4gX19wdWQoeGNoZ19yZWxheGVkKFx1MDAyNnB1ZF92YWwoKnB1ZHApLCBwdWRfdmFsKHB1ZCkpKTtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnk6XG4gICpcdGJpdHMgMC0xOlx0cHJlc2VudCAobXVzdCBiZSB6ZXJvKVxuQEAgLTE1ODYsNiArMTYyMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuICNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZXApIFxcXG4gXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKE5VTEwsIHZtYSwgYWRkciwgcHRlcCwgMSlcbiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgYWRkcmVzcywgcG1kKSBkbyB7IH0gd2hpbGUgKDApXG4rI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3B1ZCh2bWEsIGFkZHJlc3MsIHB1ZCkgZG8geyB9IHdoaWxlICgwKVxuIFxuICNpZmRlZiBDT05GSUdfQVJNNjRfUEFfQklUU181MlxuICNkZWZpbmUgcGh5c190b190dGJyKGFkZHIpXHQoKChhZGRyKSB8ICgoYWRkcikgXHUwMDNlXHUwMDNlIDQ2KSkgXHUwMDI2IFRUQlJfQkFERFJfTUFTS181MilcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5pbmRleCBmNGRiN2Q3ZmJkNWM2Li41NWQzM2M1NTM3ZjEzIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5AQCAtMTQxOSw2ICsxNDE5LDcgQEAgc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUE1EUF9JTlZBTElEQVRFXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgICAgcG1kX3QgKnBtZHApO1xuKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4gZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDQwYjFlZDRmM2VhODkuLjMyN2ZhMzc4MDMyYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xMTU5LDkgKzExNTksNiBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta2ludmFsaWQocHVkX3QgcHVkKVxuIFx0cmV0dXJuIF9fcHVkKHB1ZF92YWwocHVkKSBcdTAwMjYgfihfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVF9OT05FKSk7XG4gfVxuIFxuLWV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbi1cbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxuIHtcbiBcdHJldHVybiBwdGVfcHVkKHB0ZV9tb2RpZnkocHVkX3B0ZShwdWQpLCBuZXdwcm90KSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xuaW5kZXggOWM0NDI3ZDBiMTg3NC4uMTU2ZTM4NWU3ZGI0NCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jXG4rKysgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xuQEAgLTE1NCwxNSArMTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBwbWQ7XG4gfVxuIFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbi17XG4tXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XG4tXHRwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTtcbi1cbi1cdGZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICsgSFBBR0VfUFVEX1NJWkUpO1xuLVx0cmV0dXJuIG9sZDtcbi19XG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBkNWY0OTE3YzFlZGNiLi45NzA1MWMwMjM4NWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xMzg3LDkgKzEzODcsNiBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTtcbiBcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgICAgcHVkX3QgKnB1ZHApO1xuLVxuIC8qXG4gICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcFxuICAqIGxldmVsIGlzIHVzZWQgZm9yIHVzZXJzcGFjZSBhbmQgdGhlIHRvcCBoYWxmIGZvciB0aGUga2VybmVsLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2L21tL3BndGFibGUuY1xuaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuY1xuKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5AQCAtNTE5LDE4ICs1MTksNiBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbi1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgICAgcHVkX3QgKnB1ZHApXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuLVx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4tXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcbi1cdHJldHVybiBvbGQ7XG4tfVxuLSNlbmRpZlxuLVxuIC8qKlxuICAqIHJlc2VydmVfdG9wX2FkZHJlc3MgLSBSZXNlcnZlIGEgaG9sZSBpbiB0aGUgdG9wIG9mIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZVxuICAqIEByZXNlcnZlOiBTaXplIG9mIGhvbGUgdG8gcmVzZXJ2ZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDhjMDkzYzExOWU1YTguLjMyMTczMDA1YjA4N2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbkBAIC0xMzE4LDYgKzEzMTgsMTMgQEAgZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApO1xuICNlbmRpZlxuIFxuKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4rZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuK1x0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuKyNlbmRpZlxuKyNlbmRpZlxuK1xuICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX1NBTUVcbiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0XG4tLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbkBAIC0yMTcsNiArMjE3LDIwIEBAIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIH1cbiAjZW5kaWZcbiBcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuK3B1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuK1x0XHQgICAgICBwdWRfdCAqcHVkcClcbit7XG4rXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XG4rXHRwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTtcbitcbitcdGZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICsgSFBBR0VfUFVEX1NJWkUpO1xuK1x0cmV0dXJuIG9sZDtcbit9XG4rI2VuZGlmXG4rI2VuZGlmXG4rXG4gI2lmbmRlZiBwbWRwX2NvbGxhcHNlX2ZsdXNoXG4gcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgcG1kX3QgKnBtZHApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNjo0MC4xOTI1MTAxODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjIzODI3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHB1ZHBfaW52YWxpZGF0ZWAgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHRhcmdldCBpcyBBTUQ2NCwgd2hpY2ggaXMgY3J1Y2lhbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGF0IGFyY2hpdGVjdHVyZS5cblxuSSBzZWUgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBwZ3RhYmxlLmhgIGZpbGVzIGFuZCByZWxhdGVkIGltcGxlbWVudGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYHB1ZHBfaW52YWxpZGF0ZWAsIHdoaWNoIHN1Z2dlc3RzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMsIHNwZWNpZmljYWxseSBQVURzIChQYWdlIFVwcGVyIERpcmVjdG9yeSksIGFyZSBoYW5kbGVkIGFuZCBpbnZhbGlkYXRlZC5cblxuU3BlY2lmaWNhbGx5LCBJIG5vdGUgdGhlc2Uga2V5IG1vZGlmaWNhdGlvbnM6XG5cbiogICBUaGUgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgY2hhbmdlOiBJdCBzZWxlY3RzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCB1bmRlciBjZXJ0YWluIGBQQUdFX1NJWkVfNEtCYCBjb25kaXRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGZvciB0aGUgbmV3LCBnZW5lcmFsaXplZCBgcHVkcF9pbnZhbGlkYXRlYCBhbmQgaW1wbGllcyBzb21lIEFSTTY0IHN5c3RlbXMgd2lsbCBiZW5lZml0IGZyb20gdGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxuKiAgIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaGAgaXMgY2hhbmdlZCBzaWduaWZpY2FudGx5OiBJdCB1cGRhdGVzIHNvbWUgbWFjcm9zL2Z1bmN0aW9ucyByZWxhdGVkIHRvIFBVRHMsIGRlZmluZXMgYW5kIHVwZGF0ZXMgZnVuY3Rpb25zIChlLmcuLCBgcHVkX21rd3JpdGVgLCBgcHVkX2RpcnR5YCwgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2ApLiBUaGVzZSBhZGRpdGlvbnMgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgcGFnZSB0YWJsZSBpbnZhbGlkYXRpb24uIFRoZSBkZWZpbml0aW9uIG9mIGBwdWRfdHJhbnNfaHVnZWAgaXMgdmVyeSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiBodWdlIHBhZ2VzLlxuKiAgIFRoZSByZW1vdmFsIG9mIGBwdWRwX2ludmFsaWRhdGVgIGZyb20gUklTQy1WIGFuZCB4ODYgZmlsZXMuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGJlaW5nIHJlbW92ZWQuXG4qICAgVGhlIGFkZGl0aW9uIG9mIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGd1YXJkZWQgYnkgYm90aCBgIV9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAuIFRoaXMgbWVhbnMgdGhlIG5ldyBnZW5lcmljIGltcGxlbWVudGF0aW9uIGlzIG5vdyBiZWluZyB1c2VkIGlmIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2ZXJzaW9uIGlzIGF2YWlsYWJsZSAqYW5kKiBpZiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgaGlnaGx5IHJlbGV2YW50IGZvciBBTUQ2NCwgYXMgVEhQIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgZmVhdHVyZS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSB4ODYgY2hhbmdlcy4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgbW92ZXMgYHB1ZHBfaW52YWxpZGF0ZWAgZnJvbSBgYXJjaC94ODYvbW0vcGd0YWJsZS5jYCB0byBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC5cblxuVGhpcyBtZWFucyB4ODYgKEFNRDY0KSBpcyBub3cgdXNpbmcgdGhlIGdlbmVyaWMgdmVyc2lvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB4ODYgaGFzIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgZW5hYmxlZCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyB4ODZcXF82NC4gVGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uJ3MgaW5jbHVzaW9uIG1lYW5zIGl0J3Mgbm93IGJlaW5nIHV0aWxpemVkLlxuXG5Ob3csIEkgbmVlZCB0byBzZWUgKmhvdyogYHB1ZHBfaW52YWxpZGF0ZWAgaXMgdXNlZCBpbiB0aGUga2VybmVsIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIGFyZSByZWxldmFudCB0byBpdC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXA7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29tcGxldGUgaW1wYWN0IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLiBJJ2xsIG5lZWQgdG8gZG8gYSBgZ3JlcGAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGZvciB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYXJvdW5kIGl0LiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXQgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM2OjQ2LjgxNjM0MTE0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyNjYzODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1ZHBfaW52YWxpZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaD0xNDIwPWV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTE0MjItI2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaDoxNDIzOmV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xNDI0LVxcdFxcdFxcdCAgICAgcHVkX3QgKnB1ZHApO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYz0xNTU9cG1kX3QgcG1kcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2Ny1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jOjE2ODpwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2OS1cXHRcXHQgICAgICBwdWRfdCAqcHVkcClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEzMTc9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEzMjItI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyNC1cXHRcXHRcXHQgICAgIHB1ZF90ICpwdWRwKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjg0Mz1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODcxLVxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg3MjpcXHRvbGRwdWQgPSBwdWRwX2ludmFsaWRhdGUodm1hLCBhZGRyLCBwdWRwKTtcXG5tbS9odWdlX21lbW9yeS5jLTI4NzMtXFx0ZW50cnkgPSBwdWRfbW9kaWZ5KG9sZHB1ZCwgbmV3cHJvdCk7XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMTI9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMjEtI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIyOnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIyMy1cXHRcXHQgICAgICBwdWRfdCAqcHVkcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6NDkuMDk5MDA5Mjk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ1ODI5Mzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEF1ZGl0IENoZWNrbGlzdCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQncyB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQga2VybmVsIGNvZGUsIHNvIHRoZSB1c3VhbCBzdXNwZWN0cyBhcHBseS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55dGhpbmcgdGhhdCB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtczogbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCB0aGUgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgYW5kIHN5c3RlbSBjYWxsIGhhbmRsaW5nLiBUaG9zZSBhcmUgdGhlIGhpZ2gtcmlzayBhcmVhcy5cblxuTmV4dCB1cCwgcmVmYWN0b3JpbmdzIGFuZCBjb2RlIGNsZWFudXBzLiBUaGUgcnVsZSBpcyBjbGVhcjogKm5ldmVyKiBibGluZGx5IHRydXN0IGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZy5cIiBJZiB0aGVyZSdzIGFueSBtb2RpZmljYXRpb24gdG8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgSSBuZWVkIHRvIHRyZWF0IGl0IGFzIGEgcG90ZW50aWFsIGJ1ZyBzb3VyY2UuIFJlZmFjdG9yaW5ncyBjYW4gaW50cm9kdWNlIHN1YnRsZSwgZWFzaWx5IG1pc3NlZCByZWdyZXNzaW9ucy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgd2hlbiBtb2RpZnlpbmcgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuIElmIHRoZSBjb2RlICpjYW4qIGJlIHJlYWNoZWQgYW5kIGV4ZWN1dGVkLCBpdCdzIGdldHRpbmcgZnV6emVkLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHBvaW50OiAqcmVhY2hhYmlsaXR5IGlzIGtpbmcqLiBGdXp6aW5nIGlzIG9ubHkgZWZmZWN0aXZlIGlmIHRoZSBjb2RlICpjYW4qIGFjdHVhbGx5IHJ1biBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLlxuXG5TcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2Agd2hpY2gsIGl0IHNlZW1zLCBoYXMgYSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZWAgdGhhdCByZXBsYWNlcyB0aGUgb25lIGluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLiBUaGVyZSBhcmUgYWxzbyBhcm02NCBjaGFuZ2VzLCBidXQgSSdtIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCB0aGUgZ2VuZXJpYyBjaGFuZ2UgdGhhdCdzIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAuIFNpbmNlIGFtZDY0ICpkb2Vzbid0KiBkZWZpbmUgYF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAsIHRoaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyB3aGF0IHdlJ2xsIGJlIHVzaW5nLlxuXG5UbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgb24gYW1kNjQuIExldCdzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIHRoYXQgc3ltYm9sLCBhbmQgc2VlIHdoZXJlIHdlIGdvIGZyb20gdGhlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBuZXcgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgYW1kNjQgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6NTQuNTU3MzA1NTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTU1MzAzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTEwMz1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5hcmNoL0tjb25maWctMTEwNS1cXG5hcmNoL0tjb25maWc6MTEwNjpjb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gvS2NvbmZpZy0xMTA3LVxcdGJvb2xcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NS1cXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnOjE3NjpcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3Ny1cXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTg3NT1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtODg1LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjg4NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC04ODctc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTUzND1zdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0MS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTQyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDMtc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTExMD1jb25maWcgUFBDX1RIUFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE0LSAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6MTE1OiAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNi0gICAgICAgc2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMTUyLVxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE1MzpcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBNTVVcXG5hcmNoL3Jpc2N2L0tjb25maWctMTU0LVxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTItXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gveDg2L0tjb25maWc6MjEzOlxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMjE0LVxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgICAgICAgICBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0yOTc9c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzAyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMDMtc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzNTc9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzcwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMzcxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzcyLXN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oPTEyMD1zdGF0aWMgaW5saW5lIGJvb2wgZGF4X2FsaWduX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaC0xMjEte1xcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmg6MTIyOlxcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKSlcXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTEyMD1zdGF0aWMgdm1fZmF1bHRfdCBfX2Rldl9kYXhfcG1kX2ZhdWx0KHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMTYzLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jOjE2NDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0xNjUtc3RhdGljIHZtX2ZhdWx0X3QgX19kZXZfZGF4X3B1ZF9mYXVsdChzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTIxMD1zdGF0aWMgdm1fZmF1bHRfdCBfX2Rldl9kYXhfcHVkX2ZhdWx0KHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMjE0LX1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYzoyMTU6I2VuZGlmIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbmRyaXZlcnMvZGF4L2RldmljZS5jLTIxNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE1PWludCBjb3B5X2h1Z2VfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTgtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTk6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjAtdm9pZCBodWdlX3B1ZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2lzX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5MzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTQtaW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yNzEwPXN0YXRpYyBpbmxpbmUgcG1kX3QgZm9saW9fbWtfcG1kKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHBncHJvdF90IHBncHJvdClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0yNzE0LVxcbmluY2x1ZGUvbGludXgvbW0uaDoyNzE1OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvbW0uaC0yNzE2LS8qKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTI3MjY9c3RhdGljIGlubGluZSBwdWRfdCBmb2xpb19ta19wdWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgcGdwcm90X3QgcGdwcm90KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI3MjktfVxcbmluY2x1ZGUvbGludXgvbW0uaDoyNzMwOiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbmluY2x1ZGUvbGludXgvbW0uaC0yNzMxLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEyMjU9c3RhdGljIGlubGluZSB2b2lkIHBtZHBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEyMzItI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX1NFVF9XUlBST1RFQ1RcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjMzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEyMzQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHVkcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTI0OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTI0OTojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjUwLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTMxNz1leHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyMS0jaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEzMjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyMy1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMDg5PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF93cml0ZShwdWRfdCBwdWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDk2LSNpZiAhZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMDk3OlxcdCFkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIwOTgtc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjEwND1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfdW5zdGFibGUocHVkX3QgKnB1ZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxMDYtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjEwNzpcXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxMDgtXFx0cHVkX3QgcHVkdmFsID0gcHVkcF9nZXQocHVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIzMDU9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzQyLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIzNDM6I2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkgSVNfQlVJTFRJTihDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzQ0LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg9MzQ9ZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC0xMDMtXFx0XFx0VEhQX1NDQU5fRVhDRUVEX1NIQVJFRF9QVEUsXFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg6MTA0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oLTEwNS1cXHRcXHRUSFBfU1BMSVRfUFVELFxcbi0tXFxubW0vS2NvbmZpZz0xMDA5PWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xcbm1tL0tjb25maWctMTAxMC1cXHRkZWZfYm9vbCAoSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXFxcXG5tbS9LY29uZmlnOjEwMTE6XFx0XFx0IChaT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbm1tL0tjb25maWctMTAxMi1cXG4tLVxcbm1tL0tjb25maWc9MTAyNT1jb25maWcgQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDI2LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMjc6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9LY29uZmlnLTEwMjgtXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MjgyPXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTI5OC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6Mjk5OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0zMDAtc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQwNT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy00MTktfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo0MjA6I2Vsc2UgIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy00MjEtc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KSB7IH1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MjM9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo0MjQ6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNS0jZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTkwNT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkzMy1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTM0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MzUtc3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTMtfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTQ6I2Vsc2UgIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTUtc3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk1NjojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTU3LSNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuLS1cXG5tbS9obW0uYz00MDM9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vaG1tLmMtNDc5LVxcbm1tL2htbS5jOjQ4MDojaWYgZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9obW0uYy00ODEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF90b19obW1fcGZuX2ZsYWdzKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNzQ5PUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTE3NTAtXFxubW0vaHVnZV9tZW1vcnkuYzoxNzUxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1Mi1zdGF0aWMgcHVkX3QgbWF5YmVfcHVkX21rd3JpdGUocHVkX3QgcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2NT1FWFBPUlRfU1lNQk9MX0dQTCh2bWZfaW5zZXJ0X2ZvbGlvX3B1ZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoxODY2OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTg2Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTk1MD1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjA2MS1cXG5tbS9odWdlX21lbW9yeS5jOjIwNjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vaHVnZV9tZW1vcnkuYy0yMDYzLXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxMTE9dm9pZCBodWdlX3B1ZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMTIyLX1cXG5tbS9odWdlX21lbW9yeS5jOjIxMjM6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vaHVnZV9tZW1vcnkuYy0yMTI0LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzM0PWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI4NDEtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyODQyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0My1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMzPXNwaW5sb2NrX3QgKl9fcHVkX3RyYW5zX2h1Z2VfbG9jayhwdWRfdCAqcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzA0My1cXG5tbS9odWdlX21lbW9yeS5jOjMwNDQ6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vaHVnZV9tZW1vcnkuYy0zMDQ1LWludCB6YXBfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMxMzI9dm9pZCBfX3NwbGl0X2h1Z2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTM1LX1cXG5tbS9odWdlX21lbW9yeS5jOjMxMzY6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vaHVnZV9tZW1vcnkuYy0zMTM3LVxcbi0tXFxubW0vbWFwcGluZ19kaXJ0eV9oZWxwZXJzLmM9MTQ4PXN0YXRpYyBpbnQgd3BfY2xlYW5fcHVkX2VudHJ5KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYy0xNTAte1xcbm1tL21hcHBpbmdfZGlydHlfaGVscGVycy5jOjE1MTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYy0xNTItXFx0cHVkX3QgcHVkdmFsID0gcHVkcF9nZXQocHVkKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY0MjE9c3RhdGljIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNjQyMy0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS5jOjY0MjQ6XFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9tZW1vcnkuYy02NDI1LVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuLS1cXG5tbS9tZW1vcnkuYz02NDM1PXN0YXRpYyB2bV9mYXVsdF90IHdwX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZClcXG4tLVxcbm1tL21lbW9yeS5jLTY0MzctI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnkuYzo2NDM4OlxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxubW0vbWVtb3J5LmMtNjQzOS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbi0tXFxubW0vbWVtb3J5LmMtNjQ1NC1cXHRfX3NwbGl0X2h1Z2VfcHVkKHZtYSwgdm1mLVxcdTAwM2VwdWQsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vbWVtb3J5LmM6NjQ1NTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vbWVtb3J5LmMtNjQ1Ni1cXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxuLS1cXG5tbS9tcmVtYXAuYz00Nzk9c3RhdGljIGlubGluZSBib29sIG1vdmVfbm9ybWFsX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbi0tXFxubW0vbXJlbWFwLmMtNDg1LVxcbm1tL21yZW1hcC5jOjQ4NjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxubW0vbXJlbWFwLmMtNDg3LXN0YXRpYyBib29sIG1vdmVfaHVnZV9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jPTE0MT1wbWRfdCBwbWRwX2h1Z2VfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTE1MS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoxNTI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTUzLXB1ZF90IHB1ZHBfaHVnZV9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjEyPXBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIwLSNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIyMi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3JtYXAuYz0xNzcxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTc3NC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5tbS9ybWFwLmM6MTc3NTpcXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbm1tL3JtYXAuYy0xNzc2LVxcdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUFVEX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUFVEKTtcXG4tLVxcbm1tL3JtYXAuYz0xOTM5PXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5NDItI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubW0vcm1hcC5jOjE5NDM6XFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9ybWFwLmMtMTk0NC1cXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QVURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTE0MzAtXFx0W0koVEhQX1NDQU5fRVhDRUVEX1NIQVJFRF9QVEUpXVxcdFxcdD0gXFxcInRocF9zY2FuX2V4Y2VlZF9zaGFyZV9wdGVcXFwiLFxcbm1tL3Ztc3RhdC5jOjE0MzE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vdm1zdGF0LmMtMTQzMi1cXHRbSShUSFBfU1BMSVRfUFVEKV1cXHRcXHRcXHQ9IFxcXCJ0aHBfc3BsaXRfcHVkXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6NTYuODcyODQxNjc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY2NzgxODAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBhZmZlY3RzIGEgcHJldHR5IGJyb2FkIHN3YXRoZSBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHk6IEFSTTY0LCBQb3dlclBDLCBSSVNDLVYsIGFuZCB4ODYsIGFsb25nIHdpdGggc29tZSBjb3JlIGBwZ3RhYmxlYCBoZWFkZXJzIGFuZCBnZW5lcmljIGNvZGUuIEl0IGludHJvZHVjZXMgYSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGVgIGZ1bmN0aW9uIGludG8gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIFRoaXMgbWVhbnMgbG9naWMgdGhhdCB1c2VkIHRvIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpcyBub3cgY2VudHJhbGl6ZWQuIEl0IGFsc28gaW1wbGllcyBhIGZhaXIgYW1vdW50IG9mIHBvdGVudGlhbCBjcm9zcy1hcmNoaXRlY3R1cmUgYmVoYXZpb3IgdGhhdCBuZWVkcyBzY3J1dGlueS5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlYCwgY291cGxlZCB3aXRoIHRoZSByZW1vdmFsIG9mIGFyY2gtc3BlY2lmaWMgdmVyc2lvbnMsIGp1bXBzIG91dC4gVGhpcyBnZW5lcmljIGZ1bmN0aW9uICppdHNlbGYqIGNvbnRhaW5zIGBWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7YCwgYSBjcml0aWNhbCBydW50aW1lIGFzc2VydGlvbi4gVGhpcyBpcyBhIHZlcnkgc3Ryb25nIGluZGljYXRvciwgZ2l2ZW4gdGhlIGZ1enppbmcgcnVsZXM6IFwiUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXCIgVGhlIGNoZWNrIHNwZWNpZmljYWxseSB0YXJnZXRzIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggY291bGQgYmUgdmVyeSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy5cblxuVGhlIHJ1bGUgc2V0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBgbW0vYCBhcyB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIHBhdGNoIHRvdWNoZXMgdGhhdCBkaXJlY3RvcnkgZGlyZWN0bHkuIFRoZSBmYWN0IHRoYXQgdGhlIGdlbmVyaWMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2Agd2l0aGluIGBjaGFuZ2VfaHVnZV9wdWRgIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoYXQgYXJlYS4gVGhlIHVzZSBjYXNlIGlzIGBjaGFuZ2VfaHVnZV9wdWRgLCB3aGljaCBpcyBhIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgd2UgbmVlZCB0byBmdXp6LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgZGV0YWlscyB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYHB1ZHBfaW52YWxpZGF0ZWAgYW5kIHNlZSBleGFjdGx5IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgYGNoYW5nZV9odWdlX3B1ZGAuIFVuZGVyc3RhbmRpbmcgd2hhdCBjYWxscyB0aGF0IGZ1bmN0aW9uLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSBpcyBjcml0aWNhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjAyLjU0MDY2MzA5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzNjI5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX2h1Z2VfcHVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI3MzQ9aW50IGNoYW5nZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0Mi0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9odWdlX21lbW9yeS5jOjI4NDM6aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTI4NDQtXFx0XFx0ICAgIHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IG5ld3Byb3QsXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTU3ND1zdGF0aWMgaW5saW5lIGxvbmcgY2hhbmdlX3B1ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbXByb3RlY3QuYy02MTEtXFx0XFx0XFx0fSBlbHNlIHtcXG5tbS9tcHJvdGVjdC5jOjYxMjpcXHRcXHRcXHRcXHRyZXQgPSBjaGFuZ2VfaHVnZV9wdWQodGxiLCB2bWEsIHB1ZHAsXFxubW0vbXByb3RlY3QuYy02MTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYWRkciwgbmV3cHJvdCwgY3BfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzowMi42NjYwMzA2OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDE4NTYwMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBwdWRwX2ludmFsaWRhdGVgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgcHVkcF9pbnZhbGlkYXRlYCwgc28gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGl0ICppcyogYSBub24tc3RhdGljIHN5bWJvbCwgd2hpY2ggbWVhbnMgaXQncyBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBHb29kLiBOb3csIGV4YW1pbmluZyB0aGUgY29kZSBibG9jaywgaXQncyBkZWZpbmVkIGNvbmRpdGlvbmFsbHk6IGl0IHVzZXMgYW4gYCNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFYCBndWFyZCBhbmQgYW4gYCNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAuIEkgc2VlIGEgY2FsbCB0byBgZmx1c2hfcHVkX3RsYl9yYW5nZWAsIHRoYXQncyBhbiBpbXBvcnRhbnQgc2lnbmFsLiBBbmQgSSBzZWUgdGhhdCBgcHVkcF9pbnZhbGlkYXRlYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBgY2hhbmdlX2h1Z2VfcHVkYCBmdW5jdGlvbiwgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBzbyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgeDg2XzY0L2FtZDY0IGFyY2hpdGVjdHVyZXMuIExldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQsIHRoYXQncyBjbGVhci4gQnV0IHRoZSBtb3JlIGNydWNpYWwgZGV0YWlsIGlzIHRoYXQgYENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBpcyBzZWxlY3RlZCBieSBgWDg2XzY0YCAob3IgcmF0aGVyIHdoZW4gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2VsZWN0ZWQpLiBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgaXMga2V5IGhlcmUuIFRvIGJlIHN1cmUgbGV0J3MgYWxzbyBleGFtaW5lIGBtbS9LY29uZmlnYCBhcm91bmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoxMC4wODQ1OTQyNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNTgwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTgtXFxubW0vS2NvbmZpZzo4NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODYwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY1LVxcbm1tL0tjb25maWc6ODY2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjctXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODc0LVxcbm1tL0tjb25maWc6ODc1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MS1cXG5tbS9LY29uZmlnOjg5MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDEtXFxubW0vS2NvbmZpZzo5MDI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDktXFxubW0vS2NvbmZpZzo5MTA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE3LVxcbm1tL0tjb25maWc6OTE4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE5LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI3PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzYtXFxubW0vS2NvbmZpZzo5Mzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzOC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ1LVxcbm1tL0tjb25maWc6OTQ2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUzLVxcbm1tL0tjb25maWc6OTU0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTUtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MS1cXG5tbS9LY29uZmlnOjk2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2My1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjEwLjE3NTE4MTIzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODE3MjcxNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgaXMgYmVpbmcgY29tcGlsZWQuIEZpcnN0IHN0ZXA/IE5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGg6IHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVzaWRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoaWNoIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGBwZ3RhYmxlLWdlbmVyaWMuY2AuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBidWlsZCBwcm9jZXNzIG9yIGlkZW50aWZ5aW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBiYXNlLiBMZXQncyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNzgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoxMS45OTI0NzE1ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTc4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBndGFibGUtZ2VuZXJpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTM5LVxcdFxcdFxcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxcXFxubW0vTWFrZWZpbGU6NDA6XFx0XFx0XFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXFxubW0vTWFrZWZpbGUtNDEtXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yLS8qXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MzogKiAgbW0vcGd0YWJsZS1nZW5lcmljLmNcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjEyLjA4MDA1NDUzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDM3MTU4NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uIGFuZCBDYWxsZXJzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3B0aW9uLiBSaWdodCwgaXQgbG9va3MgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNTVVgLiBPbiBhbiB4ODZfNjQgc3lzdGVtLCB3aGljaCBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHNpbmNlIGl0J3MgYW4gYW1kNjQgc2V0dXAsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBnZXRzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYFg4Nl82NGAgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcyB3aG9sZSBjb2RlIHBhdGggZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQsIHdobyBjYWxscyBpdCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjYWxsZXJzLiBJJ2xsIG1vdmUgb24gdG8gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBmb3Igd2hlcmUgYHB1ZHBfaW52YWxpZGF0ZWAgaXMgY2FsbGVkLiBBaCwgdGhlcmUgaXQgaXMhIGBjaGFuZ2VfaHVnZV9wdWRgIGNhbGxzIGBwdWRwX2ludmFsaWRhdGVgLiBJIHNlZSB0aGF0IGBjaGFuZ2VfaHVnZV9wdWRgIGlzIGluIHR1cm4gY2FsbGVkIHdpdGhpbiBgbW0vbXByb3RlY3QuY2AgZnJvbSBgY2hhbmdlX3B1ZF9yYW5nZWAuIEFuZCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgYGNoYW5nZV9wdWRfcmFuZ2VgIGlzIHBhcnQgb2YgYGNoYW5nZV9wcm90ZWN0aW9uX3JhbmdlYCwgd2hpY2ggaXMgdXNlZCBieSBgbXByb3RlY3RfZml4dXBgLCBgZG9fbXByb3RlY3RfcGtleWAgYW5kIHVsdGltYXRlbHksIGBzeXNfbXByb3RlY3RgLiBUaGlzIGltcGxpZXMgdGhhdCBwcm90ZWN0aW9uIG1vZGlmaWNhdGlvbnMgb24gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgc3BlY2lmaWNhbGx5IGF0IHRoZSBQVUQgbGV2ZWwsIHRyaWdnZXIgYGNoYW5nZV9odWdlX3B1ZGAuXG5cbk5leHQsIEknbGwgYnJvYWRlbiBteSBzZWFyY2guIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBjaGVjayB0byBzZWUgaWYgYHB1ZHBfaW52YWxpZGF0ZWAgb3IgYGNoYW5nZV9odWdlX3B1ZGAgYXJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjM3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjE1LjUxNzIxNjAzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NTYwMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdWRwX2ludmFsaWRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTQyMD1leHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xNDIyLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg6MTQyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTQyNC1cXHRcXHRcXHQgICAgIHB1ZF90ICpwdWRwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM9MTU1PXBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjctXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYzoxNjg6cHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjktXFx0XFx0ICAgICAgcHVkX3QgKnB1ZHApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMzE3PWV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzIyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEzMjM6ZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEzMjQtXFx0XFx0XFx0ICAgICBwdWRfdCAqcHVkcCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI4NDM9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg3MS1cXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjI4NzI6XFx0b2xkcHVkID0gcHVkcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcHVkcCk7XFxubW0vaHVnZV9tZW1vcnkuYy0yODczLVxcdGVudHJ5ID0gcHVkX21vZGlmeShvbGRwdWQsIG5ld3Byb3QpO1xcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjEyPXBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjIyMjpwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMjMtXFx0XFx0ICAgICAgcHVkX3QgKnB1ZHApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjE3Ljg5MjgyMTg4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU4NzczNjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGNoYW5nZV9odWdlX3B1ZGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBkZWZpbml0ZWx5IHRvIGF1ZGl0IHRoZSBjYWxscyB0byB0aGF0IGBjaGFuZ2VfaHVnZV9wdWRgIGZ1bmN0aW9uLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mICp3aG8qIGlzIHVzaW5nIGl0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogdGhleSdyZSB1c2luZyBpdC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgZXZlcnkgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBmdW5jdGlvbiBjYWxsOyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBtb2RpZmljYXRpb24gd2l0aGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCwgb3IgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkIGZyb20gc29tZSBkZWVwbHkgbmVzdGVkLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoPyBUaGF0J3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGtub3cuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZy4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdGhpcyBmdW5jdGlvbiBjYW4gbWFrZSBhbmQgaG93IGl0cyBpbXBsZW1lbnRhdGlvbiBtYXkgYWZmZWN0IHRoZSBsYXJnZXIgc3lzdGVtLCBhbmQgYWxsb3dzIG1lIHRvIGJlZ2luIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhbnkgY2hhbmdlcyB3aWxsIHJpcHBsZSBvdXR3YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoxOS43NTE1OTk0OTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDIzNTQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX2h1Z2VfcHVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2lzX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkzLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5NDppbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ5NS1cXHRcXHQgICAgcHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgbmV3cHJvdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ5OD1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5OTpjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAwLVxcdFxcdHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IG5ld3Byb3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03OTI9c3RhdGljIGlubGluZSB2b2lkIF9fc3BsaXRfaHVnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03OTYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Nzk3OnN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc5OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkcCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjczND1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODQyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg0MzppbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0NC1cXHRcXHQgICAgcHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgbmV3cHJvdCxcXG4tLVxcbm1tL21wcm90ZWN0LmM9NTc0PXN0YXRpYyBpbmxpbmUgbG9uZyBjaGFuZ2VfcHVkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTYxMS1cXHRcXHRcXHR9IGVsc2Uge1xcbm1tL21wcm90ZWN0LmM6NjEyOlxcdFxcdFxcdFxcdHJldCA9IGNoYW5nZV9odWdlX3B1ZCh0bGIsIHZtYSwgcHVkcCxcXG5tbS9tcHJvdGVjdC5jLTYxMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhZGRyLCBuZXdwcm90LCBjcF9mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjIxLjk1Mzk2MzcxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDc3NDMwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgcHVkcF9pbnZhbGlkYXRlYCBhbmQgYGNoYW5nZV9odWdlX3B1ZGAuIEkgc2VlIHRoYXQgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQgYW5kIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGlzIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCBiZWNhdXNlIHRoYXQgZmlsZSBjb21waWxlcyBmb3IgYW1kNjQgKndoZW4qIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgaXMgZW5hYmxlZCwgd2hpY2ggaW4gdHVybiBpcyBsaW5rZWQgdG8gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC5cblxuTm93LCBJJ20gbm90aW5nIHRoYXQgYHB1ZHBfaW52YWxpZGF0ZWAgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggcGFnZSB0YWJsZSBlbnRyeSBtYW5pcHVsYXRpb24gYW5kIFRMQiBpbnZhbGlkYXRpb24uIEl0IGNvbnRhaW5zIGBWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSlgLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gUnVudGltZSBhc3NlcnRpb25zIGxpa2UgdGhpcyBvZnRlbiBpbmRpY2F0ZSBhcmVhcyB0aGF0IGFyZSBwcm9uZSB0byBzdWJ0bGUgYnVncyBvciBjb3JuZXIgY2FzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBHaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYGNoYW5nZV9odWdlX3B1ZGAsIHdoaWNoIEkgdW5kZXJzdGFuZCBoYW5kbGVzIGh1Z2UgcGFnZSBvcGVyYXRpb25zLCBpdCdzIGNsZWFyIHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZC5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiLiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYGNoYW5nZV9odWdlX3B1ZGAgaXMgc3VmZmljaWVudGx5IGhpZ2guIFRoZSBrZXkgZWxlbWVudHMgdG8gdHJhY2sgYXJlIGRlZmluaXRlbHkgYHB1ZHBfaW52YWxpZGF0ZWAsIGBjaGFuZ2VfaHVnZV9wdWRgLCBhbmQgdGhlIHVuZGVybHlpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGxldCBtZSBhc3NlbWJsZSB0aGUgSlNPTiBvdXRwdXQgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSBzdHJ1Y3R1cmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcW1wicHVkcFxcX2ludmFsaWRhdGVcIiwgXCJjaGFuZ2VcXF9odWdlXFxfcHVkXCJdXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFtcIlRSQU5TUEFSRU5UXFxfSFVHRVBBR0VcIl1cbiogICBgUmVhc29uaW5nYDogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgICh1c2VkIGJ5IHg4Ni9hbWQ2NCB3aGVuIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXQgUFVEIGxldmVsIGFyZSBzdXBwb3J0ZWQpIHJlcGxhY2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1vZGlmaWVzIHBhZ2UgdGFibGUgaGFuZGxpbmcgYW5kIGluY2x1ZGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoYFZNX1dBUk5fT05fT05DRWApIHJlYWNoYWJsZSBkdXJpbmcgaHVnZSBQVUQgb3BlcmF0aW9ucyBzdWNoIGFzIGBjaGFuZ2VfaHVnZV9wdWQoKWAgb24gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcy5cIlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgaW5mb3JtYXRpb24gYXNzZW1ibGVkLCBJJ20gcmVhZHkgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuIFRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGRldGFpbCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTgyLCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoyNi40MzEzOTc2MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MzM0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHVkcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJjaGFuZ2VfaHVnZV9wdWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInB1ZHBfaW52YWxpZGF0ZVwiLFxuICAgIFwiY2hhbmdlX2h1Z2VfcHVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgcHVkcF9pbnZhbGlkYXRlKCkgaW4gbW0vcGd0YWJsZS1nZW5lcmljLmMgKHJlcGxhY2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9uIHg4NiBhbmQgcmlzY3YpLCB3aGljaCBpcyB1c2VkIG9uIGFtZDY0IHdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhdCBQVUQgbGV2ZWwgYXJlIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGluY2x1ZGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKSBpbiByZWFjaGFibGUgcGF0aHMgZXhlY3V0ZWQgYnkgY2hhbmdlX2h1Z2VfcHVkKCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjI2LjU3NDg0MTI2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNjUxMzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjI2LjU3NTMzNTU2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1MTYwMTUxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IG1hbmlwdWxhdGUgYXJjaGl0ZWN0dXJhbCBwYWdlIHRhYmxlIGVudHJpZXMgKFBVRC9QTUQvUFRFIGJpdC1mbGFncywgcGFnZSB0YWJsZSBlc3RhYmxpc2htZW50LCBhbmQgVExCIGludmFsaWRhdGlvbikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlLCBhbHRlciBzdHJ1Y3QgcGFkZGluZy9pbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBjb3VsZCBiZSBldmFsdWF0ZWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL2RlYnVnIGJ1aWxkcyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQ4M2Q5YzNmZWI1MWNlN2E0ZjZmMTMzOTA4YTZkYjAxZmM2ZTc4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MzY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGI1YTUxYjBlZjk0NDAuLjhhN2NhMTg2MzU5NWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTE3Myw2ICsxNzMsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1RcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcbiBcdHNlbGVjdCBIQVZFX0FSTV9TTUNDQ1xuIFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggNjAwMDkwNWEyZTg2NS4uZmRjMzM4OTcwOTM0ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTI0MywxOCArMjQzLDYgQEAgc3RhdGljIGlubGluZSBwdGVfdCBzZXRfcHRlX2JpdChwdGVfdCBwdGUsIHBncHJvdF90IHByb3QpXG4gXHRyZXR1cm4gcHRlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHBtZF90IGNsZWFyX3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KVxuLXtcbi1cdHBtZF92YWwocG1kKSBcdTAwMjY9IH5wZ3Byb3RfdmFsKHByb3QpO1xuLVx0cmV0dXJuIHBtZDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBwbWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpXG4te1xuLVx0cG1kX3ZhbChwbWQpIHw9IHBncHJvdF92YWwocHJvdCk7XG4tXHRyZXR1cm4gcG1kO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX25vdm1hKHB0ZV90IHB0ZSlcbiB7XG4gXHRwdGUgPSBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KFBURV9XUklURSkpO1xuQEAgLTYxOSwxMSArNjA3LDEzIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21raHVnZShwbWRfdCBwbWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG4tI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpXHQoISEoKHBtZF92YWwocHRlKSBcdTAwMjYgUFRFX1NQRUNJQUwpKSlcbi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKVxuLXtcbi1cdHJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7XG4tfVxuKyNkZWZpbmUgcG1kX3NwZWNpYWwocG1kKVx0cHRlX3NwZWNpYWwocG1kX3B0ZShwbWQpKVxuKyNkZWZpbmUgcG1kX21rc3BlY2lhbChwbWQpXHRwdGVfcG1kKHB0ZV9ta3NwZWNpYWwocG1kX3B0ZShwbWQpKSlcbisjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxuKyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKVx0cHRlX3NwZWNpYWwocHVkX3B0ZShwdWQpKVxuKyNkZWZpbmUgcHVkX21rc3BlY2lhbChwdWQpXHRwdGVfcHVkKHB0ZV9ta3NwZWNpYWwocHVkX3B0ZShwdWQpKSlcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIF9fcG1kX3RvX3BoeXMocG1kKVx0X19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpXG5AQCAtNjM0LDggKzYyNCwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKVxuICNkZWZpbmUgcHVkX3lvdW5nKHB1ZClcdFx0cHRlX3lvdW5nKHB1ZF9wdGUocHVkKSlcbiAjZGVmaW5lIHB1ZF9ta3lvdW5nKHB1ZClcdHB0ZV9wdWQocHRlX21reW91bmcocHVkX3B0ZShwdWQpKSlcbiAjZGVmaW5lIHB1ZF9ta3dyaXRlX25vdm1hKHB1ZClcdHB0ZV9wdWQocHRlX21rd3JpdGVfbm92bWEocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta3dyaXRlKHB1ZClcdHB1ZF9ta3dyaXRlX25vdm1hKHB1ZClcbiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKVx0cHRlX3B1ZChwdGVfbWt2YWxpZF9rKHB1ZF9wdGUocHVkKSkpXG4gI2RlZmluZSBwdWRfd3JpdGUocHVkKVx0XHRwdGVfd3JpdGUocHVkX3B0ZShwdWQpKVxuKyNkZWZpbmUgcHVkX2RpcnR5KHB1ZClcdFx0cHRlX2RpcnR5KHB1ZF9wdGUocHVkKSlcbisjZGVmaW5lIHB1ZF93cnByb3RlY3QocHVkKVx0cHRlX3B1ZChwdGVfd3Jwcm90ZWN0KHB1ZF9wdGUocHVkKSkpXG4rI2RlZmluZSBwdWRfbWtkaXJ0eShwdWQpXHRwdGVfcHVkKHB0ZV9ta2RpcnR5KHB1ZF9wdGUocHVkKSkpXG4rI2RlZmluZSBwdWRfbWtvbGQocHVkKVx0XHRwdGVfcHVkKHB0ZV9ta29sZChwdWRfcHRlKHB1ZCkpKVxuKyNkZWZpbmUgcHVkX21raW52YWxpZChwdWQpXHRwdGVfcHVkKHB0ZV9ta2ludmFsaWQocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta2NsZWFuKHB1ZClcdHB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSlcbiBcbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta2h1Z2UocHVkX3QgcHVkKVxuIHtcbkBAIC04ODYsNiArODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpXG4gI2RlZmluZSBwdWRfdXNlcihwdWQpXHRcdHB0ZV91c2VyKHB1ZF9wdGUocHVkKSlcbiAjZGVmaW5lIHB1ZF91c2VyX2V4ZWMocHVkKVx0cHRlX3VzZXJfZXhlYyhwdWRfcHRlKHB1ZCkpXG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4rc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxuK3tcbitcdHJldHVybiBwdWRfcHJlc2VudChwdWQpIFx1MDAyNlx1MDAyNiAhcHVkX3RhYmxlKF9fcHVkKHB1ZF92YWwocHVkKSB8IFBURV9WQUxJRCkpO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sNF9lbmFibGVkKHZvaWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpXG5AQCAtMTI1Miw2ICsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpXG4gXHRyZXR1cm4gcHRlX3BtZChwdGVfbW9kaWZ5KHBtZF9wdGUocG1kKSwgbmV3cHJvdCkpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxuK3tcbitcdHJldHVybiBwdGVfcHVkKHB0ZV9tb2RpZnkocHVkX3B0ZShwdWQpLCBuZXdwcm90KSk7XG4rfVxuK1xuIGV4dGVybiBpbnQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3ooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuIFx0XHRcdFx0XHQgcHRlX3QgZW50cnksIGludCBkaXJ0eSxcbkBAIC0xMjc2LDYgKzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxuK3N0YXRpYyBpbmxpbmUgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCxcbitcdFx0XHRcdFx0cHVkX3QgZW50cnksIGludCBkaXJ0eSlcbit7XG4rXHRyZXR1cm4gX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3oodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwLFxuK1x0XHRcdFx0XHQgICAgIHB1ZF9wdGUoZW50cnkpLCBkaXJ0eSwgUFVEX1NJWkUpO1xuK31cbisjZW5kaWZcbitcbiAjaWZkZWYgQ09ORklHX1BBR0VfVEFCTEVfQ0hFQ0tcbiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbiB7XG5AQCAtMTM1MCw2ICsxMzY5LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyAqL1xuIFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4rc3RhdGljIGlubGluZSBib29sIHB1ZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHApXG4re1xuK1x0cmV0dXJuIF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHJlc3MsIChwdGVfdCAqKXB1ZHApO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIHB0ZV90IF9fcHRlcF9nZXRfYW5kX2NsZWFyX2FueXN6KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdFx0XHQgICAgICAgcHRlX3QgKnB0ZXAsXG5AQCAtMTUxMiw2ICsxNTM5LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuK3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbit7XG4rXHRwYWdlX3RhYmxlX2NoZWNrX3B1ZF9zZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdWRwLCBwdWQpO1xuK1x0cmV0dXJuIF9fcHVkKHhjaGdfcmVsYXhlZChcdTAwMjZwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7XG4rfVxuKyNlbmRpZlxuK1xuIC8qXG4gICogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5OlxuICAqXHRiaXRzIDAtMTpcdHByZXNlbnQgKG11c3QgYmUgemVybylcbkBAIC0xNTg2LDYgKzE2MjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcXFxuIFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHBtZCkgZG8geyB9IHdoaWxlICgwKVxuKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZV9wdWQodm1hLCBhZGRyZXNzLCBwdWQpIGRvIHsgfSB3aGlsZSAoMClcbiBcbiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTJcbiAjZGVmaW5lIHBoeXNfdG9fdHRicihhZGRyKVx0KCgoYWRkcikgfCAoKGFkZHIpIFx1MDAzZVx1MDAzZSA0NikpIFx1MDAyNiBUVEJSX0JBRERSX01BU0tfNTIpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuaW5kZXggZjRkYjdkN2ZiZDVjNi4uNTVkMzNjNTUzN2YxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuQEAgLTE0MTksNiArMTQxOSw3IEBAIHN0YXRpYyBpbmxpbmUgcGd0YWJsZV90IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BNRFBfSU5WQUxJREFURVxuIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgICAgIHBtZF90ICpwbWRwKTtcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA0MGIxZWQ0ZjNlYTg5Li4zMjdmYTM3ODAzMmI3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTE1OSw5ICsxMTU5LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtpbnZhbGlkKHB1ZF90IHB1ZClcbiBcdHJldHVybiBfX3B1ZChwdWRfdmFsKHB1ZCkgXHUwMDI2IH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1RfTk9ORSkpO1xuIH1cbiBcbi1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdFx0ICAgICBwdWRfdCAqcHVkcCk7XG4tXG4gc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcbiB7XG4gXHRyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jIGIvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcbmluZGV4IDljNDQyN2QwYjE4NzQuLjE1NmUzODVlN2RiNDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xuKysrIGIvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcbkBAIC0xNTQsMTUgKzE1NCw2IEBAIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gcG1kO1xuIH1cbiBcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgICAgcHVkX3QgKnB1ZHApXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuLVx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4tXG4tXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcbi1cdHJldHVybiBvbGQ7XG4tfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTM4Nyw5ICsxMzg3LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kcCk7XG4gXG4tcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgICAgIHB1ZF90ICpwdWRwKTtcbi1cbiAvKlxuICAqIFBhZ2UgdGFibGUgcGFnZXMgYXJlIHBhZ2UtYWxpZ25lZC4gIFRoZSBsb3dlciBoYWxmIG9mIHRoZSB0b3BcbiAgKiBsZXZlbCBpcyB1c2VkIGZvciB1c2Vyc3BhY2UgYW5kIHRoZSB0b3AgaGFsZiBmb3IgdGhlIGtlcm5lbC5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbmluZGV4IGNiMDNmNWEyYjI0MzMuLjA5NDU5MDg2MzFkYzUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbisrKyBiL2FyY2gveDg2L21tL3BndGFibGUuY1xuQEAgLTUxOSwxOCArNTE5LDYgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gfVxuICNlbmRpZlxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG4tXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgIHB1ZF90ICpwdWRwKVxuLXtcbi1cdFZNX1dBUk5fT05fT05DRSghcHVkX3ByZXNlbnQoKnB1ZHApKTtcbi1cdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xuLVx0Zmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgKyBIUEFHRV9QVURfU0laRSk7XG4tXHRyZXR1cm4gb2xkO1xuLX1cbi0jZW5kaWZcbi1cbiAvKipcbiAgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gUmVzZXJ2ZSBhIGhvbGUgaW4gdGhlIHRvcCBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmVcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCA4YzA5M2MxMTllNWE4Li4zMjE3MzAwNWIwODdmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMTMxOCw2ICsxMzE4LDEzIEBAIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTtcbiAjZW5kaWZcbiBcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuK2V4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbitcdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbisjZW5kaWZcbisjZW5kaWZcbitcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FXG4gc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgcHRlX2EsIHB0ZV90IHB0ZV9iKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5pbmRleCBiOTFiMWE5ODAyOWM3Li5hYzExNzVkOWE1OWE3IDEwMDY0NFxuLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmNcbisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5AQCAtMjE3LDYgKzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbitwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbitcdFx0ICAgICAgcHVkX3QgKnB1ZHApXG4re1xuK1x0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuK1x0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4rXG4rXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcbitcdHJldHVybiBvbGQ7XG4rfVxuKyNlbmRpZlxuKyNlbmRpZlxuK1xuICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaFxuIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgIHBtZF90ICpwbWRwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6Mzc6MjYuNTc1MzM2NDI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTU5OTQ4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIGFtZDY0IEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbmQgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaC4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLlxuXG5GaXJzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgY29uZmlndXJhdGlvbiBiZWluZyBhZGRlZCBmb3IgQVJNNjQ6IHNlbGVjdGluZyBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgYmFzZWQgb24gYFBBR0VfU0laRV80S0JgLiBUaGF0J3MgYSBjb25kaXRpb25hbCBzZXR0aW5nLCBhbmQgZXhwZWN0ZWQuIFRoZW4sIGEgYnVuY2ggb2YgQVJNNjQtc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgUFVELWxldmVsIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIFBoeXNpY2FsIEZyYW1lIE51bWJlciBNYXAgKFBGTk1BUCkgYXJlIGFkZGVkLiBUaGlzIHNlZW1zIHJlYXNvbmFibGUgZm9yIHN1cHBvcnRpbmcgVEhQIGF0IHRoYXQgbGV2ZWwuXG5cbk5leHQsIEkgc2VlIGEgYml0IG9mIGNsZWFudXAuIFBvd2VyUEMgaXMgZGVmaW5pbmcgYF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgYW5kIGV4dGVybnMgYSBmdW5jdGlvbi4gUklTQy1WIGFuZCB4ODYgYXJlIHJlbW92aW5nIGR1cGxpY2F0ZSBhcmNoLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBgcHVkcF9pbnZhbGlkYXRlYC4gQWgsIHNvIGl0IGxvb2tzIGxpa2UgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBnZW5lcmFsaXplZC5cblxuVGhlIGNvcmUgb2YgdGhlIGdlbmVyYWxpemF0aW9uIGlzIGhhcHBlbmluZyBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgIGFuZCBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlYCBpcyBhZGRlZCBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2Vzbid0KiBoYXZlIGl0cyBvd24gZGVmaW5pdGlvbiwgYW5kIGlmIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBpcyBjb25maWd1cmVkLiBUaGVuIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZCBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGlzIG1ha2VzIHNlbnNlIOKAkyBjb25zb2xpZGF0ZSB0aGUgY29kZSwgcmVkdWNlIGR1cGxpY2F0aW9uLCBhbmQgcHJvdmlkZSBhIHN0YW5kYXJkIGludGVyZmFjZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgc2FmZT8gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXM/IFRoZSBjaGFuZ2VzIGFyZSAqcHJpbWFyaWx5KiBhYm91dCBQVUQtbGV2ZWwgVEhQIGhlbHBlcnMgYW5kIHRoZSBgcHVkcF9pbnZhbGlkYXRlYCBnZW5lcmFsaXphdGlvbi4gRnJvbSB3aGF0IEkgc2VlLCBgcHVkcF9pbnZhbGlkYXRlYCBpcyBlc3NlbnRpYWxseSBqdXN0IGJlaW5nIG1vdmVkIGZyb20geDg2IGFuZCBSSVNDLVYgdG8gdGhlIGdlbmVyaWMgY29kZS4gQVJNNjQgaXMgZ2V0dGluZyBuZXcgVEhQL1BGTk1BUCBzdXBwb3J0IGF0IHRoZSBQVUQgbGV2ZWwsIHdoaWNoIGlzIHdoYXQgdGhlIGhlbHBlcnMgYXJlIGRvaW5nLlxuXG5UaGVyZSdzIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gV2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIGJpdCBwYXR0ZXJucyAocHRlL3BtZC9wdWQgdmFsdWVzKSB0aGF0IGFyZSBiaXR3aXNlLW1hbmlwdWxhdGVkLiBUaGVyZSdzIG5vdGhpbmcgaGVyZSB0aGF0IGxvb2tzIGxpa2UgaXQgaXMgd3JpdGluZyB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXNlIGFyZSB0eXBpY2FsbHkgYml0d2lzZSBvcHMgYW5kIGF0b21pYyBleGNoYW5nZXMsIHdoaWNoIHdvdWxkIG5vdCBub3JtYWxseSBleHBvc2UgYW55IHNlY3VyaXR5IGlzc3Vlcy5cblxuU28sIGxldCdzIGdvIGRlZXBlciBhbmQgY29tcGFyZSBpdCB0byBib3RoIEtBU0FOIGFuZCBLTVNBTiBjaGVja3M6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQ/IE5vLiBUaGlzIHBhdGNoIGRvZXNuJ3QgbG9vayBsaWtlIGl0IGRlYWxzIHdpdGggdGhpcy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBJdCdzIGp1c3QgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY29uc29saWRhdGlvbi5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vdCB0aGF0IEkgY2FuIHNlZS4gV2UncmUgbWFpbmx5IGp1c3Qgd29ya2luZyB3aXRoIHBhZ2UgdGFibGUgc3RydWN0dXJlcy5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vcGUuXG5cbkJhc2VkIG9uIGFsbCBvZiB0aGF0LCBpdCBsb29rcyBsaWtlIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoYXQgYW5hbHlzaXMuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIGV4cGxhaW4gdGhlIHJhdGlvbmFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4MCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzozMy4wOTEzMzQ0MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IG1hbmlwdWxhdGUgYXJjaGl0ZWN0dXJhbCBwYWdlIHRhYmxlIGVudHJpZXMgKFBVRC9QTUQvUFRFIGJpdC1mbGFncywgcGFnZSB0YWJsZSBlc3RhYmxpc2htZW50LCBhbmQgVExCIGludmFsaWRhdGlvbikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlLCBhbHRlciBzdHJ1Y3QgcGFkZGluZy9pbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBjb3VsZCBiZSBldmFsdWF0ZWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL2RlYnVnIGJ1aWxkcyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIFBVRHMgYW5kIFBVRCBQRk5NQVAgb24gYXJtNjQsIHdoaWxlIGNvbnNvbGlkYXRpbmcgdGhlIGdlbmVyaWMgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFjcm9zcyBhcmNoaXRlY3R1cmVzICh4ODYsIHJpc2N2LCBwb3dlcnBjKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBhcmNoaXRlY3R1cmFsIHBhZ2UgdGFibGUgZW50cmllcyAoUFVEL1BNRC9QVEUgYml0LWZsYWdzLCBwYWdlIHRhYmxlIGVzdGFibGlzaG1lbnQsIGFuZCBUTEIgaW52YWxpZGF0aW9uKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8vZnJvbSB1c2Vyc3BhY2UsIGFsdGVyIHN0cnVjdCBwYWRkaW5nL2luaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGNvdWxkIGJlIGV2YWx1YXRlZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vZGVidWcgYnVpbGRzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-09 11:18:23 +0000 UTC FinishedAt: 2026-09-09 11:37:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0725b7946601a5af57e7f25fa81906dd34eaa341", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0725b7946601a5af57e7f25fa81906dd34eaa341", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "dca74b8b-77e0-4a3f-8b23-425b82229521" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "pudp_invalidate", "change_huge_pud" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O2NoYW5nZV9odWdlX3B1ZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXG5cblRoZXNlIGNoYW5nZXMgb25seSBtYW5pcHVsYXRlIGFyY2hpdGVjdHVyYWwgcGFnZSB0YWJsZSBlbnRyaWVzIChQVUQvUE1EL1BURSBiaXQtZmxhZ3MsIHBhZ2UgdGFibGUgZXN0YWJsaXNobWVudCwgYW5kIFRMQiBpbnZhbGlkYXRpb24pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0by9mcm9tIHVzZXJzcGFjZSwgYWx0ZXIgc3RydWN0IHBhZGRpbmcvaW5pdGlhbGl6YXRpb24sIG9yIGNyZWF0ZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgY291bGQgYmUgZXZhbHVhdGVkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9kZWJ1ZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCA5IDExOjM2OjM4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjVhNTFiMGVmOTQ0MC4uOGE3Y2ExODYzNTk1YSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMTczLDYgJiM0MzsxNzMsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1RcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4mIzQzO1x0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgUEFHRV9TSVpFXzRLQlxuIFx0c2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLXG4gXHRzZWxlY3QgSEFWRV9BUk1fU01DQ0NcbiBcdHNlbGVjdCBIQVZFX0FTTV9NT0RWRVJTSU9OU1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDYwMDA5MDVhMmU4NjUuLmZkYzMzODk3MDkzNGQgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0yNDMsMTggJiM0MzsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdClcbiBcdHJldHVybiBwdGU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgY2xlYXJfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpXG4te1xuLVx0cG1kX3ZhbChwbWQpIFx1MDAyNj0gfnBncHJvdF92YWwocHJvdCk7XG4tXHRyZXR1cm4gcG1kO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHBtZF90IHNldF9wbWRfYml0KHBtZF90IHBtZCwgcGdwcm90X3QgcHJvdClcbi17XG4tXHRwbWRfdmFsKHBtZCkgfD0gcGdwcm90X3ZhbChwcm90KTtcbi1cdHJldHVybiBwbWQ7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGVfbm92bWEocHRlX3QgcHRlKVxuIHtcbiBcdHB0ZSA9IHNldF9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoUFRFX1dSSVRFKSk7XG5AQCAtNjE5LDExICYjNDM7NjA3LDEzIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21raHVnZShwbWRfdCBwbWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG4tI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpXHQoISEoKHBtZF92YWwocHRlKSBcdTAwMjYgUFRFX1NQRUNJQUwpKSlcbi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKVxuLXtcbi1cdHJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7XG4tfVxuJiM0MzsjZGVmaW5lIHBtZF9zcGVjaWFsKHBtZClcdHB0ZV9zcGVjaWFsKHBtZF9wdGUocG1kKSlcbiYjNDM7I2RlZmluZSBwbWRfbWtzcGVjaWFsKHBtZClcdHB0ZV9wbWQocHRlX21rc3BlY2lhbChwbWRfcHRlKHBtZCkpKVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4mIzQzOyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKVx0cHRlX3NwZWNpYWwocHVkX3B0ZShwdWQpKVxuJiM0MzsjZGVmaW5lIHB1ZF9ta3NwZWNpYWwocHVkKVx0cHRlX3B1ZChwdGVfbWtzcGVjaWFsKHB1ZF9wdGUocHVkKSkpXG4gI2VuZGlmXG4gXG4gI2RlZmluZSBfX3BtZF90b19waHlzKHBtZClcdF9fcHRlX3RvX3BoeXMocG1kX3B0ZShwbWQpKVxuQEAgLTYzNCw4ICYjNDM7NjI0LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXG4gI2RlZmluZSBwdWRfeW91bmcocHVkKVx0XHRwdGVfeW91bmcocHVkX3B0ZShwdWQpKVxuICNkZWZpbmUgcHVkX21reW91bmcocHVkKVx0cHRlX3B1ZChwdGVfbWt5b3VuZyhwdWRfcHRlKHB1ZCkpKVxuICNkZWZpbmUgcHVkX21rd3JpdGVfbm92bWEocHVkKVx0cHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKVxuJiM0MzsjZGVmaW5lIHB1ZF9ta3dyaXRlKHB1ZClcdHB1ZF9ta3dyaXRlX25vdm1hKHB1ZClcbiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKVx0cHRlX3B1ZChwdGVfbWt2YWxpZF9rKHB1ZF9wdGUocHVkKSkpXG4gI2RlZmluZSBwdWRfd3JpdGUocHVkKVx0XHRwdGVfd3JpdGUocHVkX3B0ZShwdWQpKVxuJiM0MzsjZGVmaW5lIHB1ZF9kaXJ0eShwdWQpXHRcdHB0ZV9kaXJ0eShwdWRfcHRlKHB1ZCkpXG4mIzQzOyNkZWZpbmUgcHVkX3dycHJvdGVjdChwdWQpXHRwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSlcbiYjNDM7I2RlZmluZSBwdWRfbWtkaXJ0eShwdWQpXHRwdGVfcHVkKHB0ZV9ta2RpcnR5KHB1ZF9wdGUocHVkKSkpXG4mIzQzOyNkZWZpbmUgcHVkX21rb2xkKHB1ZClcdFx0cHRlX3B1ZChwdGVfbWtvbGQocHVkX3B0ZShwdWQpKSlcbiYjNDM7I2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZClcdHB0ZV9wdWQocHRlX21raW52YWxpZChwdWRfcHRlKHB1ZCkpKVxuJiM0MzsjZGVmaW5lIHB1ZF9ta2NsZWFuKHB1ZClcdHB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSlcbiBcbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta2h1Z2UocHVkX3QgcHVkKVxuIHtcbkBAIC04ODYsNiAmIzQzOzg4MywxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVxuICNkZWZpbmUgcHVkX3VzZXIocHVkKVx0XHRwdGVfdXNlcihwdWRfcHRlKHB1ZCkpXG4gI2RlZmluZSBwdWRfdXNlcl9leGVjKHB1ZClcdHB0ZV91c2VyX2V4ZWMocHVkX3B0ZShwdWQpKVxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfdGFibGUoX19wdWQocHVkX3ZhbChwdWQpIHwgUFRFX1ZBTElEKSk7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdWQocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbkBAIC0xMjUyLDYgJiM0MzsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpXG4gXHRyZXR1cm4gcHRlX3BtZChwdGVfbW9kaWZ5KHBtZF9wdGUocG1kKSwgbmV3cHJvdCkpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwdGVfcHVkKHB0ZV9tb2RpZnkocHVkX3B0ZShwdWQpLCBuZXdwcm90KSk7XG4mIzQzO31cbiYjNDM7XG4gZXh0ZXJuIGludCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFnc19hbnlzeihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG4gXHRcdFx0XHRcdCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5LFxuQEAgLTEyNzYsNiAmIzQzOzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCxcbiYjNDM7XHRcdFx0XHRcdHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3oodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwLFxuJiM0MztcdFx0XHRcdFx0ICAgICBwdWRfcHRlKGVudHJ5KSwgZGlydHksIFBVRF9TSVpFKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLXG4gc3RhdGljIGlubGluZSBib29sIHB0ZV91c2VyX2FjY2Vzc2libGVfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpXG4ge1xuQEAgLTEzNTAsNiAmIzQzOzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HICovXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwdWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0X2FuZF9jbGVhcl9hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiBcdFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHRcdFx0ICAgICAgIHB0ZV90ICpwdGVwLFxuQEAgLTE1MTIsNiAmIzQzOzE1MzksMTUgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuJiM0MztzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxuJiM0Mzt7XG4mIzQzO1x0cGFnZV90YWJsZV9jaGVja19wdWRfc2V0KHZtYS1cdTAwM2V2bV9tbSwgYWRkcmVzcywgcHVkcCwgcHVkKTtcbiYjNDM7XHRyZXR1cm4gX19wdWQoeGNoZ19yZWxheGVkKFx1MDAyNnB1ZF92YWwoKnB1ZHApLCBwdWRfdmFsKHB1ZCkpKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnk6XG4gICpcdGJpdHMgMC0xOlx0cHJlc2VudCAobXVzdCBiZSB6ZXJvKVxuQEAgLTE1ODYsNiAmIzQzOzE2MjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcXFxuIFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHBtZCkgZG8geyB9IHdoaWxlICgwKVxuJiM0MzsjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHZtYSwgYWRkcmVzcywgcHVkKSBkbyB7IH0gd2hpbGUgKDApXG4gXG4gI2lmZGVmIENPTkZJR19BUk02NF9QQV9CSVRTXzUyXG4gI2RlZmluZSBwaHlzX3RvX3R0YnIoYWRkcilcdCgoKGFkZHIpIHwgKChhZGRyKSBcdTAwM2VcdTAwM2UgNDYpKSBcdTAwMjYgVFRCUl9CQUREUl9NQVNLXzUyKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbmluZGV4IGY0ZGI3ZDdmYmQ1YzYuLjU1ZDMzYzU1MzdmMTMgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbkBAIC0xNDE5LDYgJiM0MzsxNDE5LDcgQEAgc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUE1EUF9JTlZBTElEQVRFXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgICAgcG1kX3QgKnBtZHApO1xuJiM0MzsjZGVmaW5lIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA0MGIxZWQ0ZjNlYTg5Li4zMjdmYTM3ODAzMmI3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTE1OSw5ICYjNDM7MTE1OSw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21raW52YWxpZChwdWRfdCBwdWQpXG4gXHRyZXR1cm4gX19wdWQocHVkX3ZhbChwdWQpIFx1MDAyNiB+KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UX05PTkUpKTtcbiB9XG4gXG4tZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuLVxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpXG4ge1xuIFx0cmV0dXJuIHB0ZV9wdWQocHRlX21vZGlmeShwdWRfcHRlKHB1ZCksIG5ld3Byb3QpKTtcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuYyBiL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jXG5pbmRleCA5YzQ0MjdkMGIxODc0Li4xNTZlMzg1ZTdkYjQ0IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jXG5AQCAtMTU0LDE1ICYjNDM7MTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBwbWQ7XG4gfVxuIFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbi17XG4tXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XG4tXHRwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTtcbi1cbi1cdGZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IEhQQUdFX1BVRF9TSVpFKTtcbi1cdHJldHVybiBvbGQ7XG4tfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTM4Nyw5ICYjNDM7MTM4Nyw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApO1xuIFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgICBwdWRfdCAqcHVkcCk7XG4tXG4gLypcbiAgKiBQYWdlIHRhYmxlIHBhZ2VzIGFyZSBwYWdlLWFsaWduZWQuICBUaGUgbG93ZXIgaGFsZiBvZiB0aGUgdG9wXG4gICogbGV2ZWwgaXMgdXNlZCBmb3IgdXNlcnNwYWNlIGFuZCB0aGUgdG9wIGhhbGYgZm9yIHRoZSBrZXJuZWwuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5pbmRleCBjYjAzZjVhMmIyNDMzLi4wOTQ1OTA4NjMxZGM1IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbkBAIC01MTksMTggJiM0Mzs1MTksNiBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbi1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgICAgcHVkX3QgKnB1ZHApXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuLVx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4tXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyAmIzQzOyBIUEFHRV9QVURfU0laRSk7XG4tXHRyZXR1cm4gb2xkO1xuLX1cbi0jZW5kaWZcbi1cbiAvKipcbiAgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gUmVzZXJ2ZSBhIGhvbGUgaW4gdGhlIHRvcCBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmVcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCA4YzA5M2MxMTllNWE4Li4zMjE3MzAwNWIwODdmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMTMxOCw2ICYjNDM7MTMxOCwxMyBAQCBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kcCk7XG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuJiM0MztleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4mIzQzO1x0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuJiM0MzsjZW5kaWZcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX1NBTUVcbiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0XG4tLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbkBAIC0yMTcsNiAmIzQzOzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4mIzQzOyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuJiM0MztwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiYjNDM7XHRcdCAgICAgIHB1ZF90ICpwdWRwKVxuJiM0Mzt7XG4mIzQzO1x0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuJiM0MztcdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xuJiM0MztcbiYjNDM7XHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyAmIzQzOyBIUEFHRV9QVURfU0laRSk7XG4mIzQzO1x0cmV0dXJuIG9sZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7I2VuZGlmXG4mIzQzO1xuICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaFxuIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgIHBtZF90ICpwbWRwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDssCiAgICAmIzM0O2NoYW5nZV9odWdlX3B1ZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDExOjM2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGI1YTUxYjBlZjk0NDAuLjhhN2NhMTg2MzU5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfQVJDSF9USFJFQURfU1RSVUNUX1dISVRFTElTVAogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCCiAJc2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLCiAJc2VsZWN0IEhBVkVfQVJNX1NNQ0NDCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDYwMDA5MDVhMmU4NjUuLmZkYzMzODk3MDkzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNDMsMTggJiM0MzsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdCkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90IGNsZWFyX3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KQotewotCXBtZF92YWwocG1kKSAmYW1wOz0gfnBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQotc3RhdGljIGlubGluZSBwbWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpCi17Ci0JcG1kX3ZhbChwbWQpIHw9IHBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZV9ub3ZtYShwdGVfdCBwdGUpCiB7CiAJcHRlID0gc2V0X3B0ZV9iaXQocHRlLCBfX3BncHJvdChQVEVfV1JJVEUpKTsKQEAgLTYxOSwxMSAmIzQzOzYwNywxMyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta2h1Z2UocG1kX3QgcG1kKQogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUAotI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpCSghISgocG1kX3ZhbChwdGUpICZhbXA7IFBURV9TUEVDSUFMKSkpCi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQotewotCXJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7Ci19CiYjNDM7I2RlZmluZSBwbWRfc3BlY2lhbChwbWQpCXB0ZV9zcGVjaWFsKHBtZF9wdGUocG1kKSkKJiM0MzsjZGVmaW5lIHBtZF9ta3NwZWNpYWwocG1kKQlwdGVfcG1kKHB0ZV9ta3NwZWNpYWwocG1kX3B0ZShwbWQpKSkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzOyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKQlwdGVfc3BlY2lhbChwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfbWtzcGVjaWFsKHB1ZCkJcHRlX3B1ZChwdGVfbWtzcGVjaWFsKHB1ZF9wdGUocHVkKSkpCiAjZW5kaWYKIAogI2RlZmluZSBfX3BtZF90b19waHlzKHBtZCkJX19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpCkBAIC02MzQsOCAmIzQzOzYyNCwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQogI2RlZmluZSBwdWRfeW91bmcocHVkKQkJcHRlX3lvdW5nKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX21reW91bmcocHVkKQlwdGVfcHVkKHB0ZV9ta3lvdW5nKHB1ZF9wdGUocHVkKSkpCiAjZGVmaW5lIHB1ZF9ta3dyaXRlX25vdm1hKHB1ZCkJcHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rd3JpdGUocHVkKQlwdWRfbWt3cml0ZV9ub3ZtYShwdWQpCiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKQlwdGVfcHVkKHB0ZV9ta3ZhbGlkX2socHVkX3B0ZShwdWQpKSkKICNkZWZpbmUgcHVkX3dyaXRlKHB1ZCkJCXB0ZV93cml0ZShwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfZGlydHkocHVkKQkJcHRlX2RpcnR5KHB1ZF9wdGUocHVkKSkKJiM0MzsjZGVmaW5lIHB1ZF93cnByb3RlY3QocHVkKQlwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSkKJiM0MzsjZGVmaW5lIHB1ZF9ta2RpcnR5KHB1ZCkJcHRlX3B1ZChwdGVfbWtkaXJ0eShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rb2xkKHB1ZCkJCXB0ZV9wdWQocHRlX21rb2xkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZCkJcHRlX3B1ZChwdGVfbWtpbnZhbGlkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtjbGVhbihwdWQpCXB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSkKIAogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtodWdlKHB1ZF90IHB1ZCkKIHsKQEAgLTg4Niw2ICYjNDM7ODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpCiAjZGVmaW5lIHB1ZF91c2VyKHB1ZCkJCXB0ZV91c2VyKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX3VzZXJfZXhlYyhwdWQpCXB0ZV91c2VyX2V4ZWMocHVkX3B0ZShwdWQpKQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgJmFtcDsmYW1wOyAhcHVkX3RhYmxlKF9fcHVkKHB1ZF92YWwocHVkKSB8IFBURV9WQUxJRCkpOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpCkBAIC0xMjUyLDYgJiM0MzsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpCiAJcmV0dXJuIHB0ZV9wbWQocHRlX21vZGlmeShwbWRfcHRlKHBtZCksIG5ld3Byb3QpKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwomIzQzO30KJiM0MzsKIGV4dGVybiBpbnQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3ooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLAogCQkJCQkgcHRlX3QgZW50cnksIGludCBkaXJ0eSwKQEAgLTEyNzYsNiAmIzQzOzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsCiYjNDM7CQkJCQlwdWRfdCBlbnRyeSwgaW50IGRpcnR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCwKJiM0MzsJCQkJCSAgICAgcHVkX3B0ZShlbnRyeSksIGRpcnR5LCBQVURfU0laRSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLCiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKIHsKQEAgLTEzNTAsNiAmIzQzOzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyAqLwogCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHVkcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0X2FuZF9jbGVhcl9hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQkJICAgICAgIHB0ZV90ICpwdGVwLApAQCAtMTUxMiw2ICYjNDM7MTUzOSwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcGFnZV90YWJsZV9jaGVja19wdWRfc2V0KHZtYS0mZ3Q7dm1fbW0sIGFkZHJlc3MsIHB1ZHAsIHB1ZCk7CiYjNDM7CXJldHVybiBfX3B1ZCh4Y2hnX3JlbGF4ZWQoJmFtcDtwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeToKICAqCWJpdHMgMC0xOglwcmVzZW50IChtdXN0IGJlIHplcm8pCkBAIC0xNTg2LDYgJiM0MzsxNjIyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcCiAJdXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgYWRkcmVzcywgcG1kKSBkbyB7IH0gd2hpbGUgKDApCiYjNDM7I2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3B1ZCh2bWEsIGFkZHJlc3MsIHB1ZCkgZG8geyB9IHdoaWxlICgwKQogCiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTIKICNkZWZpbmUgcGh5c190b190dGJyKGFkZHIpCSgoKGFkZHIpIHwgKChhZGRyKSAmZ3Q7Jmd0OyA0NikpICZhbXA7IFRUQlJfQkFERFJfTUFTS181MikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKaW5kZXggZjRkYjdkN2ZiZDVjNi4uNTVkMzNjNTUzN2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTE0MTksNiAmIzQzOzE0MTksNyBAQCBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BNRFBfSU5WQUxJREFURQogZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgICBwbWRfdCAqcG1kcCk7CiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCSAgICAgcHVkX3QgKnB1ZHApOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDQwYjFlZDRmM2VhODkuLjMyN2ZhMzc4MDMyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMTU5LDkgJiM0MzsxMTU5LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtpbnZhbGlkKHB1ZF90IHB1ZCkKIAlyZXR1cm4gX19wdWQocHVkX3ZhbChwdWQpICZhbXA7IH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1RfTk9ORSkpOwogfQogCi1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHB1ZF90ICpwdWRwKTsKLQogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdCkKIHsKIAlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwppbmRleCA5YzQ0MjdkMGIxODc0Li4xNTZlMzg1ZTdkYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwpAQCAtMTU0LDE1ICYjNDM7MTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gcG1kOwogfQogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCi0JZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwotCXJldHVybiBvbGQ7Ci19CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM4Nyw5ICYjNDM7MTM4Nyw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApOwogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApOwotCiAvKgogICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcAogICogbGV2ZWwgaXMgdXNlZCBmb3IgdXNlcnNwYWNlIGFuZCB0aGUgdG9wIGhhbGYgZm9yIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNTE5LDE4ICYjNDM7NTE5LDYgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmYW1wOyZhbXA7IFwKLQlkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKQotcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCWZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IEhQQUdFX1BVRF9TSVpFKTsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KIC8qKgogICogcmVzZXJ2ZV90b3BfYWRkcmVzcyAtIFJlc2VydmUgYSBob2xlIGluIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggOGMwOTNjMTE5ZTVhOC4uMzIxNzMwMDViMDg3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKQEAgLTEzMTgsNiAmIzQzOzEzMTgsMTMgQEAgZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTsKICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiYjNDM7CQkJICAgICBwdWRfdCAqcHVkcCk7CiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FCiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpCiB7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0yMTcsNiAmIzQzOzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIH0KICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKJiM0MzsJCSAgICAgIHB1ZF90ICpwdWRwKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwomIzQzOwlwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTsKJiM0MzsKJiM0MzsJZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaAogcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICBwbWRfdCAqcG1kcCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDk2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBwdWRwX2ludmFsaWRhdGVgIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHRhcmdldCBpcyBBTUQ2NCwgd2hpY2ggaXMgY3J1Y2lhbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGF0IGFyY2hpdGVjdHVyZS4KCkkgc2VlIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBzZXZlcmFsIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBgcGd0YWJsZS5oYCBmaWxlcyBhbmQgcmVsYXRlZCBpbXBsZW1lbnRhdGlvbnMuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBwdWRwX2ludmFsaWRhdGVgLCB3aGljaCBzdWdnZXN0cyBhIG1vZGlmaWNhdGlvbiB0byBob3cgcGFnZSB0YWJsZSBlbnRyaWVzLCBzcGVjaWZpY2FsbHkgUFVEcyAoUGFnZSBVcHBlciBEaXJlY3RvcnkpLCBhcmUgaGFuZGxlZCBhbmQgaW52YWxpZGF0ZWQuCgpTcGVjaWZpY2FsbHksIEkgbm90ZSB0aGVzZSBrZXkgbW9kaWZpY2F0aW9uczoKCiogICBUaGUgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgY2hhbmdlOiBJdCBzZWxlY3RzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCB1bmRlciBjZXJ0YWluIGBQQUdFX1NJWkVfNEtCYCBjb25kaXRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGZvciB0aGUgbmV3LCBnZW5lcmFsaXplZCBgcHVkcF9pbnZhbGlkYXRlYCBhbmQgaW1wbGllcyBzb21lIEFSTTY0IHN5c3RlbXMgd2lsbCBiZW5lZml0IGZyb20gdGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uLgoqICAgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCBpcyBjaGFuZ2VkIHNpZ25pZmljYW50bHk6IEl0IHVwZGF0ZXMgc29tZSBtYWNyb3MvZnVuY3Rpb25zIHJlbGF0ZWQgdG8gUFVEcywgZGVmaW5lcyBhbmQgdXBkYXRlcyBmdW5jdGlvbnMgKGUuZy4sIGBwdWRfbWt3cml0ZWAsIGBwdWRfZGlydHlgLCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYCkuIFRoZXNlIGFkZGl0aW9ucyBhcmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBwYWdlIHRhYmxlIGludmFsaWRhdGlvbi4gVGhlIGRlZmluaXRpb24gb2YgYHB1ZF90cmFuc19odWdlYCBpcyB2ZXJ5IHJlbGV2YW50IGluIHRoZSBjb250ZXh0IG9mIGh1Z2UgcGFnZXMuCiogICBUaGUgcmVtb3ZhbCBvZiBgcHVkcF9pbnZhbGlkYXRlYCBmcm9tIFJJU0MtViBhbmQgeDg2IGZpbGVzLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2U6IHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGFyZSBiZWluZyByZW1vdmVkLgoqICAgVGhlIGFkZGl0aW9uIG9mIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGd1YXJkZWQgYnkgYm90aCBgIV9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAuIFRoaXMgbWVhbnMgdGhlIG5ldyBnZW5lcmljIGltcGxlbWVudGF0aW9uIGlzIG5vdyBiZWluZyB1c2VkIGlmIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2ZXJzaW9uIGlzIGF2YWlsYWJsZSAqYW5kKiBpZiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgaGlnaGx5IHJlbGV2YW50IGZvciBBTUQ2NCwgYXMgVEhQIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgZmVhdHVyZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIHg4NiBjaGFuZ2VzLiBUaGUgcGF0Y2ggZXhwbGljaXRseSBtb3ZlcyBgcHVkcF9pbnZhbGlkYXRlYCBmcm9tIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgIHRvIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AuIFRoZSBjb2RlIGl0c2VsZiBsb29rcyBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLgoKVGhpcyBtZWFucyB4ODYgKEFNRDY0KSBpcyBub3cgdXNpbmcgdGhlIGdlbmVyaWMgdmVyc2lvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB4ODYgaGFzIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgZW5hYmxlZCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyB4ODZcXzY0LiBUaGlzIGdlbmVyaWMgaW1wbGVtZW50YXRpb24mIzM5O3MgaW5jbHVzaW9uIG1lYW5zIGl0JiMzOTtzIG5vdyBiZWluZyB1dGlsaXplZC4KCk5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiBgcHVkcF9pbnZhbGlkYXRlYCBpcyB1c2VkIGluIHRoZSBrZXJuZWwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYW5kIHN5bWJvbHMgYXJlIHJlbGV2YW50IHRvIGl0LiBUaGF0JiMzOTtzIHRoZSBuZXh0IHN0ZXA7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29tcGxldGUgaW1wYWN0IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgYGdyZXBgIHRocm91Z2ggdGhlIGNvZGUgYmFzZSBmb3IgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvbmZpZ3VyYXRpb25zIGFyb3VuZCBpdC4gVGhpcyBpcyBhIHBvdGVudGlhbGx5IHNpZ25pZmljYW50IGNoYW5nZSB0byBwYWdlIHRhYmxlIG1hbmFnZW1lbnQsIGFuZCBJIG5lZWQgdG8gYXNzZXNzIGl0IHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTE0MjA9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTE0MjItI2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjE0MjM6ZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTQyNC1cdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jPTE1NT1wbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2Ny1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM6MTY4OnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjktXHRcdCAgICAgIHB1ZF90ICpwdWRwKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEzMTc9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzIyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzI0LVx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjg0Mz1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg3MS1cdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoyODcyOlx0b2xkcHVkID0gcHVkcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcHVkcCk7XG5tbS9odWdlX21lbW9yeS5jLTI4NzMtXHRlbnRyeSA9IHB1ZF9tb2RpZnkob2xkcHVkLCBuZXdwcm90KTtcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMTI9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIyOnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIzLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTg4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgQXVkaXQgQ2hlY2tsaXN0KioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQmIzM5O3MgdmVyaWZ5IHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBrZXJuZWwgY29kZSwgc28gdGhlIHVzdWFsIHN1c3BlY3RzIGFwcGx5LiBJIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byBhbnl0aGluZyB0aGF0IHRvdWNoZXMgY29yZSBzdWJzeXN0ZW1zOiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLCBCUEYsIHRoZSBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBhbmQgc3lzdGVtIGNhbGwgaGFuZGxpbmcuIFRob3NlIGFyZSB0aGUgaGlnaC1yaXNrIGFyZWFzLgoKTmV4dCB1cCwgcmVmYWN0b3JpbmdzIGFuZCBjb2RlIGNsZWFudXBzLiBUaGUgcnVsZSBpcyBjbGVhcjogKm5ldmVyKiBibGluZGx5IHRydXN0IGNsYWltcyBvZiAmIzM0O25vIGZ1bmN0aW9uYWwgY2hhbmdlJiMzNDsgb3IgJiMzNDtyZWZhY3RvcmluZy4mIzM0OyBJZiB0aGVyZSYjMzk7cyBhbnkgbW9kaWZpY2F0aW9uIHRvIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIEkgbmVlZCB0byB0cmVhdCBpdCBhcyBhIHBvdGVudGlhbCBidWcgc291cmNlLiBSZWZhY3RvcmluZ3MgY2FuIGludHJvZHVjZSBzdWJ0bGUsIGVhc2lseSBtaXNzZWQgcmVncmVzc2lvbnMuIFRoaXMgaXMgZXNwZWNpYWxseSB0cnVlIHdoZW4gbW9kaWZ5aW5nIHN0cnVjdHVyZXMsIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLiBJZiB0aGUgY29kZSAqY2FuKiBiZSByZWFjaGVkIGFuZCBleGVjdXRlZCwgaXQmIzM5O3MgZ2V0dGluZyBmdXp6ZWQuCgpOb3csIHRoZSBjcnVjaWFsIHBvaW50OiAqcmVhY2hhYmlsaXR5IGlzIGtpbmcqLiBGdXp6aW5nIGlzIG9ubHkgZWZmZWN0aXZlIGlmIHRoZSBjb2RlICpjYW4qIGFjdHVhbGx5IHJ1biBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgZWZmb3J0cy4KClNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGF0IGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2Agd2hpY2gsIGl0IHNlZW1zLCBoYXMgYSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZWAgdGhhdCByZXBsYWNlcyB0aGUgb25lIGluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLiBUaGVyZSBhcmUgYWxzbyBhcm02NCBjaGFuZ2VzLCBidXQgSSYjMzk7bSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggdGhlIGdlbmVyaWMgY2hhbmdlIHRoYXQmIzM5O3MgaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhbmQgYGluY2x1ZGUvbGludXgvcGd0YWJsZS5oYC4gU2luY2UgYW1kNjQgKmRvZXNuJiMzOTt0KiBkZWZpbmUgYF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAsIHRoaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyB3aGF0IHdlJiMzOTtsbCBiZSB1c2luZy4KClRvIGNvbmZpcm0gdGhpcywgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBvbiBhbWQ2NC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIHRoYXQgc3ltYm9sLCBhbmQgc2VlIHdoZXJlIHdlIGdvIGZyb20gdGhlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBuZXcgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgYW1kNjQgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL0tjb25maWc9MTEwMz1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4tLVxuYXJjaC9LY29uZmlnLTExMDUtXG5hcmNoL0tjb25maWc6MTEwNjpjb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC9LY29uZmlnLTExMDctXHRib29sXG4tLVxuYXJjaC9hcm02NC9LY29uZmlnPTI9Y29uZmlnIEFSTTY0XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTE3NS1cdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gvYXJtNjQvS2NvbmZpZzoxNzY6XHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXG5hcmNoL2FybTY0L0tjb25maWctMTc3LVx0c2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9ODc1PXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtODg1LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6ODg2OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtODg3LXN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc19odWdlKHB1ZF90IHB1ZClcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaD0xNTM0PXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0MS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjE1NDI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xNTQzLXN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU9MTEwPWNvbmZpZyBQUENfVEhQXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE0LSAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZToxMTU6ICAgICAgIHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZS0xMTYtICAgICAgIHNlbGVjdCBBUkNIX0hBU19QTURfU09GVExFQVZFUyBpZiBUUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZz0xMz1jb25maWcgUklTQ1Zcbi0tXG5hcmNoL3Jpc2N2L0tjb25maWctMTUyLVx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRSBpZiA2NEJJVCBcdTAwMjZcdTAwMjYgTU1VXG5hcmNoL3Jpc2N2L0tjb25maWc6MTUzOlx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgNjRCSVQgXHUwMDI2XHUwMDI2IE1NVVxuYXJjaC9yaXNjdi9LY29uZmlnLTE1NC1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgaWYgNjRCSVQgXHUwMDI2XHUwMDI2IFVTRVJGQVVMVEZEXG4tLVxuYXJjaC94ODYvS2NvbmZpZz01OD1jb25maWcgWDg2XG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMTItXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG5hcmNoL3g4Ni9LY29uZmlnOjIxMzpcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxuYXJjaC94ODYvS2NvbmZpZy0yMTQtXHRzZWxlY3QgSEFWRV9BUkNIX1VTRVJGQVVMVEZEX1dQICAgICAgICAgaWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBVU0VSRkFVTFRGRFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0yOTc9c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMDEtXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzAyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMy1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzNTc9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTM3MC1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMzcxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTEzNzItc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oPTEyMD1zdGF0aWMgaW5saW5lIGJvb2wgZGF4X2FsaWduX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWxpZ24pXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMS17XG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oOjEyMjpcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcdTAwMjZcdTAwMjYgSVNfRU5BQkxFRChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCkpXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMy1cdFx0cmV0dXJuIHRydWU7XG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MTIwPXN0YXRpYyB2bV9mYXVsdF90IF9fZGV2X2RheF9wbWRfZmF1bHQoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMTYzLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM6MTY0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMTY1LXN0YXRpYyB2bV9mYXVsdF90IF9fZGV2X2RheF9wdWRfZmF1bHQoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmM9MjEwPXN0YXRpYyB2bV9mYXVsdF90IF9fZGV2X2RheF9wdWRfZmF1bHQoc3RydWN0IGRldl9kYXggKmRldl9kYXgsXG4tLVxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMjE0LX1cbmRyaXZlcnMvZGF4L2RldmljZS5jOjIxNTojZW5kaWYgLyogIUNPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yMTYtXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTU9aW50IGNvcHlfaHVnZV9wdWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTgtXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxOTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTIwLXZvaWQgaHVnZV9wdWRfc2V0X2FjY2Vzc2VkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NDgzPXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfaXNfaHVnZShwdWRfdCBwdWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkyLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDkzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDk0LWludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTI3MTA9c3RhdGljIGlubGluZSBwbWRfdCBmb2xpb19ta19wbWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgcGdwcm90X3QgcGdwcm90KVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yNzE0LVxuaW5jbHVkZS9saW51eC9tbS5oOjI3MTU6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5pbmNsdWRlL2xpbnV4L21tLmgtMjcxNi0vKipcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MjcyNj1zdGF0aWMgaW5saW5lIHB1ZF90IGZvbGlvX21rX3B1ZChjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwZ3Byb3RfdCBwZ3Byb3QpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTI3MjktfVxuaW5jbHVkZS9saW51eC9tbS5oOjI3MzA6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5pbmNsdWRlL2xpbnV4L21tLmgtMjczMS0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTIyNT1zdGF0aWMgaW5saW5lIHZvaWQgcG1kcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEyMzItI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX1NFVF9XUlBST1RFQ1RcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEyMzM6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjM0LSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0Vcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBwdWRwX3NldF93cnByb3RlY3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTI0OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjQ5OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTI1MC0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMzE3PWV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyMS0jaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEzMjMtZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIwODk9c3RhdGljIGlubGluZSBpbnQgcHVkX3dyaXRlKHB1ZF90IHB1ZClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDk2LSNpZiAhZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IFxcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMDk3Olx0IWRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDk4LXN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc19odWdlKHB1ZF90IHB1ZClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMTA0PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF90cmFuc191bnN0YWJsZShwdWRfdCAqcHVkKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxMDYtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIxMDc6XHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjEwOC1cdHB1ZF90IHB1ZHZhbCA9IHB1ZHBfZ2V0KHB1ZCk7XG4tLVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjMwNT1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBndGFibGVfbGV2ZWxfdG9fc3RyKGVudW0gcGd0YWJsZV9sZXZlbCBsZXZlbClcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzQyLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjM0MzojZGVmaW5lIGhhc190cmFuc3BhcmVudF9wdWRfaHVnZXBhZ2UoKSBJU19CVUlMVElOKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMjM0NC0jZW5kaWZcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaD0zND1lbnVtIHZtX2V2ZW50X2l0ZW0geyBQR1BHSU4sIFBHUEdPVVQsIFBTV1BJTiwgUFNXUE9VVCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC0xMDMtXHRcdFRIUF9TQ0FOX0VYQ0VFRF9TSEFSRURfUFRFLFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg6MTA0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmgtMTA1LVx0XHRUSFBfU1BMSVRfUFVELFxuLS1cbm1tL0tjb25maWc9MTAwOT1jb25maWcgSEFWRV9HSUdBTlRJQ19GT0xJT1Ncbm1tL0tjb25maWctMTAxMC1cdGRlZl9ib29sIChIVUdFVExCX1BBR0UgXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXG5tbS9LY29uZmlnOjEwMTE6XHRcdCAoWk9ORV9ERVZJQ0UgXHUwMDI2XHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9LY29uZmlnLTEwMTItXG4tLVxubW0vS2NvbmZpZz0xMDI1PWNvbmZpZyBBUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbm1tL0tjb25maWctMTAyNi1cdGRlZl9ib29sIHlcbm1tL0tjb25maWc6MTAyNzpcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFX1BGTk1BUCBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vS2NvbmZpZy0xMDI4LVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz0yODI9c3RhdGljIHZvaWQgX19pbml0IHBtZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpXG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTI5OC1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzoyOTk6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtMzAwLXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeClcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9NDA1PXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYy00MTktfVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjQyMDojZWxzZSAgLyogIUNPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtNDIxLXN0YXRpYyB2b2lkIF9faW5pdCBwdWRfYmFzaWNfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncywgaW50IGlkeCkgeyB9XG4tLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQyMz1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6NDI0OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNS0jZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuLS1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYz05MDU9c3RhdGljIHZvaWQgX19pbml0IHBtZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTMzLVxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjkzNDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MzUtc3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcbi0tXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTUzLX1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTQ6I2Vsc2UgIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vZGVidWdfdm1fcGd0YWJsZS5jLTk1NS1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKSB7IH1cbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTY6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTU3LSNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXG4tLVxubW0vaG1tLmM9NDAzPXN0YXRpYyBpbnQgaG1tX3ZtYV93YWxrX3BtZChwbWRfdCAqcG1kcCxcbi0tXG5tbS9obW0uYy00NzktXG5tbS9obW0uYzo0ODA6I2lmIGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9obW0uYy00ODEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF90b19obW1fcGZuX2ZsYWdzKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTc0OT1FWFBPUlRfU1lNQk9MX0dQTCh2bWZfaW5zZXJ0X2ZvbGlvX3BtZCk7XG5tbS9odWdlX21lbW9yeS5jLTE3NTAtXG5tbS9odWdlX21lbW9yeS5jOjE3NTE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9odWdlX21lbW9yeS5jLTE3NTItc3RhdGljIHB1ZF90IG1heWJlX3B1ZF9ta3dyaXRlKHB1ZF90IHB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xODY1PUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcHVkKTtcbm1tL2h1Z2VfbWVtb3J5LmM6MTg2NjojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbm1tL2h1Z2VfbWVtb3J5LmMtMTg2Ny1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTE5NTA9aW50IGNvcHlfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqZHN0X21tLCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmNfbW0sXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yMDYxLVxubW0vaHVnZV9tZW1vcnkuYzoyMDYyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYy0yMDYzLXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMTExPXZvaWQgaHVnZV9wdWRfc2V0X2FjY2Vzc2VkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZClcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIxMjItfVxubW0vaHVnZV9tZW1vcnkuYzoyMTIzOiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vaHVnZV9tZW1vcnkuYy0yMTI0LVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MjczND1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg0MS0gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6Mjg0MjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0My1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MzAzMz1zcGlubG9ja190ICpfX3B1ZF90cmFuc19odWdlX2xvY2socHVkX3QgKnB1ZCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMDQzLVxubW0vaHVnZV9tZW1vcnkuYzozMDQ0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYy0zMDQ1LWludCB6YXBfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMTMyPXZvaWQgX19zcGxpdF9odWdlX3B1ZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTMxMzUtfVxubW0vaHVnZV9tZW1vcnkuYzozMTM2OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vaHVnZV9tZW1vcnkuYy0zMTM3LVxuLS1cbm1tL21hcHBpbmdfZGlydHlfaGVscGVycy5jPTE0OD1zdGF0aWMgaW50IHdwX2NsZWFuX3B1ZF9lbnRyeShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hcHBpbmdfZGlydHlfaGVscGVycy5jLTE1MC17XG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYzoxNTE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYy0xNTItXHRwdWRfdCBwdWR2YWwgPSBwdWRwX2dldChwdWQpO1xuLS1cbm1tL21lbW9yeS5jPTY0MjE9c3RhdGljIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL21lbW9yeS5jLTY0MjMtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmM6NjQyNDpcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9tZW1vcnkuYy02NDI1LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuLS1cbm1tL21lbW9yeS5jPTY0MzU9c3RhdGljIHZtX2ZhdWx0X3Qgd3BfaHVnZV9wdWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKVxuLS1cbm1tL21lbW9yeS5jLTY0MzctI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjZcdFx0XHRcXFxubW0vbWVtb3J5LmM6NjQzODpcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9tZW1vcnkuYy02NDM5LVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWYtXHUwMDNldm1hO1xuLS1cbm1tL21lbW9yeS5jLTY0NTQtXHRfX3NwbGl0X2h1Z2VfcHVkKHZtYSwgdm1mLVx1MDAzZXB1ZCwgdm1mLVx1MDAzZWFkZHJlc3MpO1xubW0vbWVtb3J5LmM6NjQ1NTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFx1MDAyNlx1MDAyNiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xubW0vbWVtb3J5LmMtNjQ1Ni1cdHJldHVybiBWTV9GQVVMVF9GQUxMQkFDSztcbi0tXG5tbS9tcmVtYXAuYz00Nzk9c3RhdGljIGlubGluZSBib29sIG1vdmVfbm9ybWFsX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxuLS1cbm1tL21yZW1hcC5jLTQ4NS1cbm1tL21yZW1hcC5jOjQ4NjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxubW0vbXJlbWFwLmMtNDg3LXN0YXRpYyBib29sIG1vdmVfaHVnZV9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0xNDE9cG1kX3QgcG1kcF9odWdlX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTUxLVxubW0vcGd0YWJsZS1nZW5lcmljLmM6MTUyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTUzLXB1ZF90IHB1ZHBfaHVnZV9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbm1tL3BndGFibGUtZ2VuZXJpYy5jPTIxMj1wbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMjAtI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjIyMTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIyMi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9ybWFwLmM9MTc3MT12b2lkIGZvbGlvX2FkZF9maWxlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbm1tL3JtYXAuYy0xNzc0LSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG5tbS9ybWFwLmM6MTc3NTpcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG5tbS9ybWFwLmMtMTc3Ni1cdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUFVEX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUFVEKTtcbi0tXG5tbS9ybWFwLmM9MTkzOT12b2lkIGZvbGlvX3JlbW92ZV9ybWFwX3B1ZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9ybWFwLmMtMTk0Mi0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBcXFxubW0vcm1hcC5jOjE5NDM6XHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxubW0vcm1hcC5jLTE5NDQtXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QVURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xuLS1cbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTQzMC1cdFtJKFRIUF9TQ0FOX0VYQ0VFRF9TSEFSRURfUFRFKV1cdFx0PSBcJiMzNDt0aHBfc2Nhbl9leGNlZWRfc2hhcmVfcHRlXCYjMzQ7LFxubW0vdm1zdGF0LmM6MTQzMTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbm1tL3Ztc3RhdC5jLTE0MzItXHRbSShUSFBfU1BMSVRfUFVEKV1cdFx0XHQ9IFwmIzM0O3RocF9zcGxpdF9wdWRcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY0NjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRoaXMgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBhZmZlY3RzIGEgcHJldHR5IGJyb2FkIHN3YXRoZSBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHk6IEFSTTY0LCBQb3dlclBDLCBSSVNDLVYsIGFuZCB4ODYsIGFsb25nIHdpdGggc29tZSBjb3JlIGBwZ3RhYmxlYCBoZWFkZXJzIGFuZCBnZW5lcmljIGNvZGUuIEl0IGludHJvZHVjZXMgYSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGVgIGZ1bmN0aW9uIGludG8gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIFRoaXMgbWVhbnMgbG9naWMgdGhhdCB1c2VkIHRvIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpcyBub3cgY2VudHJhbGl6ZWQuIEl0IGFsc28gaW1wbGllcyBhIGZhaXIgYW1vdW50IG9mIHBvdGVudGlhbCBjcm9zcy1hcmNoaXRlY3R1cmUgYmVoYXZpb3IgdGhhdCBuZWVkcyBzY3J1dGlueS4KClRoZSBpbnRyb2R1Y3Rpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZWAsIGNvdXBsZWQgd2l0aCB0aGUgcmVtb3ZhbCBvZiBhcmNoLXNwZWNpZmljIHZlcnNpb25zLCBqdW1wcyBvdXQuIFRoaXMgZ2VuZXJpYyBmdW5jdGlvbiAqaXRzZWxmKiBjb250YWlucyBgVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO2AsIGEgY3JpdGljYWwgcnVudGltZSBhc3NlcnRpb24uIFRoaXMgaXMgYSB2ZXJ5IHN0cm9uZyBpbmRpY2F0b3IsIGdpdmVuIHRoZSBmdXp6aW5nIHJ1bGVzOiAmIzM0O1J1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLiYjMzQ7IFRoZSBjaGVjayBzcGVjaWZpY2FsbHkgdGFyZ2V0cyBwYWdlIHRhYmxlIGVudHJpZXMsIHdoaWNoIGNvdWxkIGJlIHZlcnkgaW50ZXJlc3RpbmcgZm9yIGZ1enppbmcuCgpUaGUgcnVsZSBzZXQgc3BlY2lmaWNhbGx5IGNhbGxzIG91dCBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIGBtbS9gIGFzIHdvcnRoIGZ1enppbmcsIGFuZCB0aGUgcGF0Y2ggdG91Y2hlcyB0aGF0IGRpcmVjdG9yeSBkaXJlY3RseS4gVGhlIGZhY3QgdGhhdCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiBpcyB1c2VkIGluIGBtbS9odWdlX21lbW9yeS5jYCB3aXRoaW4gYGNoYW5nZV9odWdlX3B1ZGAgZnVydGhlciByZWluZm9yY2VzIHRoZSBuZWVkIHRvIHBheSBhdHRlbnRpb24gdG8gdGhhdCBhcmVhLiBUaGUgdXNlIGNhc2UgaXMgYGNoYW5nZV9odWdlX3B1ZGAsIHdoaWNoIGlzIGEga2V5IG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uIGZvciBoYW5kbGluZyBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLgoKR2l2ZW4gYWxsIG9mIHRoaXMsIEkmIzM5O20gY29uZmlkZW50IHdlIG5lZWQgdG8gZnV6ei4gVGhlIGBXb3J0aEZ1enppbmdgIGZsYWcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgZGV0YWlscyB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYHB1ZHBfaW52YWxpZGF0ZWAgYW5kIHNlZSBleGFjdGx5IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBmdW5jdGlvbnMsIHBhcnRpY3VsYXJseSB3aXRoaW4gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjaGFuZ2VfaHVnZV9wdWRgLiBVbmRlcnN0YW5kaW5nIHdoYXQgY2FsbHMgdGhhdCBmdW5jdGlvbiwgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgaXMgY3JpdGljYWwgZm9yIGVmZmVjdGl2ZSBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NoYW5nZV9odWdlX3B1ZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTI3MzQ9aW50IGNoYW5nZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTI4NDItI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG5tbS9odWdlX21lbW9yeS5jOjI4NDM6aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0NC1cdFx0ICAgIHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IG5ld3Byb3QsXG4tLVxubW0vbXByb3RlY3QuYz01NzQ9c3RhdGljIGlubGluZSBsb25nIGNoYW5nZV9wdWRfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tcHJvdGVjdC5jLTYxMS1cdFx0XHR9IGVsc2Uge1xubW0vbXByb3RlY3QuYzo2MTI6XHRcdFx0XHRyZXQgPSBjaGFuZ2VfaHVnZV9wdWQodGxiLCB2bWEsIHB1ZHAsXG5tbS9tcHJvdGVjdC5jLTYxMy1cdFx0XHRcdFx0XHQgICAgICBhZGRyLCBuZXdwcm90LCBjcF9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc3ODkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgYHB1ZHBfaW52YWxpZGF0ZWAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYHB1ZHBfaW52YWxpZGF0ZWAsIHNvIEkmIzM5O2xsIGNoZWNrIGl0cyBkZWZpbml0aW9uIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AuIEFscmlnaHQsIGxvb2tzIGxpa2UgaXQgKmlzKiBhIG5vbi1zdGF0aWMgc3ltYm9sLCB3aGljaCBtZWFucyBpdCYjMzk7cyBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBHb29kLiBOb3csIGV4YW1pbmluZyB0aGUgY29kZSBibG9jaywgaXQmIzM5O3MgZGVmaW5lZCBjb25kaXRpb25hbGx5OiBpdCB1c2VzIGFuIGAjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgZ3VhcmQgYW5kIGFuIGAjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURgLiBJIHNlZSBhIGNhbGwgdG8gYGZsdXNoX3B1ZF90bGJfcmFuZ2VgLCB0aGF0JiMzOTtzIGFuIGltcG9ydGFudCBzaWduYWwuIEFuZCBJIHNlZSB0aGF0IGBwdWRwX2ludmFsaWRhdGVgIGlzIGNhbGxlZCB3aXRoaW4gdGhlIGBjaGFuZ2VfaHVnZV9wdWRgIGZ1bmN0aW9uLCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHNvIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuCgpOZXh0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIHg4Nl82NC9hbWQ2NCBhcmNoaXRlY3R1cmVzLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCwgdGhhdCYjMzk7cyBjbGVhci4gQnV0IHRoZSBtb3JlIGNydWNpYWwgZGV0YWlsIGlzIHRoYXQgYENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBpcyBzZWxlY3RlZCBieSBgWDg2XzY0YCAob3IgcmF0aGVyIHdoZW4gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2VsZWN0ZWQpLiBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgaXMga2V5IGhlcmUuIFRvIGJlIHN1cmUgbGV0JiMzOTtzIGFsc28gZXhhbWluZSBgbW0vS2NvbmZpZ2AgYXJvdW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQgc2hvdWxkIGNsZWFyIHRoaW5ncyB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9ODMyPWNvbmZpZyBNTV9JRFxuLS1cbm1tL0tjb25maWctODM0LVxubW0vS2NvbmZpZzo4MzU6bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxubW0vS2NvbmZpZy04MzYtXHRib29sIFwmIzM0O1RyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnRcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg1Mz1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg1OC1cbm1tL0tjb25maWc6ODU5Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xubW0vS2NvbmZpZy04NjAtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NjUtXG5tbS9LY29uZmlnOjg2NjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXG5tbS9LY29uZmlnLTg2Ny1cdFx0Ym9vbCBcJiMzNDttYWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy04NzQtXG5tbS9LY29uZmlnOjg3NTpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxubW0vS2NvbmZpZy04NzYtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTg4Mj1jaG9pY2Vcbi0tXG5tbS9LY29uZmlnLTg5MS1cbm1tL0tjb25maWc6ODkyOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfTkVWRVJcbm1tL0tjb25maWctODkzLVx0XHRib29sIFwmIzM0O25ldmVyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDEtXG5tbS9LY29uZmlnOjkwMjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FMV0FZU1xubW0vS2NvbmZpZy05MDMtXHRcdGJvb2wgXCYjMzQ7YWx3YXlzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MDktXG5tbS9LY29uZmlnOjkxMDpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX1dJVEhJTl9TSVpFXG5tbS9LY29uZmlnLTkxMS1cdFx0Ym9vbCBcJiMzNDt3aXRoaW5fc2l6ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctOTE3LVxubW0vS2NvbmZpZzo5MTg6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9BRFZJU0Vcbm1tL0tjb25maWctOTE5LVx0XHRib29sIFwmIzM0O2FkdmlzZVwmIzM0O1xuLS1cbm1tL0tjb25maWc9OTI3PWNob2ljZVxuLS1cbm1tL0tjb25maWctOTM2LVxubW0vS2NvbmZpZzo5Mzc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9ORVZFUlxubW0vS2NvbmZpZy05MzgtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk0NS1cbm1tL0tjb25maWc6OTQ2Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTk0Ny1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1My1cbm1tL0tjb25maWc6OTU0Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTU1LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NjEtXG5tbS9LY29uZmlnOjk2MjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05NjMtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5Mjc4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IE1ha2VmaWxlKioKCk9rYXksIHRpbWUgdG8gZGlnIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBpcyBiZWluZyBjb21waWxlZC4gRmlyc3Qgc3RlcD8gTmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aDogdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVzaWRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoaWNoIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGBwZ3RhYmxlLWdlbmVyaWMuY2AuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBidWlsZCBwcm9jZXNzIG9yIGlkZW50aWZ5aW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBiYXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIE1ha2VmaWxlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BndGFibGUtZ2VuZXJpYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0zNz1tbXUtJChDT05GSUdfTU1VKVx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxuLS1cbm1tL01ha2VmaWxlLTM5LVx0XHRcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxubW0vTWFrZWZpbGU6NDA6XHRcdFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXG5tbS9NYWtlZmlsZS00MS1cbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yLS8qXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzozOiAqICBtbS9wZ3RhYmxlLWdlbmVyaWMuY1xubW0vcGd0YWJsZS1nZW5lcmljLmMtNC0gKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYzNwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgQ29uZmlndXJhdGlvbiBhbmQgQ2FsbGVycyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYG1tL0tjb25maWdgIGZpbGUgYW5kIHRoZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIG9wdGlvbi4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBkZXBlbmRzIG9uIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgTU1VYC4gT24gYW4geDg2XzY0IHN5c3RlbSwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNpbmNlIGl0JiMzOTtzIGFuIGFtZDY0IHNldHVwLCBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgZ2V0cyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGlmIGBYODZfNjRgIGlzIGRlZmluZWQuIFRoZXJlZm9yZSwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoaXMgd2hvbGUgY29kZSBwYXRoIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCk5vdywgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQsIHdobyBjYWxscyBpdCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjYWxsZXJzLiBJJiMzOTtsbCBtb3ZlIG9uIHRvIGBtbS9odWdlX21lbW9yeS5jYCBhbmQgc3BlY2lmaWNhbGx5IGxvb2sgZm9yIHdoZXJlIGBwdWRwX2ludmFsaWRhdGVgIGlzIGNhbGxlZC4gQWgsIHRoZXJlIGl0IGlzISBgY2hhbmdlX2h1Z2VfcHVkYCBjYWxscyBgcHVkcF9pbnZhbGlkYXRlYC4gSSBzZWUgdGhhdCBgY2hhbmdlX2h1Z2VfcHVkYCBpcyBpbiB0dXJuIGNhbGxlZCB3aXRoaW4gYG1tL21wcm90ZWN0LmNgIGZyb20gYGNoYW5nZV9wdWRfcmFuZ2VgLiBBbmQgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIGBjaGFuZ2VfcHVkX3JhbmdlYCBpcyBwYXJ0IG9mIGBjaGFuZ2VfcHJvdGVjdGlvbl9yYW5nZWAsIHdoaWNoIGlzIHVzZWQgYnkgYG1wcm90ZWN0X2ZpeHVwYCwgYGRvX21wcm90ZWN0X3BrZXlgIGFuZCB1bHRpbWF0ZWx5LCBgc3lzX21wcm90ZWN0YC4gVGhpcyBpbXBsaWVzIHRoYXQgcHJvdGVjdGlvbiBtb2RpZmljYXRpb25zIG9uIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMsIHNwZWNpZmljYWxseSBhdCB0aGUgUFVEIGxldmVsLCB0cmlnZ2VyIGBjaGFuZ2VfaHVnZV9wdWRgLgoKTmV4dCwgSSYjMzk7bGwgYnJvYWRlbiBteSBzZWFyY2guIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGNoZWNrIHRvIHNlZSBpZiBgcHVkcF9pbnZhbGlkYXRlYCBvciBgY2hhbmdlX2h1Z2VfcHVkYCBhcmUgY2FsbGVkIGZyb20gYW55d2hlcmUgZWxzZSBpbiB0aGUgY29kZSBiYXNlLiBHb3R0YSBiZSB0aG9yb3VnaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHVkcF9pbnZhbGlkYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oPTE0MjA9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTE0MjItI2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oOjE0MjM6ZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTQyNC1cdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jPTE1NT1wbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2Ny1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM6MTY4OnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjktXHRcdCAgICAgIHB1ZF90ICpwdWRwKVxuLS1cbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEzMTc9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzIyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzI0LVx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjg0Mz1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjg3MS1cdCAqL1xubW0vaHVnZV9tZW1vcnkuYzoyODcyOlx0b2xkcHVkID0gcHVkcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcHVkcCk7XG5tbS9odWdlX21lbW9yeS5jLTI4NzMtXHRlbnRyeSA9IHB1ZF9tb2RpZnkob2xkcHVkLCBuZXdwcm90KTtcbi0tXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMTI9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tLVxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIyOnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIzLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMTMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYGNoYW5nZV9odWdlX3B1ZGAgQ2FsbGVycyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgZmlyc3Qgb3JkZXIgb2YgYnVzaW5lc3MgaXMgZGVmaW5pdGVseSB0byBhdWRpdCB0aGUgY2FsbHMgdG8gdGhhdCBgY2hhbmdlX2h1Z2VfcHVkYCBmdW5jdGlvbi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiAqd2hvKiBpcyB1c2luZyBpdCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICpob3cqIHRoZXkmIzM5O3JlIHVzaW5nIGl0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGZpbmRpbmcgZXZlcnkgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBmdW5jdGlvbiBjYWxsOyBpdCYjMzk7cyBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0cy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgbW9kaWZpY2F0aW9uIHdpdGhpbiBhIGNvbnRyb2xsZWQgZW52aXJvbm1lbnQsIG9yIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tIHNvbWUgZGVlcGx5IG5lc3RlZCwgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aD8gVGhhdCYjMzk7cyB3aGF0IEkgcmVhbGx5IG5lZWQgdG8ga25vdy4gVGhlIGdvYWwgaGVyZSBpcyB0byBnZXQgYSBiYXNlbGluZSB1bmRlcnN0YW5kaW5nLiBUaGlzIGhlbHBzIG1lIHVuZGVyc3RhbmQgdGhlIGltcGFjdCB0aGlzIGZ1bmN0aW9uIGNhbiBtYWtlIGFuZCBob3cgaXRzIGltcGxlbWVudGF0aW9uIG1heSBhZmZlY3QgdGhlIGxhcmdlciBzeXN0ZW0sIGFuZCBhbGxvd3MgbWUgdG8gYmVnaW4gdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGFueSBjaGFuZ2VzIHdpbGwgcmlwcGxlIG91dHdhcmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjaGFuZ2VfaHVnZV9wdWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9NDgzPXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfaXNfaHVnZShwdWRfdCBwdWQpXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkzLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk0OmludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTUtXHRcdCAgICBwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ3Byb3RfdCBuZXdwcm90LFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ5OD1zdGF0aWMgaW5saW5lIGludFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NDk5OmNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTUwMC1cdFx0cHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgbmV3cHJvdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03OTI9c3RhdGljIGlubGluZSB2b2lkIF9fc3BsaXRfaHVnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzk2LVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Nzk3OnN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNzk4LVx0XHRcdFx0ICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHVkX3QgKnB1ZHAsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yNzM0PWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yODQyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxubW0vaHVnZV9tZW1vcnkuYzoyODQzOmludCBjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTI4NDQtXHRcdCAgICBwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ3Byb3RfdCBuZXdwcm90LFxuLS1cbm1tL21wcm90ZWN0LmM9NTc0PXN0YXRpYyBpbmxpbmUgbG9uZyBjaGFuZ2VfcHVkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXG4tLVxubW0vbXByb3RlY3QuYy02MTEtXHRcdFx0fSBlbHNlIHtcbm1tL21wcm90ZWN0LmM6NjEyOlx0XHRcdFx0cmV0ID0gY2hhbmdlX2h1Z2VfcHVkKHRsYiwgdm1hLCBwdWRwLFxubW0vbXByb3RlY3QuYy02MTMtXHRcdFx0XHRcdFx0ICAgICAgYWRkciwgbmV3cHJvdCwgY3BfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTk4MgoJCQkJCQkJb3V0cHV0OiAxNDIKCQkJCQkJCXRob3VnaHRzOiAzODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBmdW5jdGlvbnMgYHB1ZHBfaW52YWxpZGF0ZWAgYW5kIGBjaGFuZ2VfaHVnZV9wdWRgLiBJIHNlZSB0aGF0IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0IGFuZCB0aGF0IHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgbGllcyB3aXRoaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgYmVjYXVzZSB0aGF0IGZpbGUgY29tcGlsZXMgZm9yIGFtZDY0ICp3aGVuKiBgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURgIGlzIGVuYWJsZWQsIHdoaWNoIGluIHR1cm4gaXMgbGlua2VkIHRvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuCgpOb3csIEkmIzM5O20gbm90aW5nIHRoYXQgYHB1ZHBfaW52YWxpZGF0ZWAgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggcGFnZSB0YWJsZSBlbnRyeSBtYW5pcHVsYXRpb24gYW5kIFRMQiBpbnZhbGlkYXRpb24uIEl0IGNvbnRhaW5zIGBWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSlgLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gUnVudGltZSBhc3NlcnRpb25zIGxpa2UgdGhpcyBvZnRlbiBpbmRpY2F0ZSBhcmVhcyB0aGF0IGFyZSBwcm9uZSB0byBzdWJ0bGUgYnVncyBvciBjb3JuZXIgY2FzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBHaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYGNoYW5nZV9odWdlX3B1ZGAsIHdoaWNoIEkgdW5kZXJzdGFuZCBoYW5kbGVzIGh1Z2UgcGFnZSBvcGVyYXRpb25zLCBpdCYjMzk7cyBjbGVhciB0aGVzZSBhcmUgaW50ZXJjb25uZWN0ZWQuCgpCYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCBJJiMzOTttIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYGNoYW5nZV9odWdlX3B1ZGAgaXMgc3VmZmljaWVudGx5IGhpZ2guIFRoZSBrZXkgZWxlbWVudHMgdG8gdHJhY2sgYXJlIGRlZmluaXRlbHkgYHB1ZHBfaW52YWxpZGF0ZWAsIGBjaGFuZ2VfaHVnZV9wdWRgLCBhbmQgdGhlIHVuZGVybHlpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLgoKTm93LCBsZXQgbWUgYXNzZW1ibGUgdGhlIEpTT04gb3V0cHV0IGZvciBgc2V0LXJlc3VsdHNgLiBUaGUgc3RydWN0dXJlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6CgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUKKiAgIGBGb2N1c1N5bWJvbHNgOiBcWyYjMzQ7cHVkcFxfaW52YWxpZGF0ZSYjMzQ7LCAmIzM0O2NoYW5nZVxfaHVnZVxfcHVkJiMzNDtdCiogICBgRW5hYmxlQ29uZmlnc2A6IFxbJiMzNDtUUkFOU1BBUkVOVFxfSFVHRVBBR0UmIzM0O10KKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlKClgIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgKHVzZWQgYnkgeDg2L2FtZDY0IHdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhdCBQVUQgbGV2ZWwgYXJlIHN1cHBvcnRlZCkgcmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgbW9kaWZpZXMgcGFnZSB0YWJsZSBoYW5kbGluZyBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChgVk1fV0FSTl9PTl9PTkNFYCkgcmVhY2hhYmxlIGR1cmluZyBodWdlIFBVRCBvcGVyYXRpb25zIHN1Y2ggYXMgYGNoYW5nZV9odWdlX3B1ZCgpYCBvbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiYjMzQ7CgpBbHJpZ2h0LCB3aXRoIHRoYXQgaW5mb3JtYXRpb24gYXNzZW1ibGVkLCBJJiMzOTttIHJlYWR5IHRvIGludm9rZSBgc2V0LXJlc3VsdHNgLiBUaGlzIHNob3VsZCBwcm92aWRlIGVub3VnaCBkZXRhaWwgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhbmQgZnV6emluZyBlZmZvcnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOSAxMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwdWRwX2ludmFsaWRhdGUmIzM0OywKICAgICYjMzQ7Y2hhbmdlX2h1Z2VfcHVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIHB1ZHBfaW52YWxpZGF0ZSgpIGluIG1tL3BndGFibGUtZ2VuZXJpYy5jIChyZXBsYWNpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvbiB4ODYgYW5kIHJpc2N2KSwgd2hpY2ggaXMgdXNlZCBvbiBhbWQ2NCB3aGVuIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXQgUFVEIGxldmVsIGFyZSBlbmFibGVkLiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCBpbmNsdWRlcyBydW50aW1lIGFzc2VydGlvbnMgKFZNX1dBUk5fT05fT05DRSkgaW4gcmVhY2hhYmxlIHBhdGhzIGV4ZWN1dGVkIGJ5IGNoYW5nZV9odWdlX3B1ZCgpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3B1ZHBfaW52YWxpZGF0ZSYjMzQ7LAogICAgJiMzNDtjaGFuZ2VfaHVnZV9wdWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgcHVkcF9pbnZhbGlkYXRlKCkgaW4gbW0vcGd0YWJsZS1nZW5lcmljLmMgKHJlcGxhY2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9uIHg4NiBhbmQgcmlzY3YpLCB3aGljaCBpcyB1c2VkIG9uIGFtZDY0IHdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhdCBQVUQgbGV2ZWwgYXJlIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGluY2x1ZGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKSBpbiByZWFjaGFibGUgcGF0aHMgZXhlY3V0ZWQgYnkgY2hhbmdlX2h1Z2VfcHVkKCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDkgMTE6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzdXBwb3J0IGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgUFVEcyBhbmQgUFVEIFBGTk1BUCBvbiBhcm02NCwgd2hpbGUgY29uc29saWRhdGluZyB0aGUgZ2VuZXJpYyBgcHVkcF9pbnZhbGlkYXRlKClgIGltcGxlbWVudGF0aW9uIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgYWNyb3NzIGFyY2hpdGVjdHVyZXMgKHg4NiwgcmlzY3YsIHBvd2VycGMpLlxuXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBhcmNoaXRlY3R1cmFsIHBhZ2UgdGFibGUgZW50cmllcyAoUFVEL1BNRC9QVEUgYml0LWZsYWdzLCBwYWdlIHRhYmxlIGVzdGFibGlzaG1lbnQsIGFuZCBUTEIgaW52YWxpZGF0aW9uKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8vZnJvbSB1c2Vyc3BhY2UsIGFsdGVyIHN0cnVjdCBwYWRkaW5nL2luaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGNvdWxkIGJlIGV2YWx1YXRlZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vZGVidWcgYnVpbGRzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCA5IDExOjM2OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnCmluZGV4IGI1YTUxYjBlZjk0NDAuLjhhN2NhMTg2MzU5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWcKQEAgLTE3Myw2ICYjNDM7MTczLDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEhBVkVfQVJDSF9USFJFQURfU1RSVUNUX1dISVRFTElTVAogCXNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LCiAJc2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRQomIzQzOwlzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCCiAJc2VsZWN0IEhBVkVfQVJDSF9WTUFQX1NUQUNLCiAJc2VsZWN0IEhBVkVfQVJNX1NNQ0NDCiAJc2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDYwMDA5MDVhMmU4NjUuLmZkYzMzODk3MDkzNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNDMsMTggJiM0MzsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdCkKIAlyZXR1cm4gcHRlOwogfQogCi1zdGF0aWMgaW5saW5lIHBtZF90IGNsZWFyX3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KQotewotCXBtZF92YWwocG1kKSAmYW1wOz0gfnBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQotc3RhdGljIGlubGluZSBwbWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpCi17Ci0JcG1kX3ZhbChwbWQpIHw9IHBncHJvdF92YWwocHJvdCk7Ci0JcmV0dXJuIHBtZDsKLX0KLQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt3cml0ZV9ub3ZtYShwdGVfdCBwdGUpCiB7CiAJcHRlID0gc2V0X3B0ZV9iaXQocHRlLCBfX3BncHJvdChQVEVfV1JJVEUpKTsKQEAgLTYxOSwxMSAmIzQzOzYwNywxMyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta2h1Z2UocG1kX3QgcG1kKQogfQogCiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUAotI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpCSghISgocG1kX3ZhbChwdGUpICZhbXA7IFBURV9TUEVDSUFMKSkpCi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQotewotCXJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7Ci19CiYjNDM7I2RlZmluZSBwbWRfc3BlY2lhbChwbWQpCXB0ZV9zcGVjaWFsKHBtZF9wdGUocG1kKSkKJiM0MzsjZGVmaW5lIHBtZF9ta3NwZWNpYWwocG1kKQlwdGVfcG1kKHB0ZV9ta3NwZWNpYWwocG1kX3B0ZShwbWQpKSkKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzOyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKQlwdGVfc3BlY2lhbChwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfbWtzcGVjaWFsKHB1ZCkJcHRlX3B1ZChwdGVfbWtzcGVjaWFsKHB1ZF9wdGUocHVkKSkpCiAjZW5kaWYKIAogI2RlZmluZSBfX3BtZF90b19waHlzKHBtZCkJX19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpCkBAIC02MzQsOCAmIzQzOzYyNCwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKQogI2RlZmluZSBwdWRfeW91bmcocHVkKQkJcHRlX3lvdW5nKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX21reW91bmcocHVkKQlwdGVfcHVkKHB0ZV9ta3lvdW5nKHB1ZF9wdGUocHVkKSkpCiAjZGVmaW5lIHB1ZF9ta3dyaXRlX25vdm1hKHB1ZCkJcHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rd3JpdGUocHVkKQlwdWRfbWt3cml0ZV9ub3ZtYShwdWQpCiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKQlwdGVfcHVkKHB0ZV9ta3ZhbGlkX2socHVkX3B0ZShwdWQpKSkKICNkZWZpbmUgcHVkX3dyaXRlKHB1ZCkJCXB0ZV93cml0ZShwdWRfcHRlKHB1ZCkpCiYjNDM7I2RlZmluZSBwdWRfZGlydHkocHVkKQkJcHRlX2RpcnR5KHB1ZF9wdGUocHVkKSkKJiM0MzsjZGVmaW5lIHB1ZF93cnByb3RlY3QocHVkKQlwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSkKJiM0MzsjZGVmaW5lIHB1ZF9ta2RpcnR5KHB1ZCkJcHRlX3B1ZChwdGVfbWtkaXJ0eShwdWRfcHRlKHB1ZCkpKQomIzQzOyNkZWZpbmUgcHVkX21rb2xkKHB1ZCkJCXB0ZV9wdWQocHRlX21rb2xkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZCkJcHRlX3B1ZChwdGVfbWtpbnZhbGlkKHB1ZF9wdGUocHVkKSkpCiYjNDM7I2RlZmluZSBwdWRfbWtjbGVhbihwdWQpCXB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSkKIAogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtodWdlKHB1ZF90IHB1ZCkKIHsKQEAgLTg4Niw2ICYjNDM7ODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpCiAjZGVmaW5lIHB1ZF91c2VyKHB1ZCkJCXB0ZV91c2VyKHB1ZF9wdGUocHVkKSkKICNkZWZpbmUgcHVkX3VzZXJfZXhlYyhwdWQpCXB0ZV91c2VyX2V4ZWMocHVkX3B0ZShwdWQpKQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECiYjNDM7c3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgJmFtcDsmYW1wOyAhcHVkX3RhYmxlKF9fcHVkKHB1ZF92YWwocHVkKSB8IFBURV9WQUxJRCkpOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpCkBAIC0xMjUyLDYgJiM0MzsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpCiAJcmV0dXJuIHB0ZV9wbWQocHRlX21vZGlmeShwbWRfcHRlKHBtZCksIG5ld3Byb3QpKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpCiYjNDM7ewomIzQzOwlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwomIzQzO30KJiM0MzsKIGV4dGVybiBpbnQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3ooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLAogCQkJCQkgcHRlX3QgZW50cnksIGludCBkaXJ0eSwKQEAgLTEyNzYsNiAmIzQzOzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsCiYjNDM7CQkJCQlwdWRfdCBlbnRyeSwgaW50IGRpcnR5KQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCwKJiM0MzsJCQkJCSAgICAgcHVkX3B0ZShlbnRyeSksIGRpcnR5LCBQVURfU0laRSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogI2lmZGVmIENPTkZJR19QQUdFX1RBQkxFX0NIRUNLCiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSkKIHsKQEAgLTEzNTAsNiAmIzQzOzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiB9CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyAqLwogCiYjNDM7I2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHVkcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHApCiYjNDM7ewomIzQzOwlyZXR1cm4gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSBwdGVfdCBfX3B0ZXBfZ2V0X2FuZF9jbGVhcl9hbnlzeihzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCQkJICAgICAgIHB0ZV90ICpwdGVwLApAQCAtMTUxMiw2ICYjNDM7MTUzOSwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKQomIzQzO3sKJiM0MzsJcGFnZV90YWJsZV9jaGVja19wdWRfc2V0KHZtYS0mZ3Q7dm1fbW0sIGFkZHJlc3MsIHB1ZHAsIHB1ZCk7CiYjNDM7CXJldHVybiBfX3B1ZCh4Y2hnX3JlbGF4ZWQoJmFtcDtwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeToKICAqCWJpdHMgMC0xOglwcmVzZW50IChtdXN0IGJlIHplcm8pCkBAIC0xNTg2LDYgJiM0MzsxNjIyLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcCiAJdXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpCiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgYWRkcmVzcywgcG1kKSBkbyB7IH0gd2hpbGUgKDApCiYjNDM7I2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3B1ZCh2bWEsIGFkZHJlc3MsIHB1ZCkgZG8geyB9IHdoaWxlICgwKQogCiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTIKICNkZWZpbmUgcGh5c190b190dGJyKGFkZHIpCSgoKGFkZHIpIHwgKChhZGRyKSAmZ3Q7Jmd0OyA0NikpICZhbXA7IFRUQlJfQkFERFJfTUFTS181MikKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKaW5kZXggZjRkYjdkN2ZiZDVjNi4uNTVkMzNjNTUzN2YxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgKQEAgLTE0MTksNiAmIzQzOzE0MTksNyBAQCBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BNRFBfSU5WQUxJREFURQogZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgICBwbWRfdCAqcG1kcCk7CiYjNDM7I2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCSAgICAgcHVkX3QgKnB1ZHApOwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDQwYjFlZDRmM2VhODkuLjMyN2ZhMzc4MDMyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMTU5LDkgJiM0MzsxMTU5LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtpbnZhbGlkKHB1ZF90IHB1ZCkKIAlyZXR1cm4gX19wdWQocHVkX3ZhbChwdWQpICZhbXA7IH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1RfTk9ORSkpOwogfQogCi1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHB1ZF90ICpwdWRwKTsKLQogc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdCkKIHsKIAlyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwppbmRleCA5YzQ0MjdkMGIxODc0Li4xNTZlMzg1ZTdkYjQ0IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuYwpAQCAtMTU0LDE1ICYjNDM7MTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlyZXR1cm4gcG1kOwogfQogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCi0JZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwotCXJldHVybiBvbGQ7Ci19CiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAKIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM4Nyw5ICYjNDM7MTM4Nyw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApOwogCi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJICAgICAgcHVkX3QgKnB1ZHApOwotCiAvKgogICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcAogICogbGV2ZWwgaXMgdXNlZCBmb3IgdXNlcnNwYWNlIGFuZCB0aGUgdG9wIGhhbGYgZm9yIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNTE5LDE4ICYjNDM7NTE5LDYgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmYW1wOyZhbXA7IFwKLQlkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKQotcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCSAgICAgcHVkX3QgKnB1ZHApCi17Ci0JVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwotCXB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpOwotCWZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICYjNDM7IEhQQUdFX1BVRF9TSVpFKTsKLQlyZXR1cm4gb2xkOwotfQotI2VuZGlmCi0KIC8qKgogICogcmVzZXJ2ZV90b3BfYWRkcmVzcyAtIFJlc2VydmUgYSBob2xlIGluIHRoZSB0b3Agb2YgdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlCiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKaW5kZXggOGMwOTNjMTE5ZTVhOC4uMzIxNzMwMDViMDg3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKQEAgLTEzMTgsNiAmIzQzOzEzMTgsMTMgQEAgZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTsKICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiYjNDM7CQkJICAgICBwdWRfdCAqcHVkcCk7CiYjNDM7I2VuZGlmCiYjNDM7I2VuZGlmCiYjNDM7CiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FCiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpCiB7CmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0Ci0tLSBhL21tL3BndGFibGUtZ2VuZXJpYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3BndGFibGUtZ2VuZXJpYy5jCkBAIC0yMTcsNiAmIzQzOzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIH0KICNlbmRpZgogCiYjNDM7I2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEUKJiM0MzsjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQKJiM0MztwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKJiM0MzsJCSAgICAgIHB1ZF90ICpwdWRwKQomIzQzO3sKJiM0MzsJVk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpOwomIzQzOwlwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTsKJiM0MzsKJiM0MzsJZmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgJiM0MzsgSFBBR0VfUFVEX1NJWkUpOwomIzQzOwlyZXR1cm4gb2xkOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaAogcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICBwbWRfdCAqcG1kcCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzODAKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogNzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBhbWQ2NCBBcmNoaXRlY3R1cmUqKgoKT2theSwgc28gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQsIGFuZCBJIG5lZWQgdG8gYW5hbHl6ZSB0aGlzIHBhdGNoLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCkZpcnN0LCBpdCBsb29rcyBsaWtlIHRoZXJlJiMzOTtzIHNvbWUgY29uZmlndXJhdGlvbiBiZWluZyBhZGRlZCBmb3IgQVJNNjQ6IHNlbGVjdGluZyBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgYmFzZWQgb24gYFBBR0VfU0laRV80S0JgLiBUaGF0JiMzOTtzIGEgY29uZGl0aW9uYWwgc2V0dGluZywgYW5kIGV4cGVjdGVkLiBUaGVuLCBhIGJ1bmNoIG9mIEFSTTY0LXNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgZm9yIFBVRC1sZXZlbCBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCBQaHlzaWNhbCBGcmFtZSBOdW1iZXIgTWFwIChQRk5NQVApIGFyZSBhZGRlZC4gVGhpcyBzZWVtcyByZWFzb25hYmxlIGZvciBzdXBwb3J0aW5nIFRIUCBhdCB0aGF0IGxldmVsLgoKTmV4dCwgSSBzZWUgYSBiaXQgb2YgY2xlYW51cC4gUG93ZXJQQyBpcyBkZWZpbmluZyBgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFYCBhbmQgZXh0ZXJucyBhIGZ1bmN0aW9uLiBSSVNDLVYgYW5kIHg4NiBhcmUgcmVtb3ZpbmcgZHVwbGljYXRlIGFyY2gtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBwdWRwX2ludmFsaWRhdGVgLiBBaCwgc28gaXQgbG9va3MgbGlrZSB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGdlbmVyYWxpemVkLgoKVGhlIGNvcmUgb2YgdGhlIGdlbmVyYWxpemF0aW9uIGlzIGhhcHBlbmluZyBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgIGFuZCBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlYCBpcyBhZGRlZCBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2VzbiYjMzk7dCogaGF2ZSBpdHMgb3duIGRlZmluaXRpb24sIGFuZCBpZiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgaXMgY29uZmlndXJlZC4gVGhlbiBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gaXMgcHJvdmlkZWQgaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYC4gVGhpcyBtYWtlcyBzZW5zZSDigJMgY29uc29saWRhdGUgdGhlIGNvZGUsIHJlZHVjZSBkdXBsaWNhdGlvbiwgYW5kIHByb3ZpZGUgYSBzdGFuZGFyZCBpbnRlcmZhY2UuCgpOb3csIHRoZSBpbXBvcnRhbnQgcGFydDogaXMgdGhpcyBzYWZlPyBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcz8gVGhlIGNoYW5nZXMgYXJlICpwcmltYXJpbHkqIGFib3V0IFBVRC1sZXZlbCBUSFAgaGVscGVycyBhbmQgdGhlIGBwdWRwX2ludmFsaWRhdGVgIGdlbmVyYWxpemF0aW9uLiBGcm9tIHdoYXQgSSBzZWUsIGBwdWRwX2ludmFsaWRhdGVgIGlzIGVzc2VudGlhbGx5IGp1c3QgYmVpbmcgbW92ZWQgZnJvbSB4ODYgYW5kIFJJU0MtViB0byB0aGUgZ2VuZXJpYyBjb2RlLiBBUk02NCBpcyBnZXR0aW5nIG5ldyBUSFAvUEZOTUFQIHN1cHBvcnQgYXQgdGhlIFBVRCBsZXZlbCwgd2hpY2ggaXMgd2hhdCB0aGUgaGVscGVycyBhcmUgZG9pbmcuCgpUaGVyZSYjMzk7cyBubyBpbmRpY2F0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSB0YWJsZSBvcGVyYXRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRob3NlIGJpdCBwYXR0ZXJucyAocHRlL3BtZC9wdWQgdmFsdWVzKSB0aGF0IGFyZSBiaXR3aXNlLW1hbmlwdWxhdGVkLiBUaGVyZSYjMzk7cyBub3RoaW5nIGhlcmUgdGhhdCBsb29rcyBsaWtlIGl0IGlzIHdyaXRpbmcgdG8gdXNlciBzcGFjZSBvciBjb25kaXRpb25hbCBsb2dpYyBhcm91bmQgdW5pbml0aWFsaXplZCBkYXRhLiBUaGVzZSBhcmUgdHlwaWNhbGx5IGJpdHdpc2Ugb3BzIGFuZCBhdG9taWMgZXhjaGFuZ2VzLCB3aGljaCB3b3VsZCBub3Qgbm9ybWFsbHkgZXhwb3NlIGFueSBzZWN1cml0eSBpc3N1ZXMuCgpTbywgbGV0JiMzOTtzIGdvIGRlZXBlciBhbmQgY29tcGFyZSBpdCB0byBib3RoIEtBU0FOIGFuZCBLTVNBTiBjaGVja3M6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkPyBOby4gVGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBsb29rIGxpa2UgaXQgZGVhbHMgd2l0aCB0aGlzLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gSXQmIzM5O3MganVzdCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBjb25zb2xpZGF0aW9uLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3QgdGhhdCBJIGNhbiBzZWUuIFdlJiMzOTtyZSBtYWlubHkganVzdCB3b3JraW5nIHdpdGggcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBOb3BlLgoKQmFzZWQgb24gYWxsIG9mIHRoYXQsIGl0IGxvb2tzIGxpa2UgYE5lZWRzS01TQU5gIHNob3VsZCBkZWZpbml0ZWx5IGJlIGBmYWxzZWAuCgpPa2F5LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGF0IGFuYWx5c2lzLiBUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBleHBsYWluIHRoZSByYXRpb25hbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA5IDExOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXG5cblRoZXNlIGNoYW5nZXMgb25seSBtYW5pcHVsYXRlIGFyY2hpdGVjdHVyYWwgcGFnZSB0YWJsZSBlbnRyaWVzIChQVUQvUE1EL1BURSBiaXQtZmxhZ3MsIHBhZ2UgdGFibGUgZXN0YWJsaXNobWVudCwgYW5kIFRMQiBpbnZhbGlkYXRpb24pLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcHkgZGF0YSB0by9mcm9tIHVzZXJzcGFjZSwgYWx0ZXIgc3RydWN0IHBhZGRpbmcvaW5pdGlhbGl6YXRpb24sIG9yIGNyZWF0ZSBwYXRocyB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAvcGFnZSBtZW1vcnkgY291bGQgYmUgZXZhbHVhdGVkIG9yIGxlYWtlZC4gVGhlcmVmb3JlLCBzdGFuZGFyZCBLQVNBTi9kZWJ1ZyBidWlsZHMgYXJlIHN1ZmZpY2llbnQgYW5kIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIFBVRHMgYW5kIFBVRCBQRk5NQVAgb24gYXJtNjQsIHdoaWxlIGNvbnNvbGlkYXRpbmcgdGhlIGdlbmVyaWMgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFjcm9zcyBhcmNoaXRlY3R1cmVzICh4ODYsIHJpc2N2LCBwb3dlcnBjKS5cblxuVGhlc2UgY2hhbmdlcyBvbmx5IG1hbmlwdWxhdGUgYXJjaGl0ZWN0dXJhbCBwYWdlIHRhYmxlIGVudHJpZXMgKFBVRC9QTUQvUFRFIGJpdC1mbGFncywgcGFnZSB0YWJsZSBlc3RhYmxpc2htZW50LCBhbmQgVExCIGludmFsaWRhdGlvbikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlLCBhbHRlciBzdHJ1Y3QgcGFkZGluZy9pbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBjb3VsZCBiZSBldmFsdWF0ZWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL2RlYnVnIGJ1aWxkcyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM2OjM5LjU5NDE5MzY0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0OTcxNzEwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwdWRwX2ludmFsaWRhdGVcIixcbiAgICBcImNoYW5nZV9odWdlX3B1ZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIFBVRHMgYW5kIFBVRCBQRk5NQVAgb24gYXJtNjQsIHdoaWxlIGNvbnNvbGlkYXRpbmcgdGhlIGdlbmVyaWMgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFjcm9zcyBhcmNoaXRlY3R1cmVzICh4ODYsIHJpc2N2LCBwb3dlcnBjKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBhcmNoaXRlY3R1cmFsIHBhZ2UgdGFibGUgZW50cmllcyAoUFVEL1BNRC9QVEUgYml0LWZsYWdzLCBwYWdlIHRhYmxlIGVzdGFibGlzaG1lbnQsIGFuZCBUTEIgaW52YWxpZGF0aW9uKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8vZnJvbSB1c2Vyc3BhY2UsIGFsdGVyIHN0cnVjdCBwYWRkaW5nL2luaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGNvdWxkIGJlIGV2YWx1YXRlZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vZGVidWcgYnVpbGRzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6MzkuNTk0MTk5MjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzY2NTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkODNkOWMzZmViNTFjZTdhNGY2ZjEzMzkwOGE2ZGIwMWZjNmU3ODlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTozNjozOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcXG5pbmRleCBiNWE1MWIwZWY5NDQwLi44YTdjYTE4NjM1OTVhIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbkBAIC0xNzMsNiArMTczLDcgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1RcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcXG4gXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbitcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXFxuIFxcdHNlbGVjdCBIQVZFX0FSQ0hfVk1BUF9TVEFDS1xcbiBcXHRzZWxlY3QgSEFWRV9BUk1fU01DQ0NcXG4gXFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCA2MDAwOTA1YTJlODY1Li5mZGMzMzg5NzA5MzRkIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMjQzLDE4ICsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdClcXG4gXFx0cmV0dXJuIHB0ZTtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBwbWRfdCBjbGVhcl9wbWRfYml0KHBtZF90IHBtZCwgcGdwcm90X3QgcHJvdClcXG4te1xcbi1cXHRwbWRfdmFsKHBtZCkgXFx1MDAyNj0gfnBncHJvdF92YWwocHJvdCk7XFxuLVxcdHJldHVybiBwbWQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgcG1kX3Qgc2V0X3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KVxcbi17XFxuLVxcdHBtZF92YWwocG1kKSB8PSBwZ3Byb3RfdmFsKHByb3QpO1xcbi1cXHRyZXR1cm4gcG1kO1xcbi19XFxuLVxcbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX25vdm1hKHB0ZV90IHB0ZSlcXG4ge1xcbiBcXHRwdGUgPSBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KFBURV9XUklURSkpO1xcbkBAIC02MTksMTEgKzYwNywxMyBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta2h1Z2UocG1kX3QgcG1kKVxcbiB9XFxuIFxcbiAjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUE1EX1BGTk1BUFxcbi0jZGVmaW5lIHBtZF9zcGVjaWFsKHB0ZSlcXHQoISEoKHBtZF92YWwocHRlKSBcXHUwMDI2IFBURV9TUEVDSUFMKSkpXFxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXFxuLXtcXG4tXFx0cmV0dXJuIHNldF9wbWRfYml0KHBtZCwgX19wZ3Byb3QoUFRFX1NQRUNJQUwpKTtcXG4tfVxcbisjZGVmaW5lIHBtZF9zcGVjaWFsKHBtZClcXHRwdGVfc3BlY2lhbChwbWRfcHRlKHBtZCkpXFxuKyNkZWZpbmUgcG1kX21rc3BlY2lhbChwbWQpXFx0cHRlX3BtZChwdGVfbWtzcGVjaWFsKHBtZF9wdGUocG1kKSkpXFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcXG4rI2RlZmluZSBwdWRfc3BlY2lhbChwdWQpXFx0cHRlX3NwZWNpYWwocHVkX3B0ZShwdWQpKVxcbisjZGVmaW5lIHB1ZF9ta3NwZWNpYWwocHVkKVxcdHB0ZV9wdWQocHRlX21rc3BlY2lhbChwdWRfcHRlKHB1ZCkpKVxcbiAjZW5kaWZcXG4gXFxuICNkZWZpbmUgX19wbWRfdG9fcGh5cyhwbWQpXFx0X19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpXFxuQEAgLTYzNCw4ICs2MjQsMTUgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWtzcGVjaWFsKHBtZF90IHBtZClcXG4gI2RlZmluZSBwdWRfeW91bmcocHVkKVxcdFxcdHB0ZV95b3VuZyhwdWRfcHRlKHB1ZCkpXFxuICNkZWZpbmUgcHVkX21reW91bmcocHVkKVxcdHB0ZV9wdWQocHRlX21reW91bmcocHVkX3B0ZShwdWQpKSlcXG4gI2RlZmluZSBwdWRfbWt3cml0ZV9ub3ZtYShwdWQpXFx0cHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKVxcbisjZGVmaW5lIHB1ZF9ta3dyaXRlKHB1ZClcXHRwdWRfbWt3cml0ZV9ub3ZtYShwdWQpXFxuICNkZWZpbmUgcHVkX21rdmFsaWRfayhwdWQpXFx0cHRlX3B1ZChwdGVfbWt2YWxpZF9rKHB1ZF9wdGUocHVkKSkpXFxuICNkZWZpbmUgcHVkX3dyaXRlKHB1ZClcXHRcXHRwdGVfd3JpdGUocHVkX3B0ZShwdWQpKVxcbisjZGVmaW5lIHB1ZF9kaXJ0eShwdWQpXFx0XFx0cHRlX2RpcnR5KHB1ZF9wdGUocHVkKSlcXG4rI2RlZmluZSBwdWRfd3Jwcm90ZWN0KHB1ZClcXHRwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSlcXG4rI2RlZmluZSBwdWRfbWtkaXJ0eShwdWQpXFx0cHRlX3B1ZChwdGVfbWtkaXJ0eShwdWRfcHRlKHB1ZCkpKVxcbisjZGVmaW5lIHB1ZF9ta29sZChwdWQpXFx0XFx0cHRlX3B1ZChwdGVfbWtvbGQocHVkX3B0ZShwdWQpKSlcXG4rI2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZClcXHRwdGVfcHVkKHB0ZV9ta2ludmFsaWQocHVkX3B0ZShwdWQpKSlcXG4rI2RlZmluZSBwdWRfbWtjbGVhbihwdWQpXFx0cHRlX3B1ZChwdGVfbWtjbGVhbihwdWRfcHRlKHB1ZCkpKVxcbiBcXG4gc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtodWdlKHB1ZF90IHB1ZClcXG4ge1xcbkBAIC04ODYsNiArODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpXFxuICNkZWZpbmUgcHVkX3VzZXIocHVkKVxcdFxcdHB0ZV91c2VyKHB1ZF9wdGUocHVkKSlcXG4gI2RlZmluZSBwdWRfdXNlcl9leGVjKHB1ZClcXHRwdGVfdXNlcl9leGVjKHB1ZF9wdGUocHVkKSlcXG4gXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbitzdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXFxuK3tcXG4rXFx0cmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgXFx1MDAyNlxcdTAwMjYgIXB1ZF90YWJsZShfX3B1ZChwdWRfdmFsKHB1ZCkgfCBQVEVfVkFMSUQpKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B1ZChwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxcbkBAIC0xMjUyLDYgKzEyNTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbW9kaWZ5KHBtZF90IHBtZCwgcGdwcm90X3QgbmV3cHJvdClcXG4gXFx0cmV0dXJuIHB0ZV9wbWQocHRlX21vZGlmeShwbWRfcHRlKHBtZCksIG5ld3Byb3QpKTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcXG4re1xcbitcXHRyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpO1xcbit9XFxuK1xcbiBleHRlcm4gaW50IF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCxcXG4gXFx0XFx0XFx0XFx0XFx0IHB0ZV90IGVudHJ5LCBpbnQgZGlydHksXFxuQEAgLTEyNzYsNiArMTI4NSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxcbitzdGF0aWMgaW5saW5lIGludCBwdWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsXFxuK1xcdFxcdFxcdFxcdFxcdHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXFxuK3tcXG4rXFx0cmV0dXJuIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzX2FueXN6KHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwdWRfcHRlKGVudHJ5KSwgZGlydHksIFBVRF9TSVpFKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcXG4ge1xcbkBAIC0xMzUwLDYgKzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSB8fCBDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcgKi9cXG4gXFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwdWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB1ZF90ICpwdWRwKVxcbit7XFxuK1xcdHJldHVybiBfX3B0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldF9hbmRfY2xlYXJfYW55c3ooc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBwdGVfdCAqcHRlcCxcXG5AQCAtMTUxMiw2ICsxNTM5LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG4rc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxcbit7XFxuK1xcdHBhZ2VfdGFibGVfY2hlY2tfcHVkX3NldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdWRwLCBwdWQpO1xcbitcXHRyZXR1cm4gX19wdWQoeGNoZ19yZWxheGVkKFxcdTAwMjZwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiAvKlxcbiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnk6XFxuICAqXFx0Yml0cyAwLTE6XFx0cHJlc2VudCAobXVzdCBiZSB6ZXJvKVxcbkBAIC0xNTg2LDYgKzE2MjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSwgYWRkciwgcHRlcCkgXFxcXFxcbiBcXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKE5VTEwsIHZtYSwgYWRkciwgcHRlcCwgMSlcXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHBtZCkgZG8geyB9IHdoaWxlICgwKVxcbisjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcHVkKHZtYSwgYWRkcmVzcywgcHVkKSBkbyB7IH0gd2hpbGUgKDApXFxuIFxcbiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTJcXG4gI2RlZmluZSBwaHlzX3RvX3R0YnIoYWRkcilcXHQoKChhZGRyKSB8ICgoYWRkcikgXFx1MDAzZVxcdTAwM2UgNDYpKSBcXHUwMDI2IFRUQlJfQkFERFJfTUFTS181MilcXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxcbmluZGV4IGY0ZGI3ZDdmYmQ1YzYuLjU1ZDMzYzU1MzdmMTMgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxcbkBAIC0xNDE5LDYgKzE0MTksNyBAQCBzdGF0aWMgaW5saW5lIHBndGFibGVfdCBwZ3RhYmxlX3RyYW5zX2h1Z2Vfd2l0aGRyYXcoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUE1EUF9JTlZBTElEQVRFXFxuIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0ICAgICBwbWRfdCAqcG1kcCk7XFxuKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxuIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0ICAgICBwdWRfdCAqcHVkcCk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggNDBiMWVkNGYzZWE4OS4uMzI3ZmEzNzgwMzJiNyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTExNTksOSArMTE1OSw2IEBAIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21raW52YWxpZChwdWRfdCBwdWQpXFxuIFxcdHJldHVybiBfX3B1ZChwdWRfdmFsKHB1ZCkgXFx1MDAyNiB+KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UX05PTkUpKTtcXG4gfVxcbiBcXG4tZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHRcXHQgICAgIHB1ZF90ICpwdWRwKTtcXG4tXFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpXFxuIHtcXG4gXFx0cmV0dXJuIHB0ZV9wdWQocHRlX21vZGlmeShwdWRfcHRlKHB1ZCksIG5ld3Byb3QpKTtcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xcbmluZGV4IDljNDQyN2QwYjE4NzQuLjE1NmUzODVlN2RiNDQgMTAwNjQ0XFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xcbkBAIC0xNTQsMTUgKzE1NCw2IEBAIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdHJldHVybiBwbWQ7XFxuIH1cXG4gXFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi1cXHRcXHQgICAgICBwdWRfdCAqcHVkcClcXG4te1xcbi1cXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XFxuLVxcdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xcbi1cXG4tXFx0Zmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgKyBIUEFHRV9QVURfU0laRSk7XFxuLVxcdHJldHVybiBvbGQ7XFxuLX1cXG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbiBcXG4gcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtMTM4Nyw5ICsxMzg3LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kcCk7XFxuIFxcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tXFx0XFx0ICAgICAgcHVkX3QgKnB1ZHApO1xcbi1cXG4gLypcXG4gICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcFxcbiAgKiBsZXZlbCBpcyB1c2VkIGZvciB1c2Vyc3BhY2UgYW5kIHRoZSB0b3AgaGFsZiBmb3IgdGhlIGtlcm5lbC5cXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXFxuaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcXG4rKysgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcXG5AQCAtNTE5LDE4ICs1MTksNiBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gfVxcbiAjZW5kaWZcXG4gXFxuLSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbi1cXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tXFx0XFx0ICAgICBwdWRfdCAqcHVkcClcXG4te1xcbi1cXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XFxuLVxcdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xcbi1cXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcXG4tXFx0cmV0dXJuIG9sZDtcXG4tfVxcbi0jZW5kaWZcXG4tXFxuIC8qKlxcbiAgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gUmVzZXJ2ZSBhIGhvbGUgaW4gdGhlIHRvcCBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2VcXG4gICogQHJlc2VydmU6IFNpemUgb2YgaG9sZSB0byByZXNlcnZlXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5pbmRleCA4YzA5M2MxMTllNWE4Li4zMjE3MzAwNWIwODdmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcXG5AQCAtMTMxOCw2ICsxMzE4LDEzIEBAIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApO1xcbiAjZW5kaWZcXG4gXFxuKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbitleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuK1xcdFxcdFxcdCAgICAgcHVkX3QgKnB1ZHApO1xcbisjZW5kaWZcXG4rI2VuZGlmXFxuK1xcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FXFxuIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zYW1lKHB0ZV90IHB0ZV9hLCBwdGVfdCBwdGVfYilcXG4ge1xcbmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXFxuaW5kZXggYjkxYjFhOTgwMjljNy4uYWMxMTc1ZDlhNTlhNyAxMDA2NDRcXG4tLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xcbisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXFxuQEAgLTIxNyw2ICsyMTcsMjAgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG4rcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuK1xcdFxcdCAgICAgIHB1ZF90ICpwdWRwKVxcbit7XFxuK1xcdFZNX1dBUk5fT05fT05DRSghcHVkX3ByZXNlbnQoKnB1ZHApKTtcXG4rXFx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XFxuK1xcbitcXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcXG4rXFx0cmV0dXJuIG9sZDtcXG4rfVxcbisjZW5kaWZcXG4rI2VuZGlmXFxuK1xcbiAjaWZuZGVmIHBtZHBfY29sbGFwc2VfZmx1c2hcXG4gcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXHRcXHRcXHQgIHBtZF90ICpwbWRwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNjo0MC4xOTI1MDg4MjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MzgyMzI3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHVkcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJjaGFuZ2VfaHVnZV9wdWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDgzZDljM2ZlYjUxY2U3YTRmNmYxMzM5MDhhNmRiMDFmYzZlNzg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgOSAxMTozNjozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjVhNTFiMGVmOTQ0MC4uOGE3Y2ExODYzNTk1YSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMTczLDYgKzE3Myw3IEBAIGNvbmZpZyBBUk02NFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9USFJFQURfU1RSVUNUX1dISVRFTElTVFxuIFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFDRUhPT0tcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbitcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFBBR0VfU0laRV80S0JcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVk1BUF9TVEFDS1xuIFx0c2VsZWN0IEhBVkVfQVJNX1NNQ0NDXG4gXHRzZWxlY3QgSEFWRV9BU01fTU9EVkVSU0lPTlNcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA2MDAwOTA1YTJlODY1Li5mZGMzMzg5NzA5MzRkIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMjQzLDE4ICsyNDMsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZV90IHNldF9wdGVfYml0KHB0ZV90IHB0ZSwgcGdwcm90X3QgcHJvdClcbiBcdHJldHVybiBwdGU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgY2xlYXJfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpXG4te1xuLVx0cG1kX3ZhbChwbWQpIFx1MDAyNj0gfnBncHJvdF92YWwocHJvdCk7XG4tXHRyZXR1cm4gcG1kO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHBtZF90IHNldF9wbWRfYml0KHBtZF90IHBtZCwgcGdwcm90X3QgcHJvdClcbi17XG4tXHRwbWRfdmFsKHBtZCkgfD0gcGdwcm90X3ZhbChwcm90KTtcbi1cdHJldHVybiBwbWQ7XG4tfVxuLVxuIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGVfbm92bWEocHRlX3QgcHRlKVxuIHtcbiBcdHB0ZSA9IHNldF9wdGVfYml0KHB0ZSwgX19wZ3Byb3QoUFRFX1dSSVRFKSk7XG5AQCAtNjE5LDExICs2MDcsMTMgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbWtodWdlKHBtZF90IHBtZClcbiB9XG4gXG4gI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BNRF9QRk5NQVBcbi0jZGVmaW5lIHBtZF9zcGVjaWFsKHB0ZSlcdCghISgocG1kX3ZhbChwdGUpIFx1MDAyNiBQVEVfU1BFQ0lBTCkpKVxuLXN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXG4te1xuLVx0cmV0dXJuIHNldF9wbWRfYml0KHBtZCwgX19wZ3Byb3QoUFRFX1NQRUNJQUwpKTtcbi19XG4rI2RlZmluZSBwbWRfc3BlY2lhbChwbWQpXHRwdGVfc3BlY2lhbChwbWRfcHRlKHBtZCkpXG4rI2RlZmluZSBwbWRfbWtzcGVjaWFsKHBtZClcdHB0ZV9wbWQocHRlX21rc3BlY2lhbChwbWRfcHRlKHBtZCkpKVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4rI2RlZmluZSBwdWRfc3BlY2lhbChwdWQpXHRwdGVfc3BlY2lhbChwdWRfcHRlKHB1ZCkpXG4rI2RlZmluZSBwdWRfbWtzcGVjaWFsKHB1ZClcdHB0ZV9wdWQocHRlX21rc3BlY2lhbChwdWRfcHRlKHB1ZCkpKVxuICNlbmRpZlxuIFxuICNkZWZpbmUgX19wbWRfdG9fcGh5cyhwbWQpXHRfX3B0ZV90b19waHlzKHBtZF9wdGUocG1kKSlcbkBAIC02MzQsOCArNjI0LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21rc3BlY2lhbChwbWRfdCBwbWQpXG4gI2RlZmluZSBwdWRfeW91bmcocHVkKVx0XHRwdGVfeW91bmcocHVkX3B0ZShwdWQpKVxuICNkZWZpbmUgcHVkX21reW91bmcocHVkKVx0cHRlX3B1ZChwdGVfbWt5b3VuZyhwdWRfcHRlKHB1ZCkpKVxuICNkZWZpbmUgcHVkX21rd3JpdGVfbm92bWEocHVkKVx0cHRlX3B1ZChwdGVfbWt3cml0ZV9ub3ZtYShwdWRfcHRlKHB1ZCkpKVxuKyNkZWZpbmUgcHVkX21rd3JpdGUocHVkKVx0cHVkX21rd3JpdGVfbm92bWEocHVkKVxuICNkZWZpbmUgcHVkX21rdmFsaWRfayhwdWQpXHRwdGVfcHVkKHB0ZV9ta3ZhbGlkX2socHVkX3B0ZShwdWQpKSlcbiAjZGVmaW5lIHB1ZF93cml0ZShwdWQpXHRcdHB0ZV93cml0ZShwdWRfcHRlKHB1ZCkpXG4rI2RlZmluZSBwdWRfZGlydHkocHVkKVx0XHRwdGVfZGlydHkocHVkX3B0ZShwdWQpKVxuKyNkZWZpbmUgcHVkX3dycHJvdGVjdChwdWQpXHRwdGVfcHVkKHB0ZV93cnByb3RlY3QocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta2RpcnR5KHB1ZClcdHB0ZV9wdWQocHRlX21rZGlydHkocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta29sZChwdWQpXHRcdHB0ZV9wdWQocHRlX21rb2xkKHB1ZF9wdGUocHVkKSkpXG4rI2RlZmluZSBwdWRfbWtpbnZhbGlkKHB1ZClcdHB0ZV9wdWQocHRlX21raW52YWxpZChwdWRfcHRlKHB1ZCkpKVxuKyNkZWZpbmUgcHVkX21rY2xlYW4ocHVkKVx0cHRlX3B1ZChwdGVfbWtjbGVhbihwdWRfcHRlKHB1ZCkpKVxuIFxuIHN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21raHVnZShwdWRfdCBwdWQpXG4ge1xuQEAgLTg4Niw2ICs4ODMsMTMgQEAgc3RhdGljIGlubGluZSBib29sIHB1ZF9sZWFmKHB1ZF90IHB1ZClcbiAjZGVmaW5lIHB1ZF91c2VyKHB1ZClcdFx0cHRlX3VzZXIocHVkX3B0ZShwdWQpKVxuICNkZWZpbmUgcHVkX3VzZXJfZXhlYyhwdWQpXHRwdGVfdXNlcl9leGVjKHB1ZF9wdGUocHVkKSlcbiBcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbitzdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfaHVnZShwdWRfdCBwdWQpXG4re1xuK1x0cmV0dXJuIHB1ZF9wcmVzZW50KHB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfdGFibGUoX19wdWQocHVkX3ZhbChwdWQpIHwgUFRFX1ZBTElEKSk7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w0X2VuYWJsZWQodm9pZCk7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHNldF9wdWQocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbkBAIC0xMjUyLDYgKzEyNTYsMTEgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRfbW9kaWZ5KHBtZF90IHBtZCwgcGdwcm90X3QgbmV3cHJvdClcbiBcdHJldHVybiBwdGVfcG1kKHB0ZV9tb2RpZnkocG1kX3B0ZShwbWQpLCBuZXdwcm90KSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkX21vZGlmeShwdWRfdCBwdWQsIHBncHJvdF90IG5ld3Byb3QpXG4re1xuK1x0cmV0dXJuIHB0ZV9wdWQocHRlX21vZGlmeShwdWRfcHRlKHB1ZCksIG5ld3Byb3QpKTtcbit9XG4rXG4gZXh0ZXJuIGludCBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFnc19hbnlzeihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXAsXG4gXHRcdFx0XHRcdCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5LFxuQEAgLTEyNzYsNiArMTI4NSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4rc3RhdGljIGlubGluZSBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB1ZF90ICpwdWRwLFxuK1x0XHRcdFx0XHRwdWRfdCBlbnRyeSwgaW50IGRpcnR5KVxuK3tcbitcdHJldHVybiBfX3B0ZXBfc2V0X2FjY2Vzc19mbGFnc19hbnlzeih2bWEsIGFkZHJlc3MsIChwdGVfdCAqKXB1ZHAsXG4rXHRcdFx0XHRcdCAgICAgcHVkX3B0ZShlbnRyeSksIGRpcnR5LCBQVURfU0laRSk7XG4rfVxuKyNlbmRpZlxuK1xuICNpZmRlZiBDT05GSUdfUEFHRV9UQUJMRV9DSEVDS1xuIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfdXNlcl9hY2Nlc3NpYmxlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuIHtcbkBAIC0xMzUwLDYgKzEzNjksMTQgQEAgc3RhdGljIGlubGluZSBib29sIHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1EX1lPVU5HICovXG4gXG4rI2lmZGVmIENPTkZJR19BUkNIX1NVUFBPUlRTX1BVRF9QRk5NQVBcbitzdGF0aWMgaW5saW5lIGJvb2wgcHVkcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcClcbit7XG4rXHRyZXR1cm4gX19wdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkcmVzcywgKHB0ZV90ICopcHVkcCk7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbmxpbmUgcHRlX3QgX19wdGVwX2dldF9hbmRfY2xlYXJfYW55c3ooc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRcdFx0XHRcdCAgICAgICBwdGVfdCAqcHRlcCxcbkBAIC0xNTEyLDYgKzE1MzksMTUgQEAgc3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gI2VuZGlmXG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4rc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCwgcHVkX3QgcHVkKVxuK3tcbitcdHBhZ2VfdGFibGVfY2hlY2tfcHVkX3NldCh2bWEtXHUwMDNldm1fbW0sIGFkZHJlc3MsIHB1ZHAsIHB1ZCk7XG4rXHRyZXR1cm4gX19wdWQoeGNoZ19yZWxheGVkKFx1MDAyNnB1ZF92YWwoKnB1ZHApLCBwdWRfdmFsKHB1ZCkpKTtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnk6XG4gICpcdGJpdHMgMC0xOlx0cHJlc2VudCAobXVzdCBiZSB6ZXJvKVxuQEAgLTE1ODYsNiArMTYyMiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbW11X2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuICNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHIsIHB0ZXApIFxcXG4gXHR1cGRhdGVfbW11X2NhY2hlX3JhbmdlKE5VTEwsIHZtYSwgYWRkciwgcHRlcCwgMSlcbiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGVfcG1kKHZtYSwgYWRkcmVzcywgcG1kKSBkbyB7IH0gd2hpbGUgKDApXG4rI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3B1ZCh2bWEsIGFkZHJlc3MsIHB1ZCkgZG8geyB9IHdoaWxlICgwKVxuIFxuICNpZmRlZiBDT05GSUdfQVJNNjRfUEFfQklUU181MlxuICNkZWZpbmUgcGh5c190b190dGJyKGFkZHIpXHQoKChhZGRyKSB8ICgoYWRkcikgXHUwMDNlXHUwMDNlIDQ2KSkgXHUwMDI2IFRUQlJfQkFERFJfTUFTS181MilcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5pbmRleCBmNGRiN2Q3ZmJkNWM2Li41NWQzM2M1NTM3ZjEzIDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG5AQCAtMTQxOSw2ICsxNDE5LDcgQEAgc3RhdGljIGlubGluZSBwZ3RhYmxlX3QgcGd0YWJsZV90cmFuc19odWdlX3dpdGhkcmF3KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuICNkZWZpbmUgX19IQVZFX0FSQ0hfUE1EUF9JTlZBTElEQVRFXG4gZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgICAgcG1kX3QgKnBtZHApO1xuKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4gZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDQwYjFlZDRmM2VhODkuLjMyN2ZhMzc4MDMyYjcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xMTU5LDkgKzExNTksNiBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta2ludmFsaWQocHVkX3QgcHVkKVxuIFx0cmV0dXJuIF9fcHVkKHB1ZF92YWwocHVkKSBcdTAwMjYgfihfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVF9OT05FKSk7XG4gfVxuIFxuLWV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbi1cbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxuIHtcbiBcdHJldHVybiBwdGVfcHVkKHB0ZV9tb2RpZnkocHVkX3B0ZShwdWQpLCBuZXdwcm90KSk7XG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xuaW5kZXggOWM0NDI3ZDBiMTg3NC4uMTU2ZTM4NWU3ZGI0NCAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jXG4rKysgYi9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xuQEAgLTE1NCwxNSArMTU0LDYgQEAgcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBwbWQ7XG4gfVxuIFxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgICBwdWRfdCAqcHVkcClcbi17XG4tXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XG4tXHRwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTtcbi1cbi1cdGZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICsgSFBBR0VfUFVEX1NJWkUpO1xuLVx0cmV0dXJuIG9sZDtcbi19XG4gI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuIFxuIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBkNWY0OTE3YzFlZGNiLi45NzA1MWMwMjM4NWU4IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xMzg3LDkgKzEzODcsNiBAQCBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTtcbiBcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgICAgcHVkX3QgKnB1ZHApO1xuLVxuIC8qXG4gICogUGFnZSB0YWJsZSBwYWdlcyBhcmUgcGFnZS1hbGlnbmVkLiAgVGhlIGxvd2VyIGhhbGYgb2YgdGhlIHRvcFxuICAqIGxldmVsIGlzIHVzZWQgZm9yIHVzZXJzcGFjZSBhbmQgdGhlIHRvcCBoYWxmIGZvciB0aGUga2VybmVsLlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2L21tL3BndGFibGUuY1xuaW5kZXggY2IwM2Y1YTJiMjQzMy4uMDk0NTkwODYzMWRjNSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuY1xuKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5AQCAtNTE5LDE4ICs1MTksNiBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4tI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcdTAwMjZcdTAwMjYgXFxcbi1cdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXG4tcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgICAgcHVkX3QgKnB1ZHApXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuLVx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4tXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcbi1cdHJldHVybiBvbGQ7XG4tfVxuLSNlbmRpZlxuLVxuIC8qKlxuICAqIHJlc2VydmVfdG9wX2FkZHJlc3MgLSBSZXNlcnZlIGEgaG9sZSBpbiB0aGUgdG9wIG9mIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFjZVxuICAqIEByZXNlcnZlOiBTaXplIG9mIGhvbGUgdG8gcmVzZXJ2ZVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbmluZGV4IDhjMDkzYzExOWU1YTguLjMyMTczMDA1YjA4N2YgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbkBAIC0xMzE4LDYgKzEzMTgsMTMgQEAgZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZHApO1xuICNlbmRpZlxuIFxuKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4rZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuK1x0XHRcdCAgICAgcHVkX3QgKnB1ZHApO1xuKyNlbmRpZlxuKyNlbmRpZlxuK1xuICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX1NBTUVcbiBzdGF0aWMgaW5saW5lIGludCBwdGVfc2FtZShwdGVfdCBwdGVfYSwgcHRlX3QgcHRlX2IpXG4ge1xuZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbmluZGV4IGI5MWIxYTk4MDI5YzcuLmFjMTE3NWQ5YTU5YTcgMTAwNjQ0XG4tLS0gYS9tbS9wZ3RhYmxlLWdlbmVyaWMuY1xuKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmNcbkBAIC0yMTcsNiArMjE3LDIwIEBAIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIH1cbiAjZW5kaWZcbiBcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuK3B1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuK1x0XHQgICAgICBwdWRfdCAqcHVkcClcbit7XG4rXHRWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7XG4rXHRwdWRfdCBvbGQgPSBwdWRwX2VzdGFibGlzaCh2bWEsIGFkZHJlc3MsIHB1ZHAsIHB1ZF9ta2ludmFsaWQoKnB1ZHApKTtcbitcbitcdGZsdXNoX3B1ZF90bGJfcmFuZ2Uodm1hLCBhZGRyZXNzLCBhZGRyZXNzICsgSFBBR0VfUFVEX1NJWkUpO1xuK1x0cmV0dXJuIG9sZDtcbit9XG4rI2VuZGlmXG4rI2VuZGlmXG4rXG4gI2lmbmRlZiBwbWRwX2NvbGxhcHNlX2ZsdXNoXG4gcG1kX3QgcG1kcF9jb2xsYXBzZV9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgcG1kX3QgKnBtZHApXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNjo0MC4xOTI1MTAxODJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NjIzODI3Mzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHB1ZHBfaW52YWxpZGF0ZWAgUGF0Y2g6IEEgRGVlcCBEaXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIHRhcmdldCBpcyBBTUQ2NCwgd2hpY2ggaXMgY3J1Y2lhbCBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGF0IGFyY2hpdGVjdHVyZS5cblxuSSBzZWUgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIHNldmVyYWwgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGBwZ3RhYmxlLmhgIGZpbGVzIGFuZCByZWxhdGVkIGltcGxlbWVudGF0aW9ucy4gVGhlIGNoYW5nZXMgYXJlIGZvY3VzZWQgb24gYHB1ZHBfaW52YWxpZGF0ZWAsIHdoaWNoIHN1Z2dlc3RzIGEgbW9kaWZpY2F0aW9uIHRvIGhvdyBwYWdlIHRhYmxlIGVudHJpZXMsIHNwZWNpZmljYWxseSBQVURzIChQYWdlIFVwcGVyIERpcmVjdG9yeSksIGFyZSBoYW5kbGVkIGFuZCBpbnZhbGlkYXRlZC5cblxuU3BlY2lmaWNhbGx5LCBJIG5vdGUgdGhlc2Uga2V5IG1vZGlmaWNhdGlvbnM6XG5cbiogICBUaGUgYGFyY2gvYXJtNjQvS2NvbmZpZ2AgY2hhbmdlOiBJdCBzZWxlY3RzIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCB1bmRlciBjZXJ0YWluIGBQQUdFX1NJWkVfNEtCYCBjb25kaXRpb25zLiBUaGlzIGlzIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IGZvciB0aGUgbmV3LCBnZW5lcmFsaXplZCBgcHVkcF9pbnZhbGlkYXRlYCBhbmQgaW1wbGllcyBzb21lIEFSTTY0IHN5c3RlbXMgd2lsbCBiZW5lZml0IGZyb20gdGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uLlxuKiAgIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaGAgaXMgY2hhbmdlZCBzaWduaWZpY2FudGx5OiBJdCB1cGRhdGVzIHNvbWUgbWFjcm9zL2Z1bmN0aW9ucyByZWxhdGVkIHRvIFBVRHMsIGRlZmluZXMgYW5kIHVwZGF0ZXMgZnVuY3Rpb25zIChlLmcuLCBgcHVkX21rd3JpdGVgLCBgcHVkX2RpcnR5YCwgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2ApLiBUaGVzZSBhZGRpdGlvbnMgYXJlIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgcGFnZSB0YWJsZSBpbnZhbGlkYXRpb24uIFRoZSBkZWZpbml0aW9uIG9mIGBwdWRfdHJhbnNfaHVnZWAgaXMgdmVyeSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiBodWdlIHBhZ2VzLlxuKiAgIFRoZSByZW1vdmFsIG9mIGBwdWRwX2ludmFsaWRhdGVgIGZyb20gUklTQy1WIGFuZCB4ODYgZmlsZXMuIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZTogdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGJlaW5nIHJlbW92ZWQuXG4qICAgVGhlIGFkZGl0aW9uIG9mIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgOiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGd1YXJkZWQgYnkgYm90aCBgIV9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgYW5kIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAuIFRoaXMgbWVhbnMgdGhlIG5ldyBnZW5lcmljIGltcGxlbWVudGF0aW9uIGlzIG5vdyBiZWluZyB1c2VkIGlmIG5vIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB2ZXJzaW9uIGlzIGF2YWlsYWJsZSAqYW5kKiBpZiBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpIGlzIGNvbmZpZ3VyZWQuIFRoaXMgaXMgaGlnaGx5IHJlbGV2YW50IGZvciBBTUQ2NCwgYXMgVEhQIGlzIGEgY29tbW9uIGFuZCBpbXBvcnRhbnQgZmVhdHVyZS5cblxuTm93LCBsZXQncyB6b29tIGluIG9uIHRoZSB4ODYgY2hhbmdlcy4gVGhlIHBhdGNoIGV4cGxpY2l0bHkgbW92ZXMgYHB1ZHBfaW52YWxpZGF0ZWAgZnJvbSBgYXJjaC94ODYvbW0vcGd0YWJsZS5jYCB0byBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgY29kZSBpdHNlbGYgbG9va3MgZnVuY3Rpb25hbGx5IGlkZW50aWNhbC5cblxuVGhpcyBtZWFucyB4ODYgKEFNRDY0KSBpcyBub3cgdXNpbmcgdGhlIGdlbmVyaWMgdmVyc2lvbiwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB4ODYgaGFzIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgZW5hYmxlZCB3aGVuIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZW5hYmxlZCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpcyB4ODZcXF82NC4gVGhpcyBnZW5lcmljIGltcGxlbWVudGF0aW9uJ3MgaW5jbHVzaW9uIG1lYW5zIGl0J3Mgbm93IGJlaW5nIHV0aWxpemVkLlxuXG5Ob3csIEkgbmVlZCB0byBzZWUgKmhvdyogYHB1ZHBfaW52YWxpZGF0ZWAgaXMgdXNlZCBpbiB0aGUga2VybmVsIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzIGFyZSByZWxldmFudCB0byBpdC4gVGhhdCdzIHRoZSBuZXh0IHN0ZXA7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgY29tcGxldGUgaW1wYWN0IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHJlZ3Jlc3Npb25zLiBJJ2xsIG5lZWQgdG8gZG8gYSBgZ3JlcGAgdGhyb3VnaCB0aGUgY29kZSBiYXNlIGZvciB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY29uZmlndXJhdGlvbnMgYXJvdW5kIGl0LiBUaGlzIGlzIGEgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHBhZ2UgdGFibGUgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgaXQgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE2OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM2OjQ2LjgxNjM0MTE0N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgyNjYzODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1ZHBfaW52YWxpZGF0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaD0xNDIwPWV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oLTE0MjItI2RlZmluZSBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaDoxNDIzOmV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xNDI0LVxcdFxcdFxcdCAgICAgcHVkX3QgKnB1ZHApO1xcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYz0xNTU9cG1kX3QgcG1kcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2Ny1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jOjE2ODpwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvcGd0YWJsZS5jLTE2OS1cXHRcXHQgICAgICBwdWRfdCAqcHVkcClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEzMTc9ZXh0ZXJuIHBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEzMjItI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTMyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyNC1cXHRcXHRcXHQgICAgIHB1ZF90ICpwdWRwKTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9Mjg0Mz1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODcxLVxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg3MjpcXHRvbGRwdWQgPSBwdWRwX2ludmFsaWRhdGUodm1hLCBhZGRyLCBwdWRwKTtcXG5tbS9odWdlX21lbW9yeS5jLTI4NzMtXFx0ZW50cnkgPSBwdWRfbW9kaWZ5KG9sZHB1ZCwgbmV3cHJvdCk7XFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYz0yMTI9cG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMjEtI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIyOnB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIyMy1cXHRcXHQgICAgICBwdWRfdCAqcHVkcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6NDkuMDk5MDA5Mjk1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ1ODI5Mzc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIEF1ZGl0IENoZWNrbGlzdCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0OiBsZXQncyB2ZXJpZnkgdGhlIHNjb3BlIG9mIHRoZXNlIGNoYW5nZXMuIFdlJ3JlIHRhbGtpbmcgYWJvdXQga2VybmVsIGNvZGUsIHNvIHRoZSB1c3VhbCBzdXNwZWN0cyBhcHBseS4gSSBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gYW55dGhpbmcgdGhhdCB0b3VjaGVzIGNvcmUgc3Vic3lzdGVtczogbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwgQlBGLCB0aGUgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgYW5kIHN5c3RlbSBjYWxsIGhhbmRsaW5nLiBUaG9zZSBhcmUgdGhlIGhpZ2gtcmlzayBhcmVhcy5cblxuTmV4dCB1cCwgcmVmYWN0b3JpbmdzIGFuZCBjb2RlIGNsZWFudXBzLiBUaGUgcnVsZSBpcyBjbGVhcjogKm5ldmVyKiBibGluZGx5IHRydXN0IGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZy5cIiBJZiB0aGVyZSdzIGFueSBtb2RpZmljYXRpb24gdG8gcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgSSBuZWVkIHRvIHRyZWF0IGl0IGFzIGEgcG90ZW50aWFsIGJ1ZyBzb3VyY2UuIFJlZmFjdG9yaW5ncyBjYW4gaW50cm9kdWNlIHN1YnRsZSwgZWFzaWx5IG1pc3NlZCByZWdyZXNzaW9ucy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRydWUgd2hlbiBtb2RpZnlpbmcgc3RydWN0dXJlcywgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuIElmIHRoZSBjb2RlICpjYW4qIGJlIHJlYWNoZWQgYW5kIGV4ZWN1dGVkLCBpdCdzIGdldHRpbmcgZnV6emVkLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHBvaW50OiAqcmVhY2hhYmlsaXR5IGlzIGtpbmcqLiBGdXp6aW5nIGlzIG9ubHkgZWZmZWN0aXZlIGlmIHRoZSBjb2RlICpjYW4qIGFjdHVhbGx5IHJ1biBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBpcyBhbWQ2NCwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzLlxuXG5TcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGF0IGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2Agd2hpY2gsIGl0IHNlZW1zLCBoYXMgYSBuZXcgaW1wbGVtZW50YXRpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZWAgdGhhdCByZXBsYWNlcyB0aGUgb25lIGluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLiBUaGVyZSBhcmUgYWxzbyBhcm02NCBjaGFuZ2VzLCBidXQgSSdtIHByaW1hcmlseSBjb25jZXJuZWQgd2l0aCB0aGUgZ2VuZXJpYyBjaGFuZ2UgdGhhdCdzIGluIGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3BndGFibGUuaGAuIFNpbmNlIGFtZDY0ICpkb2Vzbid0KiBkZWZpbmUgYF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAsIHRoaXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyB3aGF0IHdlJ2xsIGJlIHVzaW5nLlxuXG5UbyBjb25maXJtIHRoaXMsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgb24gYW1kNjQuIExldCdzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIHRoYXQgc3ltYm9sLCBhbmQgc2VlIHdoZXJlIHdlIGdvIGZyb20gdGhlcmUuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBuZXcgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgZXhpc3RpbmcgYW1kNjQgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6NTQuNTU3MzA1NTY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTU1MzAzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTEwMz1jb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5hcmNoL0tjb25maWctMTEwNS1cXG5hcmNoL0tjb25maWc6MTEwNjpjb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gvS2NvbmZpZy0xMTA3LVxcdGJvb2xcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0yPWNvbmZpZyBBUk02NFxcbi0tXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3NS1cXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9hcm02NC9LY29uZmlnOjE3NjpcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXFxuYXJjaC9hcm02NC9LY29uZmlnLTE3Ny1cXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTg3NT1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtODg1LVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjg4NjojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaC04ODctc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9MTUzND1zdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfZXN0YWJsaXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMTU0MS1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxNTQyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTE1NDMtc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlPTExMD1jb25maWcgUFBDX1RIUFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUtMTE0LSAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGU6MTE1OiAgICAgICBzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlLTExNi0gICAgICAgc2VsZWN0IEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTIGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWc9MTM9Y29uZmlnIFJJU0NWXFxuLS1cXG5hcmNoL3Jpc2N2L0tjb25maWctMTUyLVxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgTU1VXFxuYXJjaC9yaXNjdi9LY29uZmlnOjE1MzpcXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiA2NEJJVCBcXHUwMDI2XFx1MDAyNiBNTVVcXG5hcmNoL3Jpc2N2L0tjb25maWctMTU0LVxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfTUlOT1IgaWYgNjRCSVQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG4tLVxcbmFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTItXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gveDg2L0tjb25maWc6MjEzOlxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMjE0LVxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgICAgICAgICBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaD0yOTc9c3RhdGljIGlubGluZSBpbnQgcG1kX3RyYW5zX2h1Z2UocG1kX3QgcG1kKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTMwMS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg6MzAyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0zMDMtc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oPTEzNTc9c3RhdGljIGlubGluZSBwbWRfdCBwbWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzcwLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaDoxMzcxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaC0xMzcyLXN0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oPTEyMD1zdGF0aWMgaW5saW5lIGJvb2wgZGF4X2FsaWduX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuZHJpdmVycy9kYXgvZGF4LXByaXZhdGUuaC0xMjEte1xcbmRyaXZlcnMvZGF4L2RheC1wcml2YXRlLmg6MTIyOlxcdGlmIChhbGlnbiA9PSBQVURfU0laRSBcXHUwMDI2XFx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKSlcXG5kcml2ZXJzL2RheC9kYXgtcHJpdmF0ZS5oLTEyMy1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTEyMD1zdGF0aWMgdm1fZmF1bHRfdCBfX2Rldl9kYXhfcG1kX2ZhdWx0KHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMTYzLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jOjE2NDojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0xNjUtc3RhdGljIHZtX2ZhdWx0X3QgX19kZXZfZGF4X3B1ZF9mYXVsdChzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCxcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jPTIxMD1zdGF0aWMgdm1fZmF1bHRfdCBfX2Rldl9kYXhfcHVkX2ZhdWx0KHN0cnVjdCBkZXZfZGF4ICpkZXZfZGF4LFxcbi0tXFxuZHJpdmVycy9kYXgvZGV2aWNlLmMtMjE0LX1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYzoyMTU6I2VuZGlmIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbmRyaXZlcnMvZGF4L2RldmljZS5jLTIxNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE1PWludCBjb3B5X2h1Z2VfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdF9tbSwgc3RydWN0IG1tX3N0cnVjdCAqc3JjX21tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTgtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTk6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjAtdm9pZCBodWdlX3B1ZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2lzX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5MzojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC00OTQtaW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yNzEwPXN0YXRpYyBpbmxpbmUgcG1kX3QgZm9saW9fbWtfcG1kKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sIHBncHJvdF90IHBncHJvdClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0yNzE0LVxcbmluY2x1ZGUvbGludXgvbW0uaDoyNzE1OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvbW0uaC0yNzE2LS8qKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTI3MjY9c3RhdGljIGlubGluZSBwdWRfdCBmb2xpb19ta19wdWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywgcGdwcm90X3QgcGdwcm90KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTI3MjktfVxcbmluY2x1ZGUvbGludXgvbW0uaDoyNzMwOiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbmluY2x1ZGUvbGludXgvbW0uaC0yNzMxLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTEyMjU9c3RhdGljIGlubGluZSB2b2lkIHBtZHBfc2V0X3dycHJvdGVjdChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEyMzItI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX1NFVF9XUlBST1RFQ1RcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoxMjMzOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEyMzQtI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgcHVkcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTI0OC0jZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MTI0OTojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMjUwLSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MTMxNz1leHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyMS0jaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEzMjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgtMTMyMy1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0yMDg5PXN0YXRpYyBpbmxpbmUgaW50IHB1ZF93cml0ZShwdWRfdCBwdWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMDk2LSNpZiAhZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIHx8IFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaDoyMDk3OlxcdCFkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIwOTgtc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg9MjEwND1zdGF0aWMgaW5saW5lIGludCBwdWRfdHJhbnNfdW5zdGFibGUocHVkX3QgKnB1ZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxMDYtI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuaW5jbHVkZS9saW51eC9wZ3RhYmxlLmg6MjEwNzpcXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTIxMDgtXFx0cHVkX3QgcHVkdmFsID0gcHVkcF9nZXQocHVkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oPTIzMDU9c3RhdGljIGlubGluZSBjb25zdCBjaGFyICpwZ3RhYmxlX2xldmVsX3RvX3N0cihlbnVtIHBndGFibGVfbGV2ZWwgbGV2ZWwpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzQyLSNpZm5kZWYgaGFzX3RyYW5zcGFyZW50X3B1ZF9odWdlcGFnZVxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjIzNDM6I2RlZmluZSBoYXNfdHJhbnNwYXJlbnRfcHVkX2h1Z2VwYWdlKCkgSVNfQlVJTFRJTihDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0yMzQ0LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg9MzQ9ZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC0xMDMtXFx0XFx0VEhQX1NDQU5fRVhDRUVEX1NIQVJFRF9QVEUsXFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg6MTA0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oLTEwNS1cXHRcXHRUSFBfU1BMSVRfUFVELFxcbi0tXFxubW0vS2NvbmZpZz0xMDA5PWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xcbm1tL0tjb25maWctMTAxMC1cXHRkZWZfYm9vbCAoSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXFxcXG5tbS9LY29uZmlnOjEwMTE6XFx0XFx0IChaT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbm1tL0tjb25maWctMTAxMi1cXG4tLVxcbm1tL0tjb25maWc9MTAyNT1jb25maWcgQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXFxubW0vS2NvbmZpZy0xMDI2LVxcdGRlZl9ib29sIHlcXG5tbS9LY29uZmlnOjEwMjc6XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VfUEZOTUFQIFxcdTAwMjZcXHUwMDI2IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9LY29uZmlnLTEwMjgtXFxuLS1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM9MjgyPXN0YXRpYyB2b2lkIF9faW5pdCBwbWRfbGVhZl90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTI5OC1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6Mjk5OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy0zMDAtc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTQwNT1zdGF0aWMgdm9pZCBfX2luaXQgcHVkX2xlYWZfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy00MTktfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo0MjA6I2Vsc2UgIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy00MjEtc3RhdGljIHZvaWQgX19pbml0IHB1ZF9iYXNpY190ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzLCBpbnQgaWR4KSB7IH1cXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYz00MjM9c3RhdGljIHZvaWQgX19pbml0IHB1ZF9sZWFmX3Rlc3RzKHN0cnVjdCBwZ3RhYmxlX2RlYnVnX2FyZ3MgKmFyZ3MpIHsgfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo0MjQ6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTQyNS0jZWxzZSAgLyogIUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jPTkwNT1zdGF0aWMgdm9pZCBfX2luaXQgcG1kX3RocF90ZXN0cyhzdHJ1Y3QgcGd0YWJsZV9kZWJ1Z19hcmdzICphcmdzKVxcbi0tXFxubW0vZGVidWdfdm1fcGd0YWJsZS5jLTkzMy1cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmM6OTM0OiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05MzUtc3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncylcXG4tLVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTMtfVxcbm1tL2RlYnVnX3ZtX3BndGFibGUuYzo5NTQ6I2Vsc2UgIC8qICFDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2RlYnVnX3ZtX3BndGFibGUuYy05NTUtc3RhdGljIHZvaWQgX19pbml0IHB1ZF90aHBfdGVzdHMoc3RydWN0IHBndGFibGVfZGVidWdfYXJncyAqYXJncykgeyB9XFxubW0vZGVidWdfdm1fcGd0YWJsZS5jOjk1NjojZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cXG5tbS9kZWJ1Z192bV9wZ3RhYmxlLmMtOTU3LSNlbHNlICAvKiAhQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuLS1cXG5tbS9obW0uYz00MDM9c3RhdGljIGludCBobW1fdm1hX3dhbGtfcG1kKHBtZF90ICpwbWRwLFxcbi0tXFxubW0vaG1tLmMtNDc5LVxcbm1tL2htbS5jOjQ4MDojaWYgZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9obW0uYy00ODEtc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB1ZF90b19obW1fcGZuX2ZsYWdzKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNzQ5PUVYUE9SVF9TWU1CT0xfR1BMKHZtZl9pbnNlcnRfZm9saW9fcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jLTE3NTAtXFxubW0vaHVnZV9tZW1vcnkuYzoxNzUxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMTc1Mi1zdGF0aWMgcHVkX3QgbWF5YmVfcHVkX21rd3JpdGUocHVkX3QgcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTg2NT1FWFBPUlRfU1lNQk9MX0dQTCh2bWZfaW5zZXJ0X2ZvbGlvX3B1ZCk7XFxubW0vaHVnZV9tZW1vcnkuYzoxODY2OiNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTg2Ny1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTk1MD1pbnQgY29weV9odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICpkc3RfbW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKnNyY19tbSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjA2MS1cXG5tbS9odWdlX21lbW9yeS5jOjIwNjI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vaHVnZV9tZW1vcnkuYy0yMDYzLXZvaWQgdG91Y2hfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTIxMTE9dm9pZCBodWdlX3B1ZF9zZXRfYWNjZXNzZWQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsIHB1ZF90IG9yaWdfcHVkKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMTIyLX1cXG5tbS9odWdlX21lbW9yeS5jOjIxMjM6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vaHVnZV9tZW1vcnkuYy0yMTI0LVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yNzM0PWludCBjaGFuZ2VfaHVnZV9wbWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTI4NDEtICovXFxubW0vaHVnZV9tZW1vcnkuYzoyODQyOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0My1pbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0zMDMzPXNwaW5sb2NrX3QgKl9fcHVkX3RyYW5zX2h1Z2VfbG9jayhwdWRfdCAqcHVkLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMzA0My1cXG5tbS9odWdlX21lbW9yeS5jOjMwNDQ6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vaHVnZV9tZW1vcnkuYy0zMDQ1LWludCB6YXBfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMxMzI9dm9pZCBfX3NwbGl0X2h1Z2VfcHVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0zMTM1LX1cXG5tbS9odWdlX21lbW9yeS5jOjMxMzY6I2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vaHVnZV9tZW1vcnkuYy0zMTM3LVxcbi0tXFxubW0vbWFwcGluZ19kaXJ0eV9oZWxwZXJzLmM9MTQ4PXN0YXRpYyBpbnQgd3BfY2xlYW5fcHVkX2VudHJ5KHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYy0xNTAte1xcbm1tL21hcHBpbmdfZGlydHlfaGVscGVycy5jOjE1MTojaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9tYXBwaW5nX2RpcnR5X2hlbHBlcnMuYy0xNTItXFx0cHVkX3QgcHVkdmFsID0gcHVkcF9nZXQocHVkKTtcXG4tLVxcbm1tL21lbW9yeS5jPTY0MjE9c3RhdGljIHZtX2ZhdWx0X3QgY3JlYXRlX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNjQyMy0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFx0XFx0XFx0XFxcXFxcbm1tL21lbW9yeS5jOjY0MjQ6XFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9tZW1vcnkuYy02NDI1LVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVxcdTAwM2V2bWE7XFxuLS1cXG5tbS9tZW1vcnkuYz02NDM1PXN0YXRpYyB2bV9mYXVsdF90IHdwX2h1Z2VfcHVkKHN0cnVjdCB2bV9mYXVsdCAqdm1mLCBwdWRfdCBvcmlnX3B1ZClcXG4tLVxcbm1tL21lbW9yeS5jLTY0MzctI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNlxcdFxcdFxcdFxcXFxcXG5tbS9tZW1vcnkuYzo2NDM4OlxcdGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxubW0vbWVtb3J5LmMtNjQzOS1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbi0tXFxubW0vbWVtb3J5LmMtNjQ1NC1cXHRfX3NwbGl0X2h1Z2VfcHVkKHZtYSwgdm1mLVxcdTAwM2VwdWQsIHZtZi1cXHUwMDNlYWRkcmVzcyk7XFxubW0vbWVtb3J5LmM6NjQ1NTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2IENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxubW0vbWVtb3J5LmMtNjQ1Ni1cXHRyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7XFxuLS1cXG5tbS9tcmVtYXAuYz00Nzk9c3RhdGljIGlubGluZSBib29sIG1vdmVfbm9ybWFsX3B1ZChzdHJ1Y3QgcGFnZXRhYmxlX21vdmVfY29udHJvbCAqcG1jLFxcbi0tXFxubW0vbXJlbWFwLmMtNDg1LVxcbm1tL21yZW1hcC5jOjQ4NjojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQpXFxubW0vbXJlbWFwLmMtNDg3LXN0YXRpYyBib29sIG1vdmVfaHVnZV9wdWQoc3RydWN0IHBhZ2V0YWJsZV9tb3ZlX2NvbnRyb2wgKnBtYyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jPTE0MT1wbWRfdCBwbWRwX2h1Z2VfY2xlYXJfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTE1MS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYzoxNTI6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMTUzLXB1ZF90IHB1ZHBfaHVnZV9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjEyPXBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIwLSNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MjIxOiNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL3BndGFibGUtZ2VuZXJpYy5jLTIyMi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL3JtYXAuYz0xNzcxPXZvaWQgZm9saW9fYWRkX2ZpbGVfcm1hcF9wdWQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9ybWFwLmMtMTc3NC0jaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IFxcXFxcXG5tbS9ybWFwLmM6MTc3NTpcXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcbm1tL3JtYXAuYy0xNzc2LVxcdF9fZm9saW9fYWRkX2ZpbGVfcm1hcChmb2xpbywgcGFnZSwgSFBBR0VfUFVEX05SLCB2bWEsIFBHVEFCTEVfTEVWRUxfUFVEKTtcXG4tLVxcbm1tL3JtYXAuYz0xOTM5PXZvaWQgZm9saW9fcmVtb3ZlX3JtYXBfcHVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlLFxcbi0tXFxubW0vcm1hcC5jLTE5NDItI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubW0vcm1hcC5jOjE5NDM6XFx0ZGVmaW5lZChDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcXG5tbS9ybWFwLmMtMTk0NC1cXHRfX2ZvbGlvX3JlbW92ZV9ybWFwKGZvbGlvLCBwYWdlLCBIUEFHRV9QVURfTlIsIHZtYSwgUEdUQUJMRV9MRVZFTF9QVUQpO1xcbi0tXFxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTE0MzAtXFx0W0koVEhQX1NDQU5fRVhDRUVEX1NIQVJFRF9QVEUpXVxcdFxcdD0gXFxcInRocF9zY2FuX2V4Y2VlZF9zaGFyZV9wdGVcXFwiLFxcbm1tL3Ztc3RhdC5jOjE0MzE6I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxubW0vdm1zdGF0LmMtMTQzMi1cXHRbSShUSFBfU1BMSVRfUFVEKV1cXHRcXHRcXHQ9IFxcXCJ0aHBfc3BsaXRfcHVkXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6MzY6NTYuODcyODQxNjc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY2NzgxODAxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVGhpcyBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuIFRoZSBwYXRjaCBhZmZlY3RzIGEgcHJldHR5IGJyb2FkIHN3YXRoZSBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgcGFnZSB0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHk6IEFSTTY0LCBQb3dlclBDLCBSSVNDLVYsIGFuZCB4ODYsIGFsb25nIHdpdGggc29tZSBjb3JlIGBwZ3RhYmxlYCBoZWFkZXJzIGFuZCBnZW5lcmljIGNvZGUuIEl0IGludHJvZHVjZXMgYSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGVgIGZ1bmN0aW9uIGludG8gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCwgd2hpY2ggaXMgc2lnbmlmaWNhbnQuIFRoaXMgbWVhbnMgbG9naWMgdGhhdCB1c2VkIHRvIGJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpcyBub3cgY2VudHJhbGl6ZWQuIEl0IGFsc28gaW1wbGllcyBhIGZhaXIgYW1vdW50IG9mIHBvdGVudGlhbCBjcm9zcy1hcmNoaXRlY3R1cmUgYmVoYXZpb3IgdGhhdCBuZWVkcyBzY3J1dGlueS5cblxuVGhlIGludHJvZHVjdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlYCwgY291cGxlZCB3aXRoIHRoZSByZW1vdmFsIG9mIGFyY2gtc3BlY2lmaWMgdmVyc2lvbnMsIGp1bXBzIG91dC4gVGhpcyBnZW5lcmljIGZ1bmN0aW9uICppdHNlbGYqIGNvbnRhaW5zIGBWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSk7YCwgYSBjcml0aWNhbCBydW50aW1lIGFzc2VydGlvbi4gVGhpcyBpcyBhIHZlcnkgc3Ryb25nIGluZGljYXRvciwgZ2l2ZW4gdGhlIGZ1enppbmcgcnVsZXM6IFwiUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXCIgVGhlIGNoZWNrIHNwZWNpZmljYWxseSB0YXJnZXRzIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggY291bGQgYmUgdmVyeSBpbnRlcmVzdGluZyBmb3IgZnV6emluZy5cblxuVGhlIHJ1bGUgc2V0IHNwZWNpZmljYWxseSBjYWxscyBvdXQgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBgbW0vYCBhcyB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIHBhdGNoIHRvdWNoZXMgdGhhdCBkaXJlY3RvcnkgZGlyZWN0bHkuIFRoZSBmYWN0IHRoYXQgdGhlIGdlbmVyaWMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2Agd2l0aGluIGBjaGFuZ2VfaHVnZV9wdWRgIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGUgbmVlZCB0byBwYXkgYXR0ZW50aW9uIHRvIHRoYXQgYXJlYS4gVGhlIHVzZSBjYXNlIGlzIGBjaGFuZ2VfaHVnZV9wdWRgLCB3aGljaCBpcyBhIGtleSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS5cblxuR2l2ZW4gYWxsIG9mIHRoaXMsIEknbSBjb25maWRlbnQgd2UgbmVlZCB0byBmdXp6LiBUaGUgYFdvcnRoRnV6emluZ2AgZmxhZyBpcyBkZWZpbml0ZWx5IGB0cnVlYC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgZGV0YWlscyB0byBkZXRlcm1pbmUgdGhlIGBGb2N1c1N5bWJvbHNgIGFuZCBgRW5hYmxlQ29uZmlnc2AuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY2FsbHMgdG8gYHB1ZHBfaW52YWxpZGF0ZWAgYW5kIHNlZSBleGFjdGx5IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHdpdGhpbiBgbW0vaHVnZV9tZW1vcnkuY2AgYW5kIHNwZWNpZmljYWxseSBhcm91bmQgYGNoYW5nZV9odWdlX3B1ZGAuIFVuZGVyc3RhbmRpbmcgd2hhdCBjYWxscyB0aGF0IGZ1bmN0aW9uLCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZSBpcyBjcml0aWNhbCBmb3IgZWZmZWN0aXZlIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NDY3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjAyLjU0MDY2MzA5NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjUzNjI5NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX2h1Z2VfcHVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdlX21lbW9yeS5jPTI3MzQ9aW50IGNoYW5nZV9odWdlX3BtZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0Mi0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5tbS9odWdlX21lbW9yeS5jOjI4NDM6aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTI4NDQtXFx0XFx0ICAgIHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IG5ld3Byb3QsXFxuLS1cXG5tbS9tcHJvdGVjdC5jPTU3ND1zdGF0aWMgaW5saW5lIGxvbmcgY2hhbmdlX3B1ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbi0tXFxubW0vbXByb3RlY3QuYy02MTEtXFx0XFx0XFx0fSBlbHNlIHtcXG5tbS9tcHJvdGVjdC5jOjYxMjpcXHRcXHRcXHRcXHRyZXQgPSBjaGFuZ2VfaHVnZV9wdWQodGxiLCB2bWEsIHB1ZHAsXFxubW0vbXByb3RlY3QuYy02MTMtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgYWRkciwgbmV3cHJvdCwgY3BfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzowMi42NjYwMzA2OTZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDE4NTYwMjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBwdWRwX2ludmFsaWRhdGVgKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBgcHVkcF9pbnZhbGlkYXRlYCwgc28gSSdsbCBjaGVjayBpdHMgZGVmaW5pdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBBbHJpZ2h0LCBsb29rcyBsaWtlIGl0ICppcyogYSBub24tc3RhdGljIHN5bWJvbCwgd2hpY2ggbWVhbnMgaXQncyBleHBvcnRlZCBhbmQgcG90ZW50aWFsbHkgY2FsbGFibGUgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBHb29kLiBOb3csIGV4YW1pbmluZyB0aGUgY29kZSBibG9jaywgaXQncyBkZWZpbmVkIGNvbmRpdGlvbmFsbHk6IGl0IHVzZXMgYW4gYCNpZm5kZWYgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFYCBndWFyZCBhbmQgYW4gYCNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAuIEkgc2VlIGEgY2FsbCB0byBgZmx1c2hfcHVkX3RsYl9yYW5nZWAsIHRoYXQncyBhbiBpbXBvcnRhbnQgc2lnbmFsLiBBbmQgSSBzZWUgdGhhdCBgcHVkcF9pbnZhbGlkYXRlYCBpcyBjYWxsZWQgd2l0aGluIHRoZSBgY2hhbmdlX2h1Z2VfcHVkYCBmdW5jdGlvbiwgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBzbyBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUuXG5cbk5leHQsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBmb3IgeDg2XzY0L2FtZDY0IGFyY2hpdGVjdHVyZXMuIExldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbml0ZWx5IGEgcmVxdWlyZW1lbnQsIHRoYXQncyBjbGVhci4gQnV0IHRoZSBtb3JlIGNydWNpYWwgZGV0YWlsIGlzIHRoYXQgYENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBpcyBzZWxlY3RlZCBieSBgWDg2XzY0YCAob3IgcmF0aGVyIHdoZW4gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2VsZWN0ZWQpLiBUaGUgYXJjaGl0ZWN0dXJlIHBhcnQgaXMga2V5IGhlcmUuIFRvIGJlIHN1cmUgbGV0J3MgYWxzbyBleGFtaW5lIGBtbS9LY29uZmlnYCBhcm91bmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gVGhhdCBzaG91bGQgY2xlYXIgdGhpbmdzIHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzc4OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoxMC4wODQ1OTQyNjVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwNTgwMjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04MzI9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgzNC1cXG5tbS9LY29uZmlnOjgzNTptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzYtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODUzPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTgtXFxubW0vS2NvbmZpZzo4NTk6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODYwLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODY1LVxcbm1tL0tjb25maWc6ODY2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjctXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODc0LVxcbm1tL0tjb25maWc6ODc1OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODc2LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04ODI9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg5MS1cXG5tbS9LY29uZmlnOjg5MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODkzLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDEtXFxubW0vS2NvbmZpZzo5MDI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy05MDMtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDktXFxubW0vS2NvbmZpZzo5MTA6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkxMS1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTE3LVxcbm1tL0tjb25maWc6OTE4OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE5LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTI3PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzYtXFxubW0vS2NvbmZpZzo5Mzc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzOC1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ1LVxcbm1tL0tjb25maWc6OTQ2OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQ3LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTUzLVxcbm1tL0tjb25maWc6OTU0OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTUtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk2MS1cXG5tbS9LY29uZmlnOjk2MjpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk2My1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjEwLjE3NTE4MTIzM1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODE3MjcxNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgTWFrZWZpbGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtbS9wZ3RhYmxlLWdlbmVyaWMuY2AgaXMgYmVpbmcgY29tcGlsZWQuIEZpcnN0IHN0ZXA/IE5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2Ugb2YgdHJ1dGg6IHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBidWlsZCBydWxlcyBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gcmVzaWRlLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoaWNoIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCB1bHRpbWF0ZWx5LCB3aGljaCBvYmplY3QgZmlsZXMgYXJlIGdlbmVyYXRlZCBmcm9tIGBwZ3RhYmxlLWdlbmVyaWMuY2AuIFRoaXMgaXMgZXNzZW50aWFsIGZvciB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBidWlsZCBwcm9jZXNzIG9yIGlkZW50aWZ5aW5nIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBiYXNlLiBMZXQncyBzZWUgd2hhdCB0aGUgTWFrZWZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkyNzgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoxMS45OTI0NzE1ODhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTc4OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBndGFibGUtZ2VuZXJpY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTM5LVxcdFxcdFxcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxcXFxubW0vTWFrZWZpbGU6NDA6XFx0XFx0XFx0ICAgcGd0YWJsZS1nZW5lcmljLm8gcm1hcC5vIHZtYWxsb2MubyB2bWEubyB2bWFfZXhlYy5vXFxubW0vTWFrZWZpbGUtNDEtXFxuLS1cXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yLS8qXFxubW0vcGd0YWJsZS1nZW5lcmljLmM6MzogKiAgbW0vcGd0YWJsZS1nZW5lcmljLmNcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy00LSAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjEyLjA4MDA1NDUzM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDM3MTU4NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSBDb25maWd1cmF0aW9uIGFuZCBDYWxsZXJzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjb25maXJtIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uIGZvciBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSBhbmQgdGhlIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgb3B0aW9uLiBSaWdodCwgaXQgbG9va3MgbGlrZSBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNTVVgLiBPbiBhbiB4ODZfNjQgc3lzdGVtLCB3aGljaCBJJ20gYXNzdW1pbmcgd2UncmUgZGVhbGluZyB3aXRoIHNpbmNlIGl0J3MgYW4gYW1kNjQgc2V0dXAsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBnZXRzIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgaWYgYFg4Nl82NGAgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhpcyB3aG9sZSBjb2RlIHBhdGggZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMuIFRoYXQncyBnb29kIHRvIGtub3cuXG5cbk5vdywgSSB3YW50IHRvIHNlZSB3aGVyZSB0aGlzIGlzIHVzZWQsIHdobyBjYWxscyBpdCwgYW5kIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucyBvciBjYWxsZXJzLiBJJ2xsIG1vdmUgb24gdG8gYG1tL2h1Z2VfbWVtb3J5LmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBmb3Igd2hlcmUgYHB1ZHBfaW52YWxpZGF0ZWAgaXMgY2FsbGVkLiBBaCwgdGhlcmUgaXQgaXMhIGBjaGFuZ2VfaHVnZV9wdWRgIGNhbGxzIGBwdWRwX2ludmFsaWRhdGVgLiBJIHNlZSB0aGF0IGBjaGFuZ2VfaHVnZV9wdWRgIGlzIGluIHR1cm4gY2FsbGVkIHdpdGhpbiBgbW0vbXByb3RlY3QuY2AgZnJvbSBgY2hhbmdlX3B1ZF9yYW5nZWAuIEFuZCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgYGNoYW5nZV9wdWRfcmFuZ2VgIGlzIHBhcnQgb2YgYGNoYW5nZV9wcm90ZWN0aW9uX3JhbmdlYCwgd2hpY2ggaXMgdXNlZCBieSBgbXByb3RlY3RfZml4dXBgLCBgZG9fbXByb3RlY3RfcGtleWAgYW5kIHVsdGltYXRlbHksIGBzeXNfbXByb3RlY3RgLiBUaGlzIGltcGxpZXMgdGhhdCBwcm90ZWN0aW9uIG1vZGlmaWNhdGlvbnMgb24gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcywgc3BlY2lmaWNhbGx5IGF0IHRoZSBQVUQgbGV2ZWwsIHRyaWdnZXIgYGNoYW5nZV9odWdlX3B1ZGAuXG5cbk5leHQsIEknbGwgYnJvYWRlbiBteSBzZWFyY2guIEkgd2FudCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBjaGVjayB0byBzZWUgaWYgYHB1ZHBfaW52YWxpZGF0ZWAgb3IgYGNoYW5nZV9odWdlX3B1ZGAgYXJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGUgYmFzZS4gR290dGEgYmUgdGhvcm91Z2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjM3LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjE1LjUxNzIxNjAzM1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NTYwMDkxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdWRwX2ludmFsaWRhdGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg9MTQyMD1leHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaC0xNDIyLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFVEUF9JTlZBTElEQVRFXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmg6MTQyMzpleHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmgtMTQyNC1cXHRcXHRcXHQgICAgIHB1ZF90ICpwdWRwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9wZ3RhYmxlLmM9MTU1PXBtZF90IHBtZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjctXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYzoxNjg6cHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3BndGFibGUuYy0xNjktXFx0XFx0ICAgICAgcHVkX3QgKnB1ZHApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaD0xMzE3PWV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BndGFibGUuaC0xMzIyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oOjEzMjM6ZXh0ZXJuIHB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmluY2x1ZGUvbGludXgvcGd0YWJsZS5oLTEzMjQtXFx0XFx0XFx0ICAgICBwdWRfdCAqcHVkcCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI4NDM9aW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg3MS1cXHQgKi9cXG5tbS9odWdlX21lbW9yeS5jOjI4NzI6XFx0b2xkcHVkID0gcHVkcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcHVkcCk7XFxubW0vaHVnZV9tZW1vcnkuYy0yODczLVxcdGVudHJ5ID0gcHVkX21vZGlmeShvbGRwdWQsIG5ld3Byb3QpO1xcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmM9MjEyPXBtZF90IHBtZHBfaW52YWxpZGF0ZV9hZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxubW0vcGd0YWJsZS1nZW5lcmljLmMtMjIxLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL3BndGFibGUtZ2VuZXJpYy5jOjIyMjpwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5tbS9wZ3RhYmxlLWdlbmVyaWMuYy0yMjMtXFx0XFx0ICAgICAgcHVkX3QgKnB1ZHApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjE3Ljg5MjgyMTg4MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODU4NzczNjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGNoYW5nZV9odWdlX3B1ZGAgQ2FsbGVycyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBmaXJzdCBvcmRlciBvZiBidXNpbmVzcyBpcyBkZWZpbml0ZWx5IHRvIGF1ZGl0IHRoZSBjYWxscyB0byB0aGF0IGBjaGFuZ2VfaHVnZV9wdWRgIGZ1bmN0aW9uLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mICp3aG8qIGlzIHVzaW5nIGl0IGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKmhvdyogdGhleSdyZSB1c2luZyBpdC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGZpbmRpbmcgZXZlcnkgc2luZ2xlIGluc3RhbmNlIG9mIHRoZSBmdW5jdGlvbiBjYWxsOyBpdCdzIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHRzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBtb2RpZmljYXRpb24gd2l0aGluIGEgY29udHJvbGxlZCBlbnZpcm9ubWVudCwgb3IgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyBpbnZva2VkIGZyb20gc29tZSBkZWVwbHkgbmVzdGVkLCBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoPyBUaGF0J3Mgd2hhdCBJIHJlYWxseSBuZWVkIHRvIGtub3cuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZ2V0IGEgYmFzZWxpbmUgdW5kZXJzdGFuZGluZy4gVGhpcyBoZWxwcyBtZSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QgdGhpcyBmdW5jdGlvbiBjYW4gbWFrZSBhbmQgaG93IGl0cyBpbXBsZW1lbnRhdGlvbiBtYXkgYWZmZWN0IHRoZSBsYXJnZXIgc3lzdGVtLCBhbmQgYWxsb3dzIG1lIHRvIGJlZ2luIHRvIGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyBhbnkgY2hhbmdlcyB3aWxsIHJpcHBsZSBvdXR3YXJkcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExMTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoxOS43NTE1OTk0OTdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDIzNTQ3OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2hhbmdlX2h1Z2VfcHVkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ4Mz1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2lzX2h1Z2UocHVkX3QgcHVkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNDkzLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5NDppbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTQ5NS1cXHRcXHQgICAgcHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgbmV3cHJvdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTQ5OD1zdGF0aWMgaW5saW5lIGludFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjQ5OTpjaGFuZ2VfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNTAwLVxcdFxcdHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHBncHJvdF90IG5ld3Byb3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD03OTI9c3RhdGljIGlubGluZSB2b2lkIF9fc3BsaXRfaHVnZV9wdWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHB1ZF90ICpwdWQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC03OTYtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Nzk3OnN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTc5OC1cXHRcXHRcXHRcXHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkcCxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MjczND1pbnQgY2hhbmdlX2h1Z2VfcG1kKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yODQyLSNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxcbm1tL2h1Z2VfbWVtb3J5LmM6Mjg0MzppbnQgY2hhbmdlX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2VfbWVtb3J5LmMtMjg0NC1cXHRcXHQgICAgcHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdwcm90X3QgbmV3cHJvdCxcXG4tLVxcbm1tL21wcm90ZWN0LmM9NTc0PXN0YXRpYyBpbmxpbmUgbG9uZyBjaGFuZ2VfcHVkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tcHJvdGVjdC5jLTYxMS1cXHRcXHRcXHR9IGVsc2Uge1xcbm1tL21wcm90ZWN0LmM6NjEyOlxcdFxcdFxcdFxcdHJldCA9IGNoYW5nZV9odWdlX3B1ZCh0bGIsIHZtYSwgcHVkcCxcXG5tbS9tcHJvdGVjdC5jLTYxMy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBhZGRyLCBuZXdwcm90LCBjcF9mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjIxLjk1Mzk2MzcxN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDc3NDMwMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlIE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGZ1bmN0aW9ucyBgcHVkcF9pbnZhbGlkYXRlYCBhbmQgYGNoYW5nZV9odWdlX3B1ZGAuIEkgc2VlIHRoYXQgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgaXMgYW1kNjQgYW5kIHRoYXQgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBsaWVzIHdpdGhpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGlzIGlzIHBhcnRpY3VsYXJseSByZWxldmFudCBiZWNhdXNlIHRoYXQgZmlsZSBjb21waWxlcyBmb3IgYW1kNjQgKndoZW4qIGBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgaXMgZW5hYmxlZCwgd2hpY2ggaW4gdHVybiBpcyBsaW5rZWQgdG8gYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC5cblxuTm93LCBJJ20gbm90aW5nIHRoYXQgYHB1ZHBfaW52YWxpZGF0ZWAgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggcGFnZSB0YWJsZSBlbnRyeSBtYW5pcHVsYXRpb24gYW5kIFRMQiBpbnZhbGlkYXRpb24uIEl0IGNvbnRhaW5zIGBWTV9XQVJOX09OX09OQ0UoIXB1ZF9wcmVzZW50KCpwdWRwKSlgLCB3aGljaCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gUnVudGltZSBhc3NlcnRpb25zIGxpa2UgdGhpcyBvZnRlbiBpbmRpY2F0ZSBhcmVhcyB0aGF0IGFyZSBwcm9uZSB0byBzdWJ0bGUgYnVncyBvciBjb3JuZXIgY2FzZXMsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggcG90ZW50aWFsbHkgY29tcGxleCBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLiBHaXZlbiB0aGUgcHJlc2VuY2Ugb2YgYGNoYW5nZV9odWdlX3B1ZGAsIHdoaWNoIEkgdW5kZXJzdGFuZCBoYW5kbGVzIGh1Z2UgcGFnZSBvcGVyYXRpb25zLCBpdCdzIGNsZWFyIHRoZXNlIGFyZSBpbnRlcmNvbm5lY3RlZC5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgSSdtIGdvaW5nIHRvIGZsYWcgdGhpcyBhcyBcIldvcnRoRnV6emluZ1wiLiBUaGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBvcGVyYXRpb25zIGxpa2UgYGNoYW5nZV9odWdlX3B1ZGAgaXMgc3VmZmljaWVudGx5IGhpZ2guIFRoZSBrZXkgZWxlbWVudHMgdG8gdHJhY2sgYXJlIGRlZmluaXRlbHkgYHB1ZHBfaW52YWxpZGF0ZWAsIGBjaGFuZ2VfaHVnZV9wdWRgLCBhbmQgdGhlIHVuZGVybHlpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBjb25maWd1cmF0aW9uLlxuXG5Ob3csIGxldCBtZSBhc3NlbWJsZSB0aGUgSlNPTiBvdXRwdXQgZm9yIGBzZXQtcmVzdWx0c2AuIFRoZSBzdHJ1Y3R1cmUgaXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlXG4qICAgYEZvY3VzU3ltYm9sc2A6IFxcW1wicHVkcFxcX2ludmFsaWRhdGVcIiwgXCJjaGFuZ2VcXF9odWdlXFxfcHVkXCJdXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBcXFtcIlRSQU5TUEFSRU5UXFxfSFVHRVBBR0VcIl1cbiogICBgUmVhc29uaW5nYDogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgICh1c2VkIGJ5IHg4Ni9hbWQ2NCB3aGVuIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXQgUFVEIGxldmVsIGFyZSBzdXBwb3J0ZWQpIHJlcGxhY2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1vZGlmaWVzIHBhZ2UgdGFibGUgaGFuZGxpbmcgYW5kIGluY2x1ZGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoYFZNX1dBUk5fT05fT05DRWApIHJlYWNoYWJsZSBkdXJpbmcgaHVnZSBQVUQgb3BlcmF0aW9ucyBzdWNoIGFzIGBjaGFuZ2VfaHVnZV9wdWQoKWAgb24gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcy5cIlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgaW5mb3JtYXRpb24gYXNzZW1ibGVkLCBJJ20gcmVhZHkgdG8gaW52b2tlIGBzZXQtcmVzdWx0c2AuIFRoaXMgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGRldGFpbCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFuZCBmdXp6aW5nIGVmZm9ydHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxOTgyLCJPdXRwdXRUb2tlbnMiOjE0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzoyNi40MzEzOTc2MjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MzM0MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicHVkcF9pbnZhbGlkYXRlXCIsXG4gICAgXCJjaGFuZ2VfaHVnZV9wdWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiBwdWRwX2ludmFsaWRhdGUoKSBpbiBtbS9wZ3RhYmxlLWdlbmVyaWMuYyAocmVwbGFjaW5nIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb24geDg2IGFuZCByaXNjdiksIHdoaWNoIGlzIHVzZWQgb24gYW1kNjQgd2hlbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGF0IFBVRCBsZXZlbCBhcmUgZW5hYmxlZC4gVGhpcyB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBhbmQgaW5jbHVkZXMgcnVudGltZSBhc3NlcnRpb25zIChWTV9XQVJOX09OX09OQ0UpIGluIHJlYWNoYWJsZSBwYXRocyBleGVjdXRlZCBieSBjaGFuZ2VfaHVnZV9wdWQoKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInB1ZHBfaW52YWxpZGF0ZVwiLFxuICAgIFwiY2hhbmdlX2h1Z2VfcHVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgcHVkcF9pbnZhbGlkYXRlKCkgaW4gbW0vcGd0YWJsZS1nZW5lcmljLmMgKHJlcGxhY2luZyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9uIHg4NiBhbmQgcmlzY3YpLCB3aGljaCBpcyB1c2VkIG9uIGFtZDY0IHdoZW4gdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhdCBQVUQgbGV2ZWwgYXJlIGVuYWJsZWQuIFRoaXMgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGluY2x1ZGVzIHJ1bnRpbWUgYXNzZXJ0aW9ucyAoVk1fV0FSTl9PTl9PTkNFKSBpbiByZWFjaGFibGUgcGF0aHMgZXhlY3V0ZWQgYnkgY2hhbmdlX2h1Z2VfcHVkKCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjI2LjU3NDg0MTI2NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxNjUxMzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA5VDExOjM3OjI2LjU3NTMzNTU2N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1MTYwMTUxNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IG1hbmlwdWxhdGUgYXJjaGl0ZWN0dXJhbCBwYWdlIHRhYmxlIGVudHJpZXMgKFBVRC9QTUQvUFRFIGJpdC1mbGFncywgcGFnZSB0YWJsZSBlc3RhYmxpc2htZW50LCBhbmQgVExCIGludmFsaWRhdGlvbikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlLCBhbHRlciBzdHJ1Y3QgcGFkZGluZy9pbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBjb3VsZCBiZSBldmFsdWF0ZWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL2RlYnVnIGJ1aWxkcyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQ4M2Q5YzNmZWI1MWNlN2E0ZjZmMTMzOTA4YTZkYjAxZmM2ZTc4OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDkgMTE6MzY6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGI1YTUxYjBlZjk0NDAuLjhhN2NhMTg2MzU5NWEgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTE3Myw2ICsxNzMsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVEhSRUFEX1NUUlVDVF9XSElURUxJU1RcbiBcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBQ0VIT09LXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4rXHRzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRCBpZiBQQUdFX1NJWkVfNEtCXG4gXHRzZWxlY3QgSEFWRV9BUkNIX1ZNQVBfU1RBQ0tcbiBcdHNlbGVjdCBIQVZFX0FSTV9TTUNDQ1xuIFx0c2VsZWN0IEhBVkVfQVNNX01PRFZFUlNJT05TXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggNjAwMDkwNWEyZTg2NS4uZmRjMzM4OTcwOTM0ZCAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTI0MywxOCArMjQzLDYgQEAgc3RhdGljIGlubGluZSBwdGVfdCBzZXRfcHRlX2JpdChwdGVfdCBwdGUsIHBncHJvdF90IHByb3QpXG4gXHRyZXR1cm4gcHRlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHBtZF90IGNsZWFyX3BtZF9iaXQocG1kX3QgcG1kLCBwZ3Byb3RfdCBwcm90KVxuLXtcbi1cdHBtZF92YWwocG1kKSBcdTAwMjY9IH5wZ3Byb3RfdmFsKHByb3QpO1xuLVx0cmV0dXJuIHBtZDtcbi19XG4tXG4tc3RhdGljIGlubGluZSBwbWRfdCBzZXRfcG1kX2JpdChwbWRfdCBwbWQsIHBncHJvdF90IHByb3QpXG4te1xuLVx0cG1kX3ZhbChwbWQpIHw9IHBncHJvdF92YWwocHJvdCk7XG4tXHRyZXR1cm4gcG1kO1xuLX1cbi1cbiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlX25vdm1hKHB0ZV90IHB0ZSlcbiB7XG4gXHRwdGUgPSBzZXRfcHRlX2JpdChwdGUsIF9fcGdwcm90KFBURV9XUklURSkpO1xuQEAgLTYxOSwxMSArNjA3LDEzIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21raHVnZShwbWRfdCBwbWQpXG4gfVxuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QTURfUEZOTUFQXG4tI2RlZmluZSBwbWRfc3BlY2lhbChwdGUpXHQoISEoKHBtZF92YWwocHRlKSBcdTAwMjYgUFRFX1NQRUNJQUwpKSlcbi1zdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKVxuLXtcbi1cdHJldHVybiBzZXRfcG1kX2JpdChwbWQsIF9fcGdwcm90KFBURV9TUEVDSUFMKSk7XG4tfVxuKyNkZWZpbmUgcG1kX3NwZWNpYWwocG1kKVx0cHRlX3NwZWNpYWwocG1kX3B0ZShwbWQpKVxuKyNkZWZpbmUgcG1kX21rc3BlY2lhbChwbWQpXHRwdGVfcG1kKHB0ZV9ta3NwZWNpYWwocG1kX3B0ZShwbWQpKSlcbisjZW5kaWZcbitcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxuKyNkZWZpbmUgcHVkX3NwZWNpYWwocHVkKVx0cHRlX3NwZWNpYWwocHVkX3B0ZShwdWQpKVxuKyNkZWZpbmUgcHVkX21rc3BlY2lhbChwdWQpXHRwdGVfcHVkKHB0ZV9ta3NwZWNpYWwocHVkX3B0ZShwdWQpKSlcbiAjZW5kaWZcbiBcbiAjZGVmaW5lIF9fcG1kX3RvX3BoeXMocG1kKVx0X19wdGVfdG9fcGh5cyhwbWRfcHRlKHBtZCkpXG5AQCAtNjM0LDggKzYyNCwxNSBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZF9ta3NwZWNpYWwocG1kX3QgcG1kKVxuICNkZWZpbmUgcHVkX3lvdW5nKHB1ZClcdFx0cHRlX3lvdW5nKHB1ZF9wdGUocHVkKSlcbiAjZGVmaW5lIHB1ZF9ta3lvdW5nKHB1ZClcdHB0ZV9wdWQocHRlX21reW91bmcocHVkX3B0ZShwdWQpKSlcbiAjZGVmaW5lIHB1ZF9ta3dyaXRlX25vdm1hKHB1ZClcdHB0ZV9wdWQocHRlX21rd3JpdGVfbm92bWEocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta3dyaXRlKHB1ZClcdHB1ZF9ta3dyaXRlX25vdm1hKHB1ZClcbiAjZGVmaW5lIHB1ZF9ta3ZhbGlkX2socHVkKVx0cHRlX3B1ZChwdGVfbWt2YWxpZF9rKHB1ZF9wdGUocHVkKSkpXG4gI2RlZmluZSBwdWRfd3JpdGUocHVkKVx0XHRwdGVfd3JpdGUocHVkX3B0ZShwdWQpKVxuKyNkZWZpbmUgcHVkX2RpcnR5KHB1ZClcdFx0cHRlX2RpcnR5KHB1ZF9wdGUocHVkKSlcbisjZGVmaW5lIHB1ZF93cnByb3RlY3QocHVkKVx0cHRlX3B1ZChwdGVfd3Jwcm90ZWN0KHB1ZF9wdGUocHVkKSkpXG4rI2RlZmluZSBwdWRfbWtkaXJ0eShwdWQpXHRwdGVfcHVkKHB0ZV9ta2RpcnR5KHB1ZF9wdGUocHVkKSkpXG4rI2RlZmluZSBwdWRfbWtvbGQocHVkKVx0XHRwdGVfcHVkKHB0ZV9ta29sZChwdWRfcHRlKHB1ZCkpKVxuKyNkZWZpbmUgcHVkX21raW52YWxpZChwdWQpXHRwdGVfcHVkKHB0ZV9ta2ludmFsaWQocHVkX3B0ZShwdWQpKSlcbisjZGVmaW5lIHB1ZF9ta2NsZWFuKHB1ZClcdHB0ZV9wdWQocHRlX21rY2xlYW4ocHVkX3B0ZShwdWQpKSlcbiBcbiBzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9ta2h1Z2UocHVkX3QgcHVkKVxuIHtcbkBAIC04ODYsNiArODgzLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpXG4gI2RlZmluZSBwdWRfdXNlcihwdWQpXHRcdHB0ZV91c2VyKHB1ZF9wdGUocHVkKSlcbiAjZGVmaW5lIHB1ZF91c2VyX2V4ZWMocHVkKVx0cHRlX3VzZXJfZXhlYyhwdWRfcHRlKHB1ZCkpXG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4rc3RhdGljIGlubGluZSBpbnQgcHVkX3RyYW5zX2h1Z2UocHVkX3QgcHVkKVxuK3tcbitcdHJldHVybiBwdWRfcHJlc2VudChwdWQpIFx1MDAyNlx1MDAyNiAhcHVkX3RhYmxlKF9fcHVkKHB1ZF92YWwocHVkKSB8IFBURV9WQUxJRCkpO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sNF9lbmFibGVkKHZvaWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQpXG5AQCAtMTI1Miw2ICsxMjU2LDExIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kX21vZGlmeShwbWRfdCBwbWQsIHBncHJvdF90IG5ld3Byb3QpXG4gXHRyZXR1cm4gcHRlX3BtZChwdGVfbW9kaWZ5KHBtZF9wdGUocG1kKSwgbmV3cHJvdCkpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHB1ZF90IHB1ZF9tb2RpZnkocHVkX3QgcHVkLCBwZ3Byb3RfdCBuZXdwcm90KVxuK3tcbitcdHJldHVybiBwdGVfcHVkKHB0ZV9tb2RpZnkocHVkX3B0ZShwdWQpLCBuZXdwcm90KSk7XG4rfVxuK1xuIGV4dGVybiBpbnQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3ooc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwdGVwLFxuIFx0XHRcdFx0XHQgcHRlX3QgZW50cnksIGludCBkaXJ0eSxcbkBAIC0xMjc2LDYgKzEyODUsMTYgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX0FSQ0hfU1VQUE9SVFNfUFVEX1BGTk1BUFxuK3N0YXRpYyBpbmxpbmUgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdWRfdCAqcHVkcCxcbitcdFx0XHRcdFx0cHVkX3QgZW50cnksIGludCBkaXJ0eSlcbit7XG4rXHRyZXR1cm4gX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3NfYW55c3oodm1hLCBhZGRyZXNzLCAocHRlX3QgKilwdWRwLFxuK1x0XHRcdFx0XHQgICAgIHB1ZF9wdGUoZW50cnkpLCBkaXJ0eSwgUFVEX1NJWkUpO1xuK31cbisjZW5kaWZcbitcbiAjaWZkZWYgQ09ORklHX1BBR0VfVEFCTEVfQ0hFQ0tcbiBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX3VzZXJfYWNjZXNzaWJsZV9wYWdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbiB7XG5AQCAtMTM1MCw2ICsxMzY5LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwbWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIH1cbiAjZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFIHx8IENPTkZJR19BUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORyAqL1xuIFxuKyNpZmRlZiBDT05GSUdfQVJDSF9TVVBQT1JUU19QVURfUEZOTUFQXG4rc3RhdGljIGlubGluZSBib29sIHB1ZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHApXG4re1xuK1x0cmV0dXJuIF9fcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyh2bWEsIGFkZHJlc3MsIChwdGVfdCAqKXB1ZHApO1xuK31cbisjZW5kaWZcbitcbiBzdGF0aWMgaW5saW5lIHB0ZV90IF9fcHRlcF9nZXRfYW5kX2NsZWFyX2FueXN6KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdFx0XHQgICAgICAgcHRlX3QgKnB0ZXAsXG5AQCAtMTUxMiw2ICsxNTM5LDE1IEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuK3N0YXRpYyBpbmxpbmUgcHVkX3QgcHVkcF9lc3RhYmxpc2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZClcbit7XG4rXHRwYWdlX3RhYmxlX2NoZWNrX3B1ZF9zZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyZXNzLCBwdWRwLCBwdWQpO1xuK1x0cmV0dXJuIF9fcHVkKHhjaGdfcmVsYXhlZChcdTAwMjZwdWRfdmFsKCpwdWRwKSwgcHVkX3ZhbChwdWQpKSk7XG4rfVxuKyNlbmRpZlxuK1xuIC8qXG4gICogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5OlxuICAqXHRiaXRzIDAtMTpcdHByZXNlbnQgKG11c3QgYmUgemVybylcbkBAIC0xNTg2LDYgKzE2MjIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX21tdV9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiAjZGVmaW5lIHVwZGF0ZV9tbXVfY2FjaGUodm1hLCBhZGRyLCBwdGVwKSBcXFxuIFx0dXBkYXRlX21tdV9jYWNoZV9yYW5nZShOVUxMLCB2bWEsIGFkZHIsIHB0ZXAsIDEpXG4gI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlX3BtZCh2bWEsIGFkZHJlc3MsIHBtZCkgZG8geyB9IHdoaWxlICgwKVxuKyNkZWZpbmUgdXBkYXRlX21tdV9jYWNoZV9wdWQodm1hLCBhZGRyZXNzLCBwdWQpIGRvIHsgfSB3aGlsZSAoMClcbiBcbiAjaWZkZWYgQ09ORklHX0FSTTY0X1BBX0JJVFNfNTJcbiAjZGVmaW5lIHBoeXNfdG9fdHRicihhZGRyKVx0KCgoYWRkcikgfCAoKGFkZHIpIFx1MDAzZVx1MDAzZSA0NikpIFx1MDAyNiBUVEJSX0JBRERSX01BU0tfNTIpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Jvb2szcy82NC9wZ3RhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuaW5kZXggZjRkYjdkN2ZiZDVjNi4uNTVkMzNjNTUzN2YxMyAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ib29rM3MvNjQvcGd0YWJsZS5oXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vYm9vazNzLzY0L3BndGFibGUuaFxuQEAgLTE0MTksNiArMTQxOSw3IEBAIHN0YXRpYyBpbmxpbmUgcGd0YWJsZV90IHBndGFibGVfdHJhbnNfaHVnZV93aXRoZHJhdyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BNRFBfSU5WQUxJREFURVxuIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgICAgIHBtZF90ICpwbWRwKTtcbisjZGVmaW5lIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuIGV4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA0MGIxZWQ0ZjNlYTg5Li4zMjdmYTM3ODAzMmI3IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTE1OSw5ICsxMTU5LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbWtpbnZhbGlkKHB1ZF90IHB1ZClcbiBcdHJldHVybiBfX3B1ZChwdWRfdmFsKHB1ZCkgXHUwMDI2IH4oX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1BST1RfTk9ORSkpO1xuIH1cbiBcbi1leHRlcm4gcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdFx0ICAgICBwdWRfdCAqcHVkcCk7XG4tXG4gc3RhdGljIGlubGluZSBwdWRfdCBwdWRfbW9kaWZ5KHB1ZF90IHB1ZCwgcGdwcm90X3QgbmV3cHJvdClcbiB7XG4gXHRyZXR1cm4gcHRlX3B1ZChwdGVfbW9kaWZ5KHB1ZF9wdGUocHVkKSwgbmV3cHJvdCkpO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vcGd0YWJsZS5jIGIvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcbmluZGV4IDljNDQyN2QwYjE4NzQuLjE1NmUzODVlN2RiNDQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L21tL3BndGFibGUuY1xuKysrIGIvYXJjaC9yaXNjdi9tbS9wZ3RhYmxlLmNcbkBAIC0xNTQsMTUgKzE1NCw2IEBAIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gcG1kO1xuIH1cbiBcbi1wdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi1cdFx0ICAgICAgcHVkX3QgKnB1ZHApXG4te1xuLVx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuLVx0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4tXG4tXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcbi1cdHJldHVybiBvbGQ7XG4tfVxuICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi9cbiBcbiBwdGVfdCBwdGVfbWt3cml0ZShwdGVfdCBwdGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZDVmNDkxN2MxZWRjYi4uOTcwNTFjMDIzODVlOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTM4Nyw5ICsxMzg3LDYgQEAgc3RhdGljIGlubGluZSBwdWRfdCBwdWRwX2VzdGFibGlzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBleHRlcm4gcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kcCk7XG4gXG4tcHVkX3QgcHVkcF9pbnZhbGlkYXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4tXHRcdCAgICAgIHB1ZF90ICpwdWRwKTtcbi1cbiAvKlxuICAqIFBhZ2UgdGFibGUgcGFnZXMgYXJlIHBhZ2UtYWxpZ25lZC4gIFRoZSBsb3dlciBoYWxmIG9mIHRoZSB0b3BcbiAgKiBsZXZlbCBpcyB1c2VkIGZvciB1c2Vyc3BhY2UgYW5kIHRoZSB0b3AgaGFsZiBmb3IgdGhlIGtlcm5lbC5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbmluZGV4IGNiMDNmNWEyYjI0MzMuLjA5NDU5MDg2MzFkYzUgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbisrKyBiL2FyY2gveDg2L21tL3BndGFibGUuY1xuQEAgLTUxOSwxOCArNTE5LDYgQEAgcG1kX3QgcG1kcF9pbnZhbGlkYXRlX2FkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gfVxuICNlbmRpZlxuIFxuLSNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2IFxcXG4tXHRkZWZpbmVkKENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxuLXB1ZF90IHB1ZHBfaW52YWxpZGF0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLVx0XHQgICAgIHB1ZF90ICpwdWRwKVxuLXtcbi1cdFZNX1dBUk5fT05fT05DRSghcHVkX3ByZXNlbnQoKnB1ZHApKTtcbi1cdHB1ZF90IG9sZCA9IHB1ZHBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHVkcCwgcHVkX21raW52YWxpZCgqcHVkcCkpO1xuLVx0Zmx1c2hfcHVkX3RsYl9yYW5nZSh2bWEsIGFkZHJlc3MsIGFkZHJlc3MgKyBIUEFHRV9QVURfU0laRSk7XG4tXHRyZXR1cm4gb2xkO1xuLX1cbi0jZW5kaWZcbi1cbiAvKipcbiAgKiByZXNlcnZlX3RvcF9hZGRyZXNzIC0gUmVzZXJ2ZSBhIGhvbGUgaW4gdGhlIHRvcCBvZiB0aGUga2VybmVsIGFkZHJlc3Mgc3BhY2VcbiAgKiBAcmVzZXJ2ZTogU2l6ZSBvZiBob2xlIHRvIHJlc2VydmVcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5pbmRleCA4YzA5M2MxMTllNWE4Li4zMjE3MzAwNWIwODdmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oXG5AQCAtMTMxOCw2ICsxMzE4LDEzIEBAIGV4dGVybiBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdFx0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHBtZF90ICpwbWRwKTtcbiAjZW5kaWZcbiBcbisjaWZuZGVmIF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURVxuKyNpZmRlZiBDT05GSUdfSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFxuK2V4dGVybiBwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbitcdFx0XHQgICAgIHB1ZF90ICpwdWRwKTtcbisjZW5kaWZcbisjZW5kaWZcbitcbiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9TQU1FXG4gc3RhdGljIGlubGluZSBpbnQgcHRlX3NhbWUocHRlX3QgcHRlX2EsIHB0ZV90IHB0ZV9iKVxuIHtcbmRpZmYgLS1naXQgYS9tbS9wZ3RhYmxlLWdlbmVyaWMuYyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5pbmRleCBiOTFiMWE5ODAyOWM3Li5hYzExNzVkOWE1OWE3IDEwMDY0NFxuLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmNcbisrKyBiL21tL3BndGFibGUtZ2VuZXJpYy5jXG5AQCAtMjE3LDYgKzIxNywyMCBAQCBwbWRfdCBwbWRwX2ludmFsaWRhdGVfYWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gI2VuZGlmXG4gXG4rI2lmbmRlZiBfX0hBVkVfQVJDSF9QVURQX0lOVkFMSURBVEVcbisjaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbitwdWRfdCBwdWRwX2ludmFsaWRhdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbitcdFx0ICAgICAgcHVkX3QgKnB1ZHApXG4re1xuK1x0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudCgqcHVkcCkpO1xuK1x0cHVkX3Qgb2xkID0gcHVkcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwdWRwLCBwdWRfbWtpbnZhbGlkKCpwdWRwKSk7XG4rXG4rXHRmbHVzaF9wdWRfdGxiX3JhbmdlKHZtYSwgYWRkcmVzcywgYWRkcmVzcyArIEhQQUdFX1BVRF9TSVpFKTtcbitcdHJldHVybiBvbGQ7XG4rfVxuKyNlbmRpZlxuKyNlbmRpZlxuK1xuICNpZm5kZWYgcG1kcF9jb2xsYXBzZV9mbHVzaFxuIHBtZF90IHBtZHBfY29sbGFwc2VfZmx1c2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdFx0XHQgIHBtZF90ICpwbWRwKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDlUMTE6Mzc6MjYuNTc1MzM2NDI3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MTU5OTQ4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2ggZm9yIGFtZDY0IEFyY2hpdGVjdHVyZSoqXG5cbk9rYXksIHNvIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LCBhbmQgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaC4gTGV0J3MgYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLlxuXG5GaXJzdCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIHNvbWUgY29uZmlndXJhdGlvbiBiZWluZyBhZGRlZCBmb3IgQVJNNjQ6IHNlbGVjdGluZyBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRGAgYmFzZWQgb24gYFBBR0VfU0laRV80S0JgLiBUaGF0J3MgYSBjb25kaXRpb25hbCBzZXR0aW5nLCBhbmQgZXhwZWN0ZWQuIFRoZW4sIGEgYnVuY2ggb2YgQVJNNjQtc3BlY2lmaWMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgUFVELWxldmVsIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYW5kIFBoeXNpY2FsIEZyYW1lIE51bWJlciBNYXAgKFBGTk1BUCkgYXJlIGFkZGVkLiBUaGlzIHNlZW1zIHJlYXNvbmFibGUgZm9yIHN1cHBvcnRpbmcgVEhQIGF0IHRoYXQgbGV2ZWwuXG5cbk5leHQsIEkgc2VlIGEgYml0IG9mIGNsZWFudXAuIFBvd2VyUEMgaXMgZGVmaW5pbmcgYF9fSEFWRV9BUkNIX1BVRFBfSU5WQUxJREFURWAgYW5kIGV4dGVybnMgYSBmdW5jdGlvbi4gUklTQy1WIGFuZCB4ODYgYXJlIHJlbW92aW5nIGR1cGxpY2F0ZSBhcmNoLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiBgcHVkcF9pbnZhbGlkYXRlYC4gQWgsIHNvIGl0IGxvb2tzIGxpa2UgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyBnZW5lcmFsaXplZC5cblxuVGhlIGNvcmUgb2YgdGhlIGdlbmVyYWxpemF0aW9uIGlzIGhhcHBlbmluZyBpbiBgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmhgIGFuZCBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGUgZ2VuZXJpYyBkZWNsYXJhdGlvbiBvZiBgcHVkcF9pbnZhbGlkYXRlYCBpcyBhZGRlZCBpZiB0aGUgYXJjaGl0ZWN0dXJlICpkb2Vzbid0KiBoYXZlIGl0cyBvd24gZGVmaW5pdGlvbiwgYW5kIGlmIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYCBpcyBjb25maWd1cmVkLiBUaGVuIGEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZCBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgLiBUaGlzIG1ha2VzIHNlbnNlIOKAkyBjb25zb2xpZGF0ZSB0aGUgY29kZSwgcmVkdWNlIGR1cGxpY2F0aW9uLCBhbmQgcHJvdmlkZSBhIHN0YW5kYXJkIGludGVyZmFjZS5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlzIHRoaXMgc2FmZT8gRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXM/IFRoZSBjaGFuZ2VzIGFyZSAqcHJpbWFyaWx5KiBhYm91dCBQVUQtbGV2ZWwgVEhQIGhlbHBlcnMgYW5kIHRoZSBgcHVkcF9pbnZhbGlkYXRlYCBnZW5lcmFsaXphdGlvbi4gRnJvbSB3aGF0IEkgc2VlLCBgcHVkcF9pbnZhbGlkYXRlYCBpcyBlc3NlbnRpYWxseSBqdXN0IGJlaW5nIG1vdmVkIGZyb20geDg2IGFuZCBSSVNDLVYgdG8gdGhlIGdlbmVyaWMgY29kZS4gQVJNNjQgaXMgZ2V0dGluZyBuZXcgVEhQL1BGTk1BUCBzdXBwb3J0IGF0IHRoZSBQVUQgbGV2ZWwsIHdoaWNoIGlzIHdoYXQgdGhlIGhlbHBlcnMgYXJlIGRvaW5nLlxuXG5UaGVyZSdzIG5vIGluZGljYXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgZXhwb3NlZC4gV2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgdGFibGUgb3BlcmF0aW9ucy4gSSdtIGZvY3VzaW5nIG9uIHRob3NlIGJpdCBwYXR0ZXJucyAocHRlL3BtZC9wdWQgdmFsdWVzKSB0aGF0IGFyZSBiaXR3aXNlLW1hbmlwdWxhdGVkLiBUaGVyZSdzIG5vdGhpbmcgaGVyZSB0aGF0IGxvb2tzIGxpa2UgaXQgaXMgd3JpdGluZyB0byB1c2VyIHNwYWNlIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGFyb3VuZCB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXNlIGFyZSB0eXBpY2FsbHkgYml0d2lzZSBvcHMgYW5kIGF0b21pYyBleGNoYW5nZXMsIHdoaWNoIHdvdWxkIG5vdCBub3JtYWxseSBleHBvc2UgYW55IHNlY3VyaXR5IGlzc3Vlcy5cblxuU28sIGxldCdzIGdvIGRlZXBlciBhbmQgY29tcGFyZSBpdCB0byBib3RoIEtBU0FOIGFuZCBLTVNBTiBjaGVja3M6XG5cbjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQ/IE5vLiBUaGlzIHBhdGNoIGRvZXNuJ3QgbG9vayBsaWtlIGl0IGRlYWxzIHdpdGggdGhpcy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBJdCdzIGp1c3QgaGVscGVyIGZ1bmN0aW9ucyBhbmQgY29uc29saWRhdGlvbi5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vdCB0aGF0IEkgY2FuIHNlZS4gV2UncmUgbWFpbmx5IGp1c3Qgd29ya2luZyB3aXRoIHBhZ2UgdGFibGUgc3RydWN0dXJlcy5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnM/IE5vcGUuXG5cbkJhc2VkIG9uIGFsbCBvZiB0aGF0LCBpdCBsb29rcyBsaWtlIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gY29uZmlkZW50IGluIHRoYXQgYW5hbHlzaXMuIFRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIGV4cGxhaW4gdGhlIHJhdGlvbmFsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM4MCwiT3V0cHV0VG9rZW5zIjoxODMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOVQxMTozNzozMy4wOTEzMzQ0MjdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBQVURzIGFuZCBQVUQgUEZOTUFQIG9uIGFybTY0LCB3aGlsZSBjb25zb2xpZGF0aW5nIHRoZSBnZW5lcmljIGBwdWRwX2ludmFsaWRhdGUoKWAgaW1wbGVtZW50YXRpb24gaW4gYG1tL3BndGFibGUtZ2VuZXJpYy5jYCBhY3Jvc3MgYXJjaGl0ZWN0dXJlcyAoeDg2LCByaXNjdiwgcG93ZXJwYykuXFxuXFxuVGhlc2UgY2hhbmdlcyBvbmx5IG1hbmlwdWxhdGUgYXJjaGl0ZWN0dXJhbCBwYWdlIHRhYmxlIGVudHJpZXMgKFBVRC9QTUQvUFRFIGJpdC1mbGFncywgcGFnZSB0YWJsZSBlc3RhYmxpc2htZW50LCBhbmQgVExCIGludmFsaWRhdGlvbikuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgY29weSBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlLCBhbHRlciBzdHJ1Y3QgcGFkZGluZy9pbml0aWFsaXphdGlvbiwgb3IgY3JlYXRlIHBhdGhzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcC9wYWdlIG1lbW9yeSBjb3VsZCBiZSBldmFsdWF0ZWQgb3IgbGVha2VkLiBUaGVyZWZvcmUsIHN0YW5kYXJkIEtBU0FOL2RlYnVnIGJ1aWxkcyBhcmUgc3VmZmljaWVudCBhbmQgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc3VwcG9ydCBmb3IgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIFBVRHMgYW5kIFBVRCBQRk5NQVAgb24gYXJtNjQsIHdoaWxlIGNvbnNvbGlkYXRpbmcgdGhlIGdlbmVyaWMgYHB1ZHBfaW52YWxpZGF0ZSgpYCBpbXBsZW1lbnRhdGlvbiBpbiBgbW0vcGd0YWJsZS1nZW5lcmljLmNgIGFjcm9zcyBhcmNoaXRlY3R1cmVzICh4ODYsIHJpc2N2LCBwb3dlcnBjKS5cXG5cXG5UaGVzZSBjaGFuZ2VzIG9ubHkgbWFuaXB1bGF0ZSBhcmNoaXRlY3R1cmFsIHBhZ2UgdGFibGUgZW50cmllcyAoUFVEL1BNRC9QVEUgYml0LWZsYWdzLCBwYWdlIHRhYmxlIGVzdGFibGlzaG1lbnQsIGFuZCBUTEIgaW52YWxpZGF0aW9uKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBjb3B5IGRhdGEgdG8vZnJvbSB1c2Vyc3BhY2UsIGFsdGVyIHN0cnVjdCBwYWRkaW5nL2luaXRpYWxpemF0aW9uLCBvciBjcmVhdGUgcGF0aHMgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwL3BhZ2UgbWVtb3J5IGNvdWxkIGJlIGV2YWx1YXRlZCBvciBsZWFrZWQuIFRoZXJlZm9yZSwgc3RhbmRhcmQgS0FTQU4vZGVidWcgYnVpbGRzIGFyZSBzdWZmaWNpZW50IGFuZCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[1] Phase: Succeeded StartedAt: 2026-09-09 11:37:45 +0000 UTC FinishedAt: 2026-09-09 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-09 11:37:45 +0000 UTC FinishedAt: 2026-09-09 11:37:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2] Phase: Succeeded StartedAt: 2026-09-09 11:37:45 +0000 UTC FinishedAt: 2026-09-09 15:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-09 11:37:45 +0000 UTC FinishedAt: 2026-09-09 15:21:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-09 11:37:45 +0000 UTC FinishedAt: 2026-09-09 11:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-09 11:37:45 +0000 UTC FinishedAt: 2026-09-09 11:37:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8c4h6/series-workflow8c4h6-convert-artifact-1984895234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-09 11:37:55 +0000 UTC FinishedAt: 2026-09-09 11:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-09 11:37:55 +0000 UTC FinishedAt: 2026-09-09 11:55:50 +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:*98904a09-03b6-4844-9d9d-e07223aa5908,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-workflow8c4h6/series-workflow8c4h6-convert-artifact-1984895234/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": "35e0a76e-6b7f-4d64-be76-3d52c4c34b00", "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-workflow8c4h6/series-workflow8c4h6-build-action-3660490688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-09 11:37:55 +0000 UTC FinishedAt: 2026-09-09 11:55:40 +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:*98904a09-03b6-4844-9d9d-e07223aa5908,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-workflow8c4h6/series-workflow8c4h6-convert-artifact-1984895234/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": "35e0a76e-6b7f-4d64-be76-3d52c4c34b00", "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-workflow8c4h6/series-workflow8c4h6-build-action-3660490688/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-09 11:55:50 +0000 UTC FinishedAt: 2026-09-09 11:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-09 11:55:50 +0000 UTC FinishedAt: 2026-09-09 11:55:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-09 11:55:50 +0000 UTC FinishedAt: 2026-09-09 11:56:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-09 11:55:50 +0000 UTC FinishedAt: 2026-09-09 11:55:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8c4h6/series-workflow8c4h6-convert-artifact-2803710813/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-09 11:56:00 +0000 UTC FinishedAt: 2026-09-09 11:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-09 11:56:00 +0000 UTC FinishedAt: 2026-09-09 11:57:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35e0a76e-6b7f-4d64-be76-3d52c4c34b00,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-workflow8c4h6/series-workflow8c4h6-build-action-3660490688/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-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-09 11:57:58 +0000 UTC FinishedAt: 2026-09-09 11:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-09 11:57:58 +0000 UTC FinishedAt: 2026-09-09 11:57:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-09 11:57:58 +0000 UTC FinishedAt: 2026-09-09 12:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-09 11:57:58 +0000 UTC FinishedAt: 2026-09-09 12:14:32 +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:*98904a09-03b6-4844-9d9d-e07223aa5908,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-workflow8c4h6/series-workflow8c4h6-convert-artifact-2803710813/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": "3e2956c0-581b-4288-b46c-f97195818df0", "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-workflow8c4h6/series-workflow8c4h6-build-action-3530718265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-09 11:57:58 +0000 UTC FinishedAt: 2026-09-09 12:14:22 +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:*98904a09-03b6-4844-9d9d-e07223aa5908,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-workflow8c4h6/series-workflow8c4h6-convert-artifact-2803710813/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": "3e2956c0-581b-4288-b46c-f97195818df0", "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-workflow8c4h6/series-workflow8c4h6-build-action-3530718265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-09 12:14:32 +0000 UTC FinishedAt: 2026-09-09 12:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-09 12:14:32 +0000 UTC FinishedAt: 2026-09-09 12:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-09 12:14:32 +0000 UTC FinishedAt: 2026-09-09 12:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-09 12:14:32 +0000 UTC FinishedAt: 2026-09-09 12:16:18 +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:*3e2956c0-581b-4288-b46c-f97195818df0,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-workflow8c4h6/series-workflow8c4h6-build-action-3530718265/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-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 15:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 15:21:35 +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":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},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:*35e0a76e-6b7f-4d64-be76-3d52c4c34b00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e2956c0-581b-4288-b46c-f97195818df0,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-workflow8c4h6/series-workflow8c4h6-build-action-3660490688/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-workflow8c4h6/series-workflow8c4h6-build-action-3530718265/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 12:16:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 12:16:32 +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":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},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-workflow8c4h6/series-workflow8c4h6-convert-artifact-2268966882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 12:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 12:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-09 12:16:28 +0000 UTC FinishedAt: 2026-09-09 12:16:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-09 12:16:38 +0000 UTC FinishedAt: 2026-09-09 15:21:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8c4h6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["pudp_invalidate","change_huge_pud"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0725b7946601a5af57e7f25fa81906dd34eaa341","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"dca74b8b-77e0-4a3f-8b23-425b82229521","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-09 12:16:38 +0000 UTC FinishedAt: 2026-09-09 15:21:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*35e0a76e-6b7f-4d64-be76-3d52c4c34b00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e2956c0-581b-4288-b46c-f97195818df0,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-workflow8c4h6/series-workflow8c4h6-build-action-3660490688/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-workflow8c4h6/series-workflow8c4h6-build-action-3530718265/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-workflow8c4h6/series-workflow8c4h6-convert-artifact-2268966882/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,}