Name: series-workflowbrnmd Phase: Succeeded StartedAt: 2026-07-09 14:26:38 +0000 UTC FinishedAt: 2026-07-09 19:54:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[0] Phase: Succeeded StartedAt: 2026-07-09 14:26:38 +0000 UTC FinishedAt: 2026-07-09 15:11:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[0].run-triage Phase: Succeeded StartedAt: 2026-07-09 14:26:38 +0000 UTC FinishedAt: 2026-07-09 15:11:46 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "60444706aa17616efc03190d099ac347e28b3d0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_ACT_CT", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "60444706aa17616efc03190d099ac347e28b3d0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_ACT_CT", "IPV6" ], "series_id": "75cd5a68-8e8e-41ef-9da6-dea3554407a7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_table_fib_event", "nf_flow_table_fib_work", "nf_flow_offload_fib_cb", "nf_flow_fib_flow_match", "nf_flow_fib_tuple_match", "nf_flowtable_fib_family_match", "nf_flow_table_fib_drain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9mbG93X3RhYmxlX2ZpYl9ldmVudCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2ZpYl93b3JrJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9maWJfY2ImIzM0OywKICAgICYjMzQ7bmZfZmxvd19maWJfZmxvd19tYXRjaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2ZpYl90dXBsZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEZJQiBldmVudCBoYW5kbGluZyB0byBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEl0IHJlZ2lzdGVycyBhIEZJQiBub3RpZmllciBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBGSUIgZXZlbnQmIzM5O3MgcHJlZml4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBtb2RpZnlpbmcgcm91dGluZyB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5N2M4NjQ5MTQzNTE3OWMxMjdmYzM5OWQ0ZTA2MmIwZTY0OTFiMDFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxNTowODo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjdjMzYyNTVmNWE0ZjkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTg0LDYgJiM0Mzs4NCw5IEBAIHN0cnVjdCBuZl9mbG93dGFibGUge1xuIFx0c3RydWN0IGZsb3dfYmxvY2tcdFx0Zmxvd19ibG9jaztcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdFx0Zmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqL1xuIFx0cG9zc2libGVfbmV0X3RcdFx0XHRuZXQ7XG4mIzQzO1x0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRcdGZpYl9uYjtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0ZmliX3dvcms7XG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWRcdFx0ZmliX2V2ZW50cztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbmluZGV4IDk5YzViOWQ2NzFhMGNhLi4yYzkxMjA1NjkyMWFlMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC01LDggJiM0Mzs1LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2ZpYl9ub3RpZmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcF9maWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuQEAgLTY5NSwxMSAmIzQzOzY5OSwxNzkgQEAgdm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG4gXG4mIzQzO3N0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCB7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGVcdCpldmVudHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQge1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlXHRub2RlO1xuJiM0MztcdHU4XHRcdFx0ZmFtaWx5O1xuJiM0MztcdHU4XHRcdFx0cHJlZml4X2xlbjtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRfX2JlMzJcdFx0aXA0O1xuJiM0MztcdFx0c3RydWN0IGluNl9hZGRyXHRpcDY7XG4mIzQzO1x0fSBhZGRyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZfZmxvd19maWJfdHVwbGVfbWF0Y2goY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAodHVwbGUtXHUwMDNlbDNwcm90byAhPSBldi1cdTAwM2VmYW1pbHkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZXYtXHUwMDNlZmFtaWx5KSB7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lQVjQ6IHtcbiYjNDM7XHRcdF9fYmUzMiBtYXNrID0gZXYtXHUwMDNlcHJlZml4X2xlbiA/XG4mIzQzO1x0XHRcdGh0b25sKH4wdSBcdTAwM2NcdTAwM2MgKDMyIC0gZXYtXHUwMDNlcHJlZml4X2xlbikpIDogMDtcbiYjNDM7XHRcdHJldHVybiAodHVwbGUtXHUwMDNlZHN0X3Y0LnNfYWRkciBcdTAwMjYgbWFzaykgPT0gKGV2LVx1MDAzZWFkZHIuaXA0IFx1MDAyNiBtYXNrKTtcbiYjNDM7XHR9XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKFx1MDAyNnR1cGxlLVx1MDAzZWRzdF92NiwgXHUwMDI2ZXYtXHUwMDNlYWRkci5pcDYsXG4mIzQzO1x0XHRcdFx0XHQgZXYtXHUwMDNlcHJlZml4X2xlbik7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZl9mbG93X2ZpYl9mbG93X21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX21hdGNoICptKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3JpZywgKnJlcGx5O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXY7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdG9yaWcgID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7XG4mIzQzO1x0cmVwbHkgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS50dXBsZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChub2RlID0gbS1cdTAwM2VldmVudHM7IG5vZGU7IG5vZGUgPSBub2RlLVx1MDAzZW5leHQpIHtcbiYjNDM7XHRcdGV2ID0gbGxpc3RfZW50cnkobm9kZSwgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50LCBub2RlKTtcbiYjNDM7XHRcdGlmIChuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChvcmlnLCBldikgfHxcbiYjNDM7XHRcdCAgICBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChyZXBseSwgZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2ZpYl9jYihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggKm0gPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChuZl9mbG93X2ZpYl9mbG93X21hdGNoKGZsb3csIG0pKVxuJiM0MztcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2ZpYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGZpYl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggbSA9IHt9O1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpldmVudHM7XG4mIzQzO1xuJiM0MztcdGV2ZW50cyA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbiYjNDM7XHRpZiAoIWV2ZW50cylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bS5ldmVudHMgPSBldmVudHM7XG4mIzQzO1x0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2IsIFx1MDAyNm0pO1xuJiM0MztcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpXG4mIzQzO1x0XHRrZnJlZShldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoKGNvbnN0IHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTggZXZlbnRfZmFtaWx5KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChmbG93dGFibGUtXHUwMDNldHlwZS1cdTAwM2VmYW1pbHkpIHtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fSVBWNDpcbiYjNDM7XHRcdHJldHVybiBldmVudF9mYW1pbHkgPT0gTkZQUk9UT19JUFY0O1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lORVQ6XG4mIzQzO1x0XHRyZXR1cm4gZXZlbnRfZmFtaWx5ID09IE5GUFJPVE9fSVBWNCB8fFxuJiM0MztcdFx0ICAgICAgIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xuJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YobmIsIHN0cnVjdCBuZl9mbG93dGFibGUsIGZpYl9uYik7XG4mIzQzO1x0c3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvID0gcHRyO1xuJiM0MztcdHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZXZlbnQpIHtcbiYjNDM7XHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9SRVBMQUNFOlxuJiM0MztcdGNhc2UgRklCX0VWRU5UX0VOVFJZX0FQUEVORDpcbiYjNDM7XHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9ERUw6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBldmVudHMgZm9yIGFuIGFkZHJlc3MgZmFtaWx5IHRoaXMgdGFibGUgY2Fubm90IGhvbGQuICovXG4mIzQzO1x0aWYgKCFuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaChmbG93X3RhYmxlLCBpbmZvLVx1MDAzZWZhbWlseSkpXG4mIzQzO1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO1xuJiM0MztcdGV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCFldilcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbmZvLVx1MDAzZWZhbWlseSkge1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY0OlxuJiM0MztcdFx0c3RydWN0IGZpYl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW47XG4mIzQzO1xuJiM0MztcdFx0ZmVuID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbywgaW5mbyk7XG4mIzQzO1x0XHRldi1cdTAwM2VmYW1pbHkgICAgID0gTkZQUk9UT19JUFY0O1xuJiM0MztcdFx0ZXYtXHUwMDNlYWRkci5pcDQgICA9IGh0b25sKGZlbi1cdTAwM2Vkc3QpO1xuJiM0MztcdFx0ZXYtXHUwMDNlcHJlZml4X2xlbiA9IGZlbi1cdTAwM2Vkc3RfbGVuO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRjYXNlIE5GUFJPVE9fSVBWNjpcbiYjNDM7XHRcdHN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8gKmZlbjY7XG4mIzQzO1xuJiM0MztcdFx0ZmVuNiA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvLCBpbmZvKTtcbiYjNDM7XHRcdGlmICghZmVuNi1cdTAwM2VydClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXYtXHUwMDNlZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNjtcbiYjNDM7XHRcdGV2LVx1MDAzZWFkZHIuaXA2ICAgPSBmZW42LVx1MDAzZXJ0LVx1MDAzZWZpYjZfZHN0LmFkZHI7XG4mIzQzO1x0XHRldi1cdTAwM2VwcmVmaXhfbGVuID0gZmVuNi1cdTAwM2VydC1cdTAwM2VmaWI2X2RzdC5wbGVuO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxsaXN0X2FkZChcdTAwMjZldi1cdTAwM2Vub2RlLCBcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9ldmVudHMpO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfd29yayk7XG4mIzQzO1x0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGtmcmVlKGV2KTtcbiYjNDM7XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO31cbiYjNDM7XG4gaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KTtcbiBcdGludCBlcnI7XG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX3dvcmssIG5mX2Zsb3dfdGFibGVfZmliX3dvcmspO1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX2V2ZW50cyk7XG4gXHRmbG93X2Jsb2NrX2luaXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWZsb3dfYmxvY2spO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZmbG93dGFibGUtXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcbiBcbkBAIC03MTEsMTEgJiM0Mzs4ODMsMjQgQEAgaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcbiBcdFx0XHQgICBcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuIFxuJiM0MztcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG4mIzQzO1x0XHRmbG93dGFibGUtXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudDtcbiYjNDM7XHRcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsIFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmaWJfbmIsXG4mIzQzO1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9maWI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNmZsb3d0YWJsZXMpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZpYjpcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmspO1xuJiM0MztcdHJoYXNodGFibGVfZGVzdHJveShcdTAwMjZmbG93dGFibGUtXHUwMDNlcmhhc2h0YWJsZSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcbiBcbkBAIC03NTQsOCAmIzQzOzkzOSwyNSBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2NsZWFudXApO1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldiwgKm5leHQ7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmV2ZW50cztcbiYjNDM7XG4mIzQzO1x0ZXZlbnRzID0gbGxpc3RfZGVsX2FsbChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9ldmVudHMpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXYsIG5leHQsIGV2ZW50cywgbm9kZSlcbiYjNDM7XHRcdGtmcmVlKGV2KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuIHtcbiYjNDM7XHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpIHtcbiYjNDM7XHRcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKHJlYWRfcG5ldChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZW5ldCksXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9uYik7XG4mIzQzO1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZmliX3dvcmspO1xuJiM0MztcdFx0bmZfZmxvd190YWJsZV9maWJfZHJhaW4oZmxvd190YWJsZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VsaXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZmliX2V2ZW50JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZmliX3dvcmsmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZpYl9jYiYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2ZpYl9mbG93X21hdGNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfZmliX3R1cGxlX21hdGNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZmliX2RyYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgRklCIGV2ZW50IGhhbmRsaW5nIHRvIG5ldGZpbHRlciBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gSXQgcmVnaXN0ZXJzIGEgRklCIG5vdGlmaWVyIGFuZCB0ZWFycyBkb3duIGZsb3dzIHRoYXQgbWF0Y2ggdGhlIEZJQiBldmVudCYjMzk7cyBwcmVmaXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1vZGlmeWluZyByb3V0aW5nIHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTdjODY0OTE0MzUxNzljMTI3ZmMzOTlkNGUwNjJiMGU2NDkxYjAxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTU6MDg6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAppbmRleCA3YjIzYjI0NWE1YTg2YS4uN2MzNjI1NWY1YTRmOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtODQsNiAmIzQzOzg0LDkgQEAgc3RydWN0IG5mX2Zsb3d0YWJsZSB7CiAJc3RydWN0IGZsb3dfYmxvY2sJCWZsb3dfYmxvY2s7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQkJZmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqLwogCXBvc3NpYmxlX25ldF90CQkJbmV0OwomIzQzOwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJCWZpYl9uYjsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CQlmaWJfd29yazsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQJCWZpYl9ldmVudHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggOTljNWI5ZDY3MWEwY2EuLjJjOTEyMDU2OTIxYWUwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKQEAgLTUsOCAmIzQzOzUsMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yaGFzaHRhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZmliX25vdGlmaWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcF9maWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9maWIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgmZ3Q7CkBAIC02OTUsMTEgJiM0Mzs2OTksMTc5IEBAIHZvaWQgbmZfZmxvd19kbmF0X3BvcnQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfZG5hdF9wb3J0KTsKIAomIzQzO3N0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCB7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlCSpldmVudHM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZQlub2RlOwomIzQzOwl1OAkJCWZhbWlseTsKJiM0MzsJdTgJCQlwcmVmaXhfbGVuOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlfX2JlMzIJCWlwNDsKJiM0MzsJCXN0cnVjdCBpbjZfYWRkcglpcDY7CiYjNDM7CX0gYWRkcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldikKJiM0Mzt7CiYjNDM7CWlmICh0dXBsZS0mZ3Q7bDNwcm90byAhPSBldi0mZ3Q7ZmFtaWx5KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGV2LSZndDtmYW1pbHkpIHsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjQ6IHsKJiM0MzsJCV9fYmUzMiBtYXNrID0gZXYtJmd0O3ByZWZpeF9sZW4gPwomIzQzOwkJCWh0b25sKH4wdSAmbHQ7Jmx0OyAoMzIgLSBldi0mZ3Q7cHJlZml4X2xlbikpIDogMDsKJiM0MzsJCXJldHVybiAodHVwbGUtJmd0O2RzdF92NC5zX2FkZHIgJmFtcDsgbWFzaykgPT0gKGV2LSZndDthZGRyLmlwNCAmYW1wOyBtYXNrKTsKJiM0MzsJfQomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIE5GUFJPVE9fSVBWNjoKJiM0MzsJCXJldHVybiBpcHY2X3ByZWZpeF9lcXVhbCgmYW1wO3R1cGxlLSZndDtkc3RfdjYsICZhbXA7ZXYtJmd0O2FkZHIuaXA2LAomIzQzOwkJCQkJIGV2LSZndDtwcmVmaXhfbGVuKTsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZl9mbG93X2ZpYl9mbG93X21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCAqbSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm9yaWcsICpyZXBseTsKJiM0MzsJY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldjsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CW9yaWcgID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7CiYjNDM7CXJlcGx5ID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0udHVwbGU7CiYjNDM7CiYjNDM7CWZvciAobm9kZSA9IG0tJmd0O2V2ZW50czsgbm9kZTsgbm9kZSA9IG5vZGUtJmd0O25leHQpIHsKJiM0MzsJCWV2ID0gbGxpc3RfZW50cnkobm9kZSwgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50LCBub2RlKTsKJiM0MzsJCWlmIChuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChvcmlnLCBldikgfHwKJiM0MzsJCSAgICBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChyZXBseSwgZXYpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2ZpYl9jYihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLAomIzQzOwkJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX21hdGNoICptID0gZGF0YTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAobmZfZmxvd19maWJfZmxvd19tYXRjaChmbG93LCBtKSkKJiM0MzsJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9maWJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBmaWJfd29yayk7CiYjNDM7CXN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXYsICpuZXh0OwomIzQzOwlzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggbSA9IHt9OwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZXZlbnRzOwomIzQzOwomIzQzOwlldmVudHMgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Zmxvd190YWJsZS0mZ3Q7ZmliX2V2ZW50cyk7CiYjNDM7CWlmICghZXZlbnRzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltLmV2ZW50cyA9IGV2ZW50czsKJiM0MzsJbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2IsICZhbXA7bSk7CiYjNDM7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXYsIG5leHQsIGV2ZW50cywgbm9kZSkKJiM0MzsJCWtmcmVlKGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2goY29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLAomIzQzOwkJCQkJICB1OCBldmVudF9mYW1pbHkpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGZsb3d0YWJsZS0mZ3Q7dHlwZS0mZ3Q7ZmFtaWx5KSB7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY0OgomIzQzOwkJcmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQ7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY2OgomIzQzOwkJcmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7CiYjNDM7CWNhc2UgTkZQUk9UT19JTkVUOgomIzQzOwkJcmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQgfHwKJiM0MzsJCSAgICAgICBldmVudF9mYW1pbHkgPT0gTkZQUk9UT19JUFY2OwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqLwomIzQzO3N0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9maWJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9CiYjNDM7CQljb250YWluZXJfb2YobmIsIHN0cnVjdCBuZl9mbG93dGFibGUsIGZpYl9uYik7CiYjNDM7CXN0cnVjdCBmaWJfbm90aWZpZXJfaW5mbyAqaW5mbyA9IHB0cjsKJiM0MzsJc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldjsKJiM0MzsKJiM0MzsJc3dpdGNoIChldmVudCkgewomIzQzOwljYXNlIEZJQl9FVkVOVF9FTlRSWV9SRVBMQUNFOgomIzQzOwljYXNlIEZJQl9FVkVOVF9FTlRSWV9BUFBFTkQ6CiYjNDM7CWNhc2UgRklCX0VWRU5UX0VOVFJZX0RFTDoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNraXAgZXZlbnRzIGZvciBhbiBhZGRyZXNzIGZhbWlseSB0aGlzIHRhYmxlIGNhbm5vdCBob2xkLiAqLwomIzQzOwlpZiAoIW5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoKGZsb3dfdGFibGUsIGluZm8tJmd0O2ZhbWlseSkpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7CiYjNDM7CWlmICghZXYpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaW5mby0mZ3Q7ZmFtaWx5KSB7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY0OgomIzQzOwkJc3RydWN0IGZpYl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW47CiYjNDM7CiYjNDM7CQlmZW4gPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IGZpYl9lbnRyeV9ub3RpZmllcl9pbmZvLCBpbmZvKTsKJiM0MzsJCWV2LSZndDtmYW1pbHkgICAgID0gTkZQUk9UT19JUFY0OwomIzQzOwkJZXYtJmd0O2FkZHIuaXA0ICAgPSBodG9ubChmZW4tJmd0O2RzdCk7CiYjNDM7CQlldi0mZ3Q7cHJlZml4X2xlbiA9IGZlbi0mZ3Q7ZHN0X2xlbjsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIE5GUFJPVE9fSVBWNjoKJiM0MzsJCXN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8gKmZlbjY7CiYjNDM7CiYjNDM7CQlmZW42ID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8sIGluZm8pOwomIzQzOwkJaWYgKCFmZW42LSZndDtydCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJCWV2LSZndDtmYW1pbHkgICAgID0gTkZQUk9UT19JUFY2OwomIzQzOwkJZXYtJmd0O2FkZHIuaXA2ICAgPSBmZW42LSZndDtydC0mZ3Q7ZmliNl9kc3QuYWRkcjsKJiM0MzsJCWV2LSZndDtwcmVmaXhfbGVuID0gZmVuNi0mZ3Q7cnQtJmd0O2ZpYjZfZHN0LnBsZW47CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxsaXN0X2FkZCgmYW1wO2V2LSZndDtub2RlLCAmYW1wO2Zsb3dfdGFibGUtJmd0O2ZpYl9ldmVudHMpOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZhbXA7Zmxvd190YWJsZS0mZ3Q7ZmliX3dvcmspOwomIzQzOwlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlrZnJlZShldik7CiYjNDM7CXJldHVybiBOT1RJRllfRE9ORTsKJiM0Mzt9CiYjNDM7CiBpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSkKIHsKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZhbXA7Zmxvd3RhYmxlLSZndDtuZXQpOwogCWludCBlcnI7CiAKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2Zsb3d0YWJsZS0mZ3Q7Z2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpOwomIzQzOwlJTklUX1dPUksoJmFtcDtmbG93dGFibGUtJmd0O2ZpYl93b3JrLCBuZl9mbG93X3RhYmxlX2ZpYl93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7Zmxvd3RhYmxlLSZndDtmaWJfZXZlbnRzKTsKIAlmbG93X2Jsb2NrX2luaXQoJmFtcDtmbG93dGFibGUtJmd0O2Zsb3dfYmxvY2spOwogCWluaXRfcndzZW0oJmFtcDtmbG93dGFibGUtJmd0O2Zsb3dfYmxvY2tfbG9jayk7CiAKQEAgLTcxMSwxMSAmIzQzOzg4MywyNCBAQCBpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSkKIAlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwKIAkJCSAgICZhbXA7Zmxvd3RhYmxlLSZndDtnY193b3JrLCBIWik7CiAKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHsKJiM0MzsJCWZsb3d0YWJsZS0mZ3Q7ZmliX25iLm5vdGlmaWVyX2NhbGwgPSBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudDsKJiM0MzsJCWVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsICZhbXA7Zmxvd3RhYmxlLSZndDtmaWJfbmIsCiYjNDM7CQkJCQkgICAgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9maWI7CiYjNDM7CX0KJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7Zmxvd3RhYmxlX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7Zmxvd3RhYmxlLSZndDtsaXN0LCAmYW1wO2Zsb3d0YWJsZXMpOwogCW11dGV4X3VubG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9maWI6CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO2Zsb3d0YWJsZS0mZ3Q7Z2Nfd29yayk7CiYjNDM7CXJoYXNodGFibGVfZGVzdHJveSgmYW1wO2Zsb3d0YWJsZS0mZ3Q7cmhhc2h0YWJsZSk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpOwogCkBAIC03NTQsOCAmIzQzOzkzOSwyNSBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTsKIAomIzQzO3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX2RyYWluKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKmV2ZW50czsKJiM0MzsKJiM0MzsJZXZlbnRzID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Zsb3dfdGFibGUtJmd0O2ZpYl9ldmVudHMpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpCiYjNDM7CQlrZnJlZShldik7CiYjNDM7fQomIzQzOwogdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSkKIHsKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7CiYjNDM7CQl1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihyZWFkX3BuZXQoJmFtcDtmbG93X3RhYmxlLSZndDtuZXQpLAomIzQzOwkJCQkJJmFtcDtmbG93X3RhYmxlLSZndDtmaWJfbmIpOwomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO2Zsb3dfdGFibGUtJmd0O2ZpYl93b3JrKTsKJiM0MzsJCW5mX2Zsb3dfdGFibGVfZmliX2RyYWluKGZsb3dfdGFibGUpOwomIzQzOwl9CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO2Zsb3dfdGFibGUtJmd0O2xpc3QpOwogCW11dGV4X3VubG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZS5oYC4gU2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIEZJQiBldmVudCBoYW5kbGluZyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGVzLCBzcGVjaWZpY2FsbHkgZm9yIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhIGdvb2QgZnVuY3Rpb25hbCBhZGRpdGlvbiwgYW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgaXQgaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0LiBBIG5vdGlmaWVyIChgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgKSBsaXN0ZW5pbmcgZm9yIEZJQiBldmVudHMg4oCTIHJvdXRlIGNoYW5nZXMsIGJhc2ljYWxseSDigJMgYW5kIGEgd29yayBxdWV1ZSBpdGVtIChgbmZfZmxvd190YWJsZV9maWJfd29ya2ApIHRvIGhhbmRsZSB0aGUgY2xlYW51cC4gVGhlIHdvcmsgaXRlbSBpdGVyYXRlcyB0aGUgZmxvdyB0YWJsZSBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBwcm9ibGVtYXRpYyBwcmVmaXguIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaG93IHRoaXMgcGxheXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNoYW5nZSAqaXMqIGNvcmUgbmV0ZmlsdGVyLCBzbyBpdCYjMzk7cyBwcm9iYWJseSByZWFjaGFibGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlJiMzOTtzIHBoeXNpY2FsIGhhcmR3YXJlLiBSb3V0aW5nIHRhYmxlIGNoYW5nZXMgKEZJQiBldmVudHMpIGFyZSBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzaW11bGF0ZWQgb3IgdHJpZ2dlcmVkIGluIFZNcyBieSBhZGRpbmcgb3IgcmVtb3Zpbmcgcm91dGVzLiBBbmQsIG9mIGNvdXJzZSwgTmV0ZmlsdGVyIGZsb3cgdGFibGVzIGNhbiBiZSBjcmVhdGVkIGFuZCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBmbGFnIHNldCwgKmV2ZW4gaWYqIHRoZSBhY3R1YWwgb2ZmbG9hZCBpc24mIzM5O3QgcHJlc2VudC4KCldhaXQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoYXQgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkYCBjaGVja3MgaWYgdGhlIGZsb3d0YWJsZSBoYXMgdGhlIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgZmxhZyBzZXQuIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGhvdyBleGFjdGx5IGNhbiB0aGF0IGZsYWcgYmUgc2V0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBjaGVjayBob3cgYE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEYCBpcyB1c2VkIGFuZCBpZiBpdCYjMzk7cyBwb3NzaWJsZSB0byBzZXQgdGhhdCBmbGFnIGV2ZW4gaWYgYWN0dWFsIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LiBUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoYXQgbWFjcm8sIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0ZMT1dUQUJMRV9IV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NzE9ZW51bSBuZl9mbG93dGFibGVfZmxhZ3Mge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo3MjpcdE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEXHRcdD0gMHgxLFx0LyogTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEICovXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTczLVx0TkZfRkxPV1RBQkxFX0NPVU5URVJcdFx0PSAweDIsXHQvKiBORlRfRkxPV1RBQkxFX0NPVU5URVIgKi9cbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTkyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTkzLXtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6OTQ6XHRyZXR1cm4gZmxvd3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRDtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtOTUtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0zMjQ9c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zNDktXHRjdF9mdC1cdTAwM2VuZl9mdC50eXBlID0gXHUwMDI2Zmxvd3RhYmxlX2N0O1xubmV0L3NjaGVkL2FjdF9jdC5jOjM1MDpcdGN0X2Z0LVx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNTEtXHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gSGFyZHdhcmUgT2ZmbG9hZCBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBvZmZsb2FkIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCBpdCBzZWVtcyB0aGUgYWN0aW9uJiMzOTtzIGNvcmUgbG9naWMgaXMgc2l0dWF0ZWQgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBpbXBvcnRhbnQgZmxhZyBoZXJlIGlzIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIEl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGlzIHNldC4KClRoZSBjb2RlJiMzOTtzIGNvbm5lY3Rpb24gdG8gdGhlIGBuZnRhYmxlc2AgZnJhbWV3b3JrIGlzIHRoZSBuZXh0IHBsYWNlIHRvIGxvb2sgYXQuIFNlZW1zIGxpa2UgdGhlIGtleSBpcyB0aGUgbWFwcGluZyBiZXR3ZWVuIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgYW5kIGBORlRfRkxPV1RBQkxFX0hXX09GRkxPQURgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjb25maWd1cmF0aW9uIGlzIGxpa2VseSBtYW5hZ2VkIHZpYSBuZXRsaW5rIHdpdGhpbiB0aGUgbmZ0YWJsZXMgaW50ZXJmYWNlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBwbGFjZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgdGhlIGZyYW1ld29yayBpcyBpbiBzeW5jLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTcxPWVudW0gbmZfZmxvd3RhYmxlX2ZsYWdzIHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NzI6XHRORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRFx0XHQ9IDB4MSxcdC8qIE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCAqL1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC03My1cdE5GX0ZMT1dUQUJMRV9DT1VOVEVSXHRcdD0gMHgyLFx0LyogTkZUX0ZMT1dUQUJMRV9DT1VOVEVSICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaD0xNjg3PWVudW0gbmZ0X29iamVjdF9hdHRyaWJ1dGVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDMtICpcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6MTcwNDogKiBATkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEOiBmbG93dGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDUtICogQE5GVF9GTE9XVEFCTEVfQ09VTlRFUjogZW5hYmxlIGZsb3cgY291bnRlcnNcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE3MDc9ZW51bSBuZnRfZmxvd3RhYmxlX2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6MTcwODpcdE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRFx0PSAweDEsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDktXHRORlRfRkxPV1RBQkxFX0NPVU5URVJcdFx0PSAweDIsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjE3MTA6XHRORlRfRkxPV1RBQkxFX01BU0tcdFx0PSAoTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTcxMS1cdFx0XHRcdFx0ICAgTkZUX0ZMT1dUQUJMRV9DT1VOVEVSKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwOTY9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTQxLVx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTQyOlx0XHRpZiAoKGZsb3d0YWJsZS1cdTAwM2VkYXRhLmZsYWdzIFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpIF5cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNDM6XHRcdCAgICAoZmxhZ3MgXHUwMDI2IE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxNDQtXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEZsb3d0YWJsZSBJbml0aWFsaXphdGlvbiBhbmQgRklCIE5vdGlmaWVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBmcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGNhbiBlc3RhYmxpc2ggYSBmbG93dGFibGUsIGVpdGhlciBkaXJlY3RseSB3aXRoIHRoZSBgTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEYCBmbGFnLCBvciBpbmRpcmVjdGx5IHZpYSBgdGMgYWN0aW9uIGN0YC4gIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHdoZW4gdGhpcyBmbG93dGFibGUgaXMgaW5pdGlhbGl6ZWQsIGBuZl9mbG93X3RhYmxlX2luaXRgIGlzIGludm9rZWQuICBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBpZiBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoKWAgcmV0dXJucyB0cnVlLCBhIEZJQiBub3RpZmllciBnZXRzIHJlZ2lzdGVyZWQuCgpFc3NlbnRpYWxseSwgd2hlbmV2ZXIgdGhlIHJvdXRpbmcgdGFibGUgKEZJQikgaXMgbW9kaWZpZWQsIHRoZSBgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiB0aGVuIHF1ZXVlcyBhIHdvcmsgaXRlbSwgYGZpYl93b3JrYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBwcm9jZXNzZWQgYnkgYG5mX2Zsb3dfdGFibGVfZmliX3dvcmtgLiAgVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBtZWNoYW5pc20gZm9yIGtlZXBpbmcgdGhlIGZsb3d0YWJsZSBzeW5jaHJvbml6ZWQgd2l0aCByb3V0aW5nIGNoYW5nZXMuCgpUaGlzIHdob2xlIHByb2Nlc3MgYXBwZWFycyBlbWluZW50bHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSwgZXZlbiB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBnb29kLiBXZSBjYW4gZGVmaW5pdGVseSBzaW11bGF0ZSB2YXJpb3VzIHJvdXRpbmcgZXZlbnRzIGFuZCBtb25pdG9yIHRoZSBmbG93dGFibGUmIzM5O3MgcmVhY3Rpb25zLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNgIHRvIHNlZSB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZW50aXJlIHByb2Nlc3MgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfY29yZVxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBGbG93IFRhYmxlIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgKmRlZmluaXRlbHkqIHJlbGllcyBvbiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWc7IGEgbWlzc2luZyBmbG93IHRhYmxlIHdvdWxkIG9idmlvdXNseSBicmVhayBmdW5jdGlvbmFsaXR5LiBUaGVuLCBpdCYjMzk7cyBsZXZlcmFnaW5nIGBDT05GSUdfSVBWNmAgZm9yIElQdjYgc3VwcG9ydCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gR2l2ZW4gdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBmbG93IHRhYmxlIGFuZCBJUHY2LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gY2hlY2sgdGhlcmUgZm9yIHRoZSBgTkZfRkxPV19UQUJMRWAgb3B0aW9uIHRvIHZlcmlmeSBpdHMgZGV0YWlscyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIHRoYXQgY29uZmlnIG9wdGlvbiBiZXR0ZXIgd2lsbCBndWlkZSBob3cgSSBwcm9jZWVkIGZyb20gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIENvcmUgTmV0d29yayBGbG93IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIHByaW1hcnkgZm9jdXMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyBuZXR3b3JrIGZsb3cgZW50cmllcywgbGlrZWx5IGZvciBzb21ldGhpbmcgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93LWJhc2VkIHJvdXRpbmcsIG9yIHBlcmhhcHMgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCB1c2VyLXNwYWNlIG5ldHdvcmsgYWNjZWxlcmF0aW9uIG1lY2hhbmlzbS4KCkFuZCB0aGVuIEkgc2VlIHRoZSBtZW50aW9uIG9mIGByZWdpc3Rlcl9maWJfbm90aWZpZXJgLiBSaWdodCwgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbiBgbmV0L2NvcmUvZmliX25vdGlmaWVyLmNgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGhpbnQuIGBmaWJgIG1lYW5zIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSwgd2hpY2ggZGVhbHMgd2l0aCByb3V0aW5nIHRhYmxlcy4gYE5vdGlmaWVyYCBpbmRpY2F0ZXMgYW4gZXZlbnQtZHJpdmVuIG1lY2hhbmlzbS4gVGh1cywgdGhlIGNvZGUgaXMgbGlrZWx5IHJlZ2lzdGVyaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgbm90aWZpZWQgb2YgY2hhbmdlcyB0byB0aGUgcm91dGluZyB0YWJsZS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIG5ldHdvcmsgZmxvdyB0YWJsZSYjMzk7cyBiZWhhdmlvciBvciBlbnRyaWVzIGFyZSBsaWtlbHkgKmRlcGVuZGVudCogb24gdGhlIHN0YXRlIG9mIHRoZSByb3V0aW5nIHRhYmxlLiBDaGFuZ2VzIHRvIHJvdXRlcyAoYWRkZWQsIHJlbW92ZWQsIG1vZGlmaWVkKSBsaWtlbHkgdHJpZ2dlciBzb21lIGFjdGlvbiByZWxhdGVkIHRvIHRoZSBmbG93IHRhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBub3RpZmllciBjYWxsYmFjayB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBmbG93IHRhYmxlIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24uIFRoaXMgbWlnaHQgaW52b2x2ZSB0aGluZ3MgbGlrZSBpbnZhbGlkYXRpbmcgY2FjaGVkIGZsb3cgZW50cmllcywgdXBkYXRpbmcgcm91dGVzIHdpdGhpbiB0aGUgZmxvdyB0YWJsZSBpdHNlbGYsIG9yIHBlcmhhcHMgZXZlbiBhbHRlcmluZyBob3cgcGFja2V0cyBhcmUgbWF0Y2hlZCB0byBmbG93IGVudHJpZXMgYmFzZWQgb24gcm91dGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVnaXN0ZXJfZmliX25vdGlmaWVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zd2l0Y2hkZXYucnN0PTM0OT1UbyBwcm9ncmFtIHRoZSBkZXZpY2UsIHRoZSBkcml2ZXIgaGFzIHRvIHJlZ2lzdGVyIGEgRklCIG5vdGlmaWVyIGhhbmRsZXJcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zd2l0Y2hkZXYucnN0OjM1MDp1c2luZyByZWdpc3Rlcl9maWJfbm90aWZpZXIuIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBhdmFpbGFibGU6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc3dpdGNoZGV2LnJzdC0zNTEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYz0xNTQ4PWludCBwcmVzdGVyYV9yb3V0ZXJfaW5pdChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDAtXHRyb3V0ZXItXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBfX3ByZXN0ZXJhX3JvdXRlcl9maWJfZXZlbnQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jOjE2MDE6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnJvdXRlci1cdTAwM2VmaWJfbmIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDItXHRcdFx0XHQgICAgLyogVE9ETzogZmx1c2ggZmliIGVudHJpZXMgKi8gTlVMTCwgTlVMTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDMtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYzoxNjA0Olx0XHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYy0xNjA3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYzoxNjA4OmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDktXHR1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKFx1MDAyNnJvdXRlci1cdTAwM2VuZXRldmVudF9uYik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYz0xNjI5PXZvaWQgcHJlc3RlcmFfcm91dGVyX2Zpbmkoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYzoxNjMxOlx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnN3LVx1MDAzZXJvdXRlci1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYy0xNjMyLVx0dW5yZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcihcdTAwMjZzdy1cdTAwM2Vyb3V0ZXItXHUwMDNlbmV0ZXZlbnRfbmIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYz0xODYwPXN0cnVjdCBtbHg1ZV90Y190dW5fZW5jYXAgKm1seDVlX3RjX3R1bl9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy0xODcyLVx0aGFzaF9pbml0KGVuY2FwLVx1MDAzZXJvdXRlX3RibCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM6MTg3MzpcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZfbmV0KHByaXYtXHUwMDNlbmV0ZGV2KSwgXHUwMDI2ZW5jYXAtXHUwMDNlZmliX25iLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTE4NzQtXHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jPTE4ODM9dm9pZCBtbHg1ZV90Y190dW5fY2xlYW51cChzdHJ1Y3QgbWx4NWVfdGNfdHVuX2VuY2FwICplbmNhcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtMTg4Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzoxODg4Olx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2X25ldChlbmNhcC1cdTAwM2Vwcml2LVx1MDAzZW5ldGRldiksIFx1MDAyNmVuY2FwLVx1MDAzZWZpYl9uYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtMTg4OS1cdGZsdXNoX3dvcmtxdWV1ZShlbmNhcC1cdTAwM2Vwcml2LVx1MDAzZXdxKTsgLyogZmx1c2ggZmliIGV2ZW50IHdvcmtzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTQzND1pbnQgbWx4NWVfdGNfZXN3X2luaXQoc3RydWN0IG1seDVfcmVwX3VwbGlua19wcml2ICp1cGxpbmtfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NDg4LVx0XHRlcnIgPSBQVFJfRVJSKHVwbGlua19wcml2LVx1MDAzZWVuY2FwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU0ODk6XHRcdGdvdG8gZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU0OTAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTUwMS1cdG1seDVlX3RjX3R1bl9jbGVhbnVwKHVwbGlua19wcml2LVx1MDAzZWVuY2FwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU1MDI6ZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU1MDMtXHRtYXBwaW5nX2Rlc3Ryb3kodXBsaW5rX3ByaXYtXHUwMDNldHVubmVsX2VuY19vcHRzX21hcHBpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYz0zNzI9aW50IG1seDVfbGFnX21wX2luaXQoc3RydWN0IG1seDVfbGFnICpsZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy0zODktXHRtcC1cdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG1seDVfbGFnX2ZpYl9ldmVudDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYzozOTA6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNm1wLVx1MDAzZWZpYl9uYixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy0zOTEtXHRcdFx0XHQgICAgbWx4NV9sYWdfZmliX2V2ZW50X2ZsdXNoLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL21wLmM9NDAwPXZvaWQgbWx4NV9sYWdfbXBfY2xlYW51cChzdHJ1Y3QgbWx4NV9sYWcgKmxkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jLTQwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYzo0MDc6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihcdTAwMjZpbml0X25ldCwgXHUwMDI2bXAtXHUwMDNlZmliX25iKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy00MDgtXHRkZXN0cm95X3dvcmtxdWV1ZShtcC1cdTAwM2V3cSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTE1NzY9aW50IG1seHN3X3NwX3JvdXRlcl9pbml0KHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE2OTYtXHRtbHhzd19zcC1cdTAwM2Vyb3V0ZXItXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBtbHhzd19zcF9yb3V0ZXJfZmliX2V2ZW50O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE2OTc6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIobWx4c3dfc3BfbmV0KG1seHN3X3NwKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNjk4LVx0XHRcdFx0ICAgIFx1MDAyNm1seHN3X3NwLVx1MDAzZXJvdXRlci1cdTAwM2VmaWJfbmIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3MDAtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3MDE6XHRcdGdvdG8gZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzAyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3MDU6ZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzA2LVx0dW5yZWdpc3Rlcl9uZXh0aG9wX25vdGlmaWVyKG1seHN3X3NwX25ldChtbHhzd19zcCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTE3NTU9dm9pZCBtbHhzd19zcF9yb3V0ZXJfZmluaShzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3NTk6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihtbHhzd19zcF9uZXQobWx4c3dfc3ApLCBcdTAwMjZyb3V0ZXItXHUwMDNlZmliX25iKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzYwLVx0dW5yZWdpc3Rlcl9uZXh0aG9wX25vdGlmaWVyKG1seHN3X3NwX25ldChtbHhzd19zcCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmM9Mjg0ND1zdGF0aWMgaW50IHJvY2tlcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NDItXHRyb2NrZXItXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSByb2NrZXJfcm91dGVyX2ZpYl9ldmVudDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jOjI5NDM6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnJvY2tlci1cdTAwM2VmaWJfbmIsIE5VTEwsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMjk0NC1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTQ1Olx0XHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0yOTQ2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NjktZXJyX3JlZ2lzdGVyX3N3aXRjaGRldl9ub3RpZmllcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jOjI5NzA6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihcdTAwMjZpbml0X25ldCwgXHUwMDI2cm9ja2VyLVx1MDAzZWZpYl9uYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTcxOmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0yOTcyLVx0cm9ja2VyX3JlbW92ZV9wb3J0cyhyb2NrZXIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jPTI5OTc9c3RhdGljIHZvaWQgcm9ja2VyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0zMDA1LVx0dW5yZWdpc3Rlcl9zd2l0Y2hkZXZfbm90aWZpZXIoXHUwMDI2cm9ja2VyX3N3aXRjaGRldl9ub3RpZmllcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzozMDA2Olx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnJvY2tlci1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMzAwNy1cdHJvY2tlcl9yZW1vdmVfcG9ydHMocm9ja2VyKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmM9MTU1Mj1zdHJ1Y3QgbnNpbV9maWJfZGF0YSAqbnNpbV9maWJfY3JlYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYy0xNTkyLVx0ZGF0YS1cdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5zaW1fZmliX2V2ZW50X25iO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE1OTM6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFx1MDAyNmRhdGEtXHUwMDNlZmliX25iLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE1OTQtXHRcdFx0XHQgICAgbnNpbV9maWJfZHVtcF9pbmNvbnNpc3RlbnQsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2MjYtZXJyX2ZpYl9ub3RpZmllcl91bnJlZ2lzdGVyOlxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE2Mjc6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZsaW5rX25ldChkZXZsaW5rKSwgXHUwMDI2ZGF0YS1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2MjgtZXJyX25leHRob3BfbmJfdW5yZWdpc3Rlcjpcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmM9MTY0NT12b2lkIG5zaW1fZmliX2Rlc3Ryb3koc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBuc2ltX2ZpYl9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYy0xNjU3LVx0bnNpbV9maWJfZGVidWdmc19leGl0KGRhdGEpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE2NTg6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZsaW5rX25ldChkZXZsaW5rKSwgXHUwMDI2ZGF0YS1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2NTktXHR1bnJlZ2lzdGVyX25leHRob3Bfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFx1MDAyNmRhdGEtXHUwMDNlbmV4dGhvcF9uYik7XG4tLVxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmg9NDE9aW50IGNhbGxfZmliX25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gZmliX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSxcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oLTQyLVx0XHQgICAgICAgc3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvKTtcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oOjQzOmludCByZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDQtXHRcdFx0ICB2b2lkICgqY2IpKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpLFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDUtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmg6NDY6aW50IHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG5pbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaC00Ny1zdHJ1Y3QgZmliX25vdGlmaWVyX29wcyAqXG4tLVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM9ODI9c3RhdGljIGJvb2wgZmliX2R1bXBfaXNfY29uc2lzdGVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtOTctI2RlZmluZSBGSUJfRFVNUF9NQVhfUkVUUklFUyA1XG5uZXQvY29yZS9maWJfbm90aWZpZXIuYzo5ODppbnQgcmVnaXN0ZXJfZmliX25vdGlmaWVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTk5LVx0XHRcdCAgdm9pZCAoKmNiKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKSxcbi0tXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYy0xMTctfVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTE4OkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZmliX25vdGlmaWVyKTtcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTExOS1cbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jOjEyMDppbnQgdW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtMTIxLXtcbi0tXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYy0xMjUtfVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTI2OkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9maWJfbm90aWZpZXIpO1xubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtMTI3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODY3PWludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODg3LVx0XHRmbG93dGFibGUtXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODg4Olx0XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIobmV0LCBcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX25iLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04ODktXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk1Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTU0LVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjk1NTpcdFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIocmVhZF9wbmV0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlbmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTU2LVx0XHRcdFx0XHRcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9uYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBGaWIgTm90aWZpZXIgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIGByZWdpc3Rlcl9maWJfbm90aWZpZXJgLi4uIEkga25vdyB0aGF0IG9uZS4gSXQmIzM5O3MgaW4gYG5ldC9jb3JlL2ZpYl9ub3RpZmllci5jYC4gVGhhdCBmaWxlIHNob3VsZCBiZSBjb21waWxlZCwgb2J2aW91c2x5LCBhcyBsb25nIGFzIGBDT05GSUdfTkVUYCBpcyBzZXQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCB0aG91Z2gsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLiBHb3R0YSBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaG93IGl0JiMzOTtzIGludGVncmF0ZWQsIHNvIGEgZG91YmxlLWNoZWNrIGlzIHdvcnRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfbm90aWZpZXJcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbi0tXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxNTpcdFx0XHRmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTYtXHRcdFx0bmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1Olx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgZmliX25vdGlmaWVyLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBidWlsdCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgYE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBuZl90YWJsZXNgIGZyYW1ld29yaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZTsgaXQgd2lsbCBjb250YWluIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJJiMzOTttIHRoaW5raW5nIHdlJiMzOTtsbCBuZWVkIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBkZWZpbmVkLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSAqbmZ0YWJsZXMgbW9kdWxlKiBzcGVjaWZpY2FsbHkgZm9yIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1Bcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTAxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRW5hYmxpbmcgQWR2YW5jZWQgRmxvdyBPZmZsb2FkaW5nIGZvciBFbmhhbmNlZCBQZXJmb3JtYW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSByZXF1aXJlbWVudHMsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBzZXJpb3VzbHkgY29uc2lkZXIgZW5hYmxpbmcgYm90aCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYC4gV2UmIzM5O3ZlIHNlZW4gdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIHRoZXNlIGZlYXR1cmVzIGJyaW5nIHRvIHRoZSB0YWJsZSBpbiBzaW1pbGFyIGRlcGxveW1lbnRzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBwb3RlbnRpYWwgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aCBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgcGFydGljdWxhcmx5IGFwcGVhbGluZyBmb3IgaGlnaC10aHJvdWdocHV0IHNjZW5hcmlvcywgYW5kIHdlIHdhbnQgdG8gZW5zdXJlIHdlIGFyZSBsZXZlcmFnaW5nIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgdG8gdXMuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBhbHNvIGFkZGluZyBgTkVUX0FDVF9DVGAgdG8gdGhlIGNoZWNrbGlzdC4gVGhlIGB0YyBhY3Rpb24gY3RgIGludGVncmF0aW9uIGlzIGNydWNpYWwgYXMgdGhpcyB3aWxsIGFsbG93IHVzIHRvIGxldmVyYWdlIGZsb3cgdGFibGVzIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay4gVGhpcyBsZXZlbCBvZiBncmFudWxhciBjb250cm9sIGlzIGVzc2VudGlhbCBmb3IgZmluZS10dW5pbmcgb3VyIG5ldHdvcmtpbmcgYmVoYXZpb3IgYW5kIG1heGltaXppbmcgZWZmaWNpZW5jeSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGNhcGFiaWxpdGllcyBvZiBmbG93IHRhYmxlcy4gV2UgY2FuIGdhaW4gYSBsb3QgYnkgY29tYmluaW5nIHRoZXNlIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9DVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NjQtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG5uZXQvc2NoZWQvS2NvbmZpZy04NjYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTkxNi1cbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxubmV0L3NjaGVkL0tjb25maWctOTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2N1cyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgYSBzYW5pdHkgY2hlY2sgb24gdGhlIGZvY3VzIHN5bWJvbHMgYWRkZWQgYnkgdGhpcyBwYXRjaC4gIEEgcXVpY2sgc2NhbiBzaG93czogYG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoYCwgYG5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hgLCBgbmZfZmxvd19vZmZsb2FkX2ZpYl9jYmAsIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYCwgYG5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoYCwgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YCwgYW5kIGBuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbmAuIFl1cCwgdGhvc2UgbG9vayBsaWtlIHNvbGlkIGZvY3VzIHBvaW50cy4gTm93LCBsZXQmIzM5O3MgZ2V0IHRoZW0gb3JnYW5pemVkIGludG8gYSBjbGVhciBsaXN0IGZvciBlYXNpZXIgcmVmZXJlbmNlOgoKKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudGAKKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYAoqICAgYG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JgCiogICBgbmZfZmxvd19maWJfZmxvd19tYXRjaGAKKiAgIGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGAKKiAgIGBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaGAKKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbmAKCkFscmlnaHQsIG5leHQgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YC4gSSBzZWUgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBhIG5vdGlmaWVyIHVzaW5nIGByZWdpc3Rlcl9maWJfbm90aWZpZXJgLiAgQW5kIHllcywgd2hlbiByb3V0ZXMgYXJlIGFkZGVkLCB0aGUgYGNhbGxfZmliX25vdGlmaWVyc2AgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQsIGluIHR1cm4gY2FsbGluZyB0aGUgbm90aWZpZXIgY2FsbGJhY2suICBTbywgd2UgY2FuIHNheSB3aXRoIGNvbmZpZGVuY2UgdGhhdCBpdCBpcyBpbmRlZWQgcmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIG5haWxlZCBkb3duLiAgVGhpcyBwYXRjaCBzZWVtcyB0byBuZWVkOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYW5kIGBORVRfQUNUX0NUYC4gIEkgY2FuIHNlZSBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBpbiB0aGUgY29kZSwgc28gZGVmaW5pdGVseSBgSVBWNmAgYXMgd2VsbC4KCkkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYElQVjZgIGRlcGVuZGVuY3kuICBZZXMsIGhlcmUgaXQgaXM6CgpgYGBjCiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJY2FzZSBORlBST1RPX0lQVjY6CgkJcmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKCZhbXA7dHVwbGUtJmd0O2RzdF92NiwgJmFtcDtldi0mZ3Q7YWRkci5pcDYsCgkJCQkJIGV2LSZndDtwcmVmaXhfbGVuKTsKI2VuZGlmCmBgYAoKT2theSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoYXQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGgsIHVuZGVyc3Rvb2QuCgpGaW5hbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQuICBgTkZfRkxPV19UQUJMRV9JTkVUYCBjb21lcyB0byBtaW5kOyBpdCYjMzk7cyBwb3NzaWJsZSB0aGF0JiMzOTtzIG5lZWRlZCBmb3Igc3VwcG9ydGluZyBtaXhlZCBJUHY0L0lQdjYgZmxvdyB0YWJsZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgYXMgcGFydCBvZiB0aGUgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFX0lORVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipDaGVja2luZyB0aGUgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGFscmVhZHkgZGVlcCBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiwgYnV0IGJlZm9yZSBJIGNvbW1pdCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRob3NlIGZsb3cgdGFibGUgb3B0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTt2ZSBjb25zaWRlcmVkIGFsbCByZWxldmFudCBzZXR0aW5ncywgZXNwZWNpYWxseSBnaXZlbiB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgSVAgdmVyc2lvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG92ZXJsb29rIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAuIEl0JiMzOTtzIGVhc3kgdG8gbWlzcyBhIGNydWNpYWwgc2V0dGluZyB3aGVuIHlvdSYjMzk7cmUgZm9jdXNpbmcgb24gb25lIHNwZWNpZmljIGFzcGVjdCwgc28gYSBmaW5hbCwgY29tcHJlaGVuc2l2ZSBzd2VlcCBpcyBhbHdheXMgd2FycmFudGVkLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbiB0aGUgbG9uZyBydW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSVBWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYE5GX0ZMT1dfVEFCTEVfSVBWNGAgd2FzIGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCBpdCYjMzk7cyBhY3R1YWxseSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIHRydXRoIGFib3V0IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzLCBvZiBjb3Vyc2UsIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgSVBWNCBmbG93cywgdGhlIGxpa2VseSBwbGFjZSBpcyBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTtsbCBoZWFkIHRoZXJlIGFuZCBoYXZlIGEgbG9vay4gSG9wZWZ1bGx5LCB0aGlzIGNsZWFycyBpdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjYKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSB0aG9zZSBpbml0aWFsIHN5bWJvbHMgSSB3YXMgbG9va2luZyBhdCBhcmVuJiMzOTt0IHJlbGV2YW50LCB0aGUgaW1wb3J0YW50IG9uZXMgYXJlIGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIEZJQiBldmVudCBoYW5kbGluZyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29kZSwgc3BlY2lmaWNhbGx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBhY3RpdmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IG1hbmFnaW5nIGZsb3cgdGFibGUgZW50cmllcyBiYXNlZCBvbiBjaGFuZ2VzIHRvIHRoZSBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikuIEl0IHJlZ2lzdGVycyBhIG5vdGlmaWVyIGZvciBGSUIgZXZlbnRzIGFuZCB0ZWFycyBkb3duIGZsb3dzIHRoYXQgYXJlIG5vdyBpbnZhbGlkIGJlY2F1c2UgdGhleSBtYXRjaCB0aGUgcm91dGluZyBjaGFuZ2VzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHBvdGVudGlhbCBpbXBhY3QuIEkgY2FuIHRyaWdnZXIgdGhpcyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1lc3Npbmcgd2l0aCByb3V0aW5nIHRhYmxlcy4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIGZvY3VzIGFyZWE6IEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM6IGBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudGAsIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYCwgYG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JgLCBgbmZfZmxvd19maWJfZmxvd19tYXRjaGAsIGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGAsIGBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaGAsIGFuZCBgbmZfZmxvd190YWJsZV9maWJfZHJhaW5gLgoKVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBicmluZyB0aGlzIGNvZGUgaW50byBwbGF5IGFyZSBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9BQ1RfQ1RgLCBhbmQgYElQVjZgLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIGNyYWZ0aW5nIHRlc3QgY2FzZXMuCgpMZXQmIzM5O3MgZG8gYSBsaXR0bGUgbW9yZSBkaWdnaW5nLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGVuYWJsZWQuIEl0IHVzZXMgc3RhbmRhcmQgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmcm9tIGBpbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaGAsIGBpbmNsdWRlL25ldC9pcF9maWIuaGAsIGFuZCBgaW5jbHVkZS9uZXQvaXA2X2ZpYi5oYCwgd2hpY2ggaXMgYWxsIHByZXR0eSBzdGFuZGFyZCBuZXR3b3JraW5nIGZhcmUuIE5vdGhpbmcganVtcHMgb3V0IGFzIHVudXN1YWxseSBjb21wbGV4IG9yIGRhbmdlcm91cyAqeWV0KiwgYnV0IHRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgbG9naWMgaXMgYmVpbmcgbW9kaWZpZWQuCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZXZlbnQmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfd29yayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZmliX2NiJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfZmliX2Zsb3dfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd19maWJfdHVwbGVfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBGSUIgZXZlbnQgaGFuZGxpbmcgdG8gbmV0ZmlsdGVyIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBJdCByZWdpc3RlcnMgYSBGSUIgbm90aWZpZXIgYW5kIHRlYXJzIGRvd24gZmxvd3MgdGhhdCBtYXRjaCB0aGUgRklCIGV2ZW50JiMzOTtzIHByZWZpeC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBhbmQgbW9kaWZ5aW5nIHJvdXRpbmcgdGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZXZlbnQmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfd29yayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZmliX2NiJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfZmliX2Zsb3dfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd19maWJfdHVwbGVfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBGSUIgZXZlbnQgaGFuZGxpbmcgdG8gbmV0ZmlsdGVyIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBJdCByZWdpc3RlcnMgYSBGSUIgbm90aWZpZXIgYW5kIHRlYXJzIGRvd24gZmxvd3MgdGhhdCBtYXRjaCB0aGUgRklCIGV2ZW50JiMzOTtzIHByZWZpeC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBhbmQgbW9kaWZ5aW5nIHJvdXRpbmcgdGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDg6NDQuNTc1MDY4MTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzUwODQ3NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X3RhYmxlX2ZpYl9ldmVudFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9maWJfd29ya1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2ZpYl9jYlwiLFxuICAgIFwibmZfZmxvd19maWJfZmxvd19tYXRjaFwiLFxuICAgIFwibmZfZmxvd19maWJfdHVwbGVfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2ZpYl9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgRklCIGV2ZW50IGhhbmRsaW5nIHRvIG5ldGZpbHRlciBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gSXQgcmVnaXN0ZXJzIGEgRklCIG5vdGlmaWVyIGFuZCB0ZWFycyBkb3duIGZsb3dzIHRoYXQgbWF0Y2ggdGhlIEZJQiBldmVudCdzIHByZWZpeC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBhbmQgbW9kaWZ5aW5nIHJvdXRpbmcgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowODo0NC41NzUwNzQ2NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjE0MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk3Yzg2NDkxNDM1MTc5YzEyN2ZjMzk5ZDRlMDYyYjBlNjQ5MWIwMWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxNTowODo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbmluZGV4IDdiMjNiMjQ1YTVhODZhLi43YzM2MjU1ZjVhNGY5MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbkBAIC04NCw2ICs4NCw5IEBAIHN0cnVjdCBuZl9mbG93dGFibGUge1xcbiBcXHRzdHJ1Y3QgZmxvd19ibG9ja1xcdFxcdGZsb3dfYmxvY2s7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRcXHRmbG93X2Jsb2NrX2xvY2s7IC8qIEd1YXJkcyBmbG93X2Jsb2NrICovXFxuIFxcdHBvc3NpYmxlX25ldF90XFx0XFx0XFx0bmV0O1xcbitcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcXHRcXHRmaWJfbmI7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdFxcdGZpYl93b3JrO1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdFxcdGZpYl9ldmVudHM7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbmluZGV4IDk5YzViOWQ2NzFhMGNhLi4yYzkxMjA1NjkyMWFlMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbkBAIC01LDggKzUsMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfZmliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG5AQCAtNjk1LDExICs2OTksMTc5IEBAIHZvaWQgbmZfZmxvd19kbmF0X3BvcnQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XFxuIFxcbitzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2gge1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZVxcdCpldmVudHM7XFxuK307XFxuK1xcbitzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQge1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZVxcdG5vZGU7XFxuK1xcdHU4XFx0XFx0XFx0ZmFtaWx5O1xcbitcXHR1OFxcdFxcdFxcdHByZWZpeF9sZW47XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0X19iZTMyXFx0XFx0aXA0O1xcbitcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpcDY7XFxuK1xcdH0gYWRkcjtcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldilcXG4re1xcbitcXHRpZiAodHVwbGUtXFx1MDAzZWwzcHJvdG8gIT0gZXYtXFx1MDAzZWZhbWlseSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoIChldi1cXHUwMDNlZmFtaWx5KSB7XFxuK1xcdGNhc2UgTkZQUk9UT19JUFY0OiB7XFxuK1xcdFxcdF9fYmUzMiBtYXNrID0gZXYtXFx1MDAzZXByZWZpeF9sZW4gP1xcbitcXHRcXHRcXHRodG9ubCh+MHUgXFx1MDAzY1xcdTAwM2MgKDMyIC0gZXYtXFx1MDAzZXByZWZpeF9sZW4pKSA6IDA7XFxuK1xcdFxcdHJldHVybiAodHVwbGUtXFx1MDAzZWRzdF92NC5zX2FkZHIgXFx1MDAyNiBtYXNrKSA9PSAoZXYtXFx1MDAzZWFkZHIuaXA0IFxcdTAwMjYgbWFzayk7XFxuK1xcdH1cXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuK1xcdGNhc2UgTkZQUk9UT19JUFY2OlxcbitcXHRcXHRyZXR1cm4gaXB2Nl9wcmVmaXhfZXF1YWwoXFx1MDAyNnR1cGxlLVxcdTAwM2Vkc3RfdjYsIFxcdTAwMjZldi1cXHUwMDNlYWRkci5pcDYsXFxuK1xcdFxcdFxcdFxcdFxcdCBldi1cXHUwMDNlcHJlZml4X2xlbik7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZfZmxvd19maWJfZmxvd19tYXRjaChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggKm0pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3JpZywgKnJlcGx5O1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2O1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdG9yaWcgID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZTtcXG4rXFx0cmVwbHkgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLnR1cGxlO1xcbitcXG4rXFx0Zm9yIChub2RlID0gbS1cXHUwMDNlZXZlbnRzOyBub2RlOyBub2RlID0gbm9kZS1cXHUwMDNlbmV4dCkge1xcbitcXHRcXHRldiA9IGxsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCwgbm9kZSk7XFxuK1xcdFxcdGlmIChuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChvcmlnLCBldikgfHxcXG4rXFx0XFx0ICAgIG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoKHJlcGx5LCBldikpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggKm0gPSBkYXRhO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChuZl9mbG93X2ZpYl9mbG93X21hdGNoKGZsb3csIG0pKVxcbitcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPVxcbitcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZmliX3dvcmspO1xcbitcXHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDtcXG4rXFx0c3RydWN0IG5mX2Zsb3dfZmliX21hdGNoIG0gPSB7fTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmV2ZW50cztcXG4rXFxuK1xcdGV2ZW50cyA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl9ldmVudHMpO1xcbitcXHRpZiAoIWV2ZW50cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bS5ldmVudHMgPSBldmVudHM7XFxuK1xcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZmliX2NiLCBcXHUwMDI2bSk7XFxuK1xcbitcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpXFxuK1xcdFxcdGtmcmVlKGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2goY29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHU4IGV2ZW50X2ZhbWlseSlcXG4re1xcbitcXHRzd2l0Y2ggKGZsb3d0YWJsZS1cXHUwMDNldHlwZS1cXHUwMDNlZmFtaWx5KSB7XFxuK1xcdGNhc2UgTkZQUk9UT19JUFY0OlxcbitcXHRcXHRyZXR1cm4gZXZlbnRfZmFtaWx5ID09IE5GUFJPVE9fSVBWNDtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdFxcdHJldHVybiBldmVudF9mYW1pbHkgPT0gTkZQUk9UT19JUFY2O1xcbitcXHRjYXNlIE5GUFJPVE9fSU5FVDpcXG4rXFx0XFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQgfHxcXG4rXFx0XFx0ICAgICAgIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG4rc3RhdGljIGludCBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuK3tcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZmliX25iKTtcXG4rXFx0c3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvID0gcHRyO1xcbitcXHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2O1xcbitcXG4rXFx0c3dpdGNoIChldmVudCkge1xcbitcXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9SRVBMQUNFOlxcbitcXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9BUFBFTkQ6XFxuK1xcdGNhc2UgRklCX0VWRU5UX0VOVFJZX0RFTDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCBldmVudHMgZm9yIGFuIGFkZHJlc3MgZmFtaWx5IHRoaXMgdGFibGUgY2Fubm90IGhvbGQuICovXFxuK1xcdGlmICghbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2goZmxvd190YWJsZSwgaW5mby1cXHUwMDNlZmFtaWx5KSlcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0ZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFldilcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0c3dpdGNoIChpbmZvLVxcdTAwM2VmYW1pbHkpIHtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuK1xcdFxcdHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbyAqZmVuO1xcbitcXG4rXFx0XFx0ZmVuID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbywgaW5mbyk7XFxuK1xcdFxcdGV2LVxcdTAwM2VmYW1pbHkgICAgID0gTkZQUk9UT19JUFY0O1xcbitcXHRcXHRldi1cXHUwMDNlYWRkci5pcDQgICA9IGh0b25sKGZlbi1cXHUwMDNlZHN0KTtcXG4rXFx0XFx0ZXYtXFx1MDAzZXByZWZpeF9sZW4gPSBmZW4tXFx1MDAzZWRzdF9sZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuK1xcdGNhc2UgTkZQUk9UT19JUFY2OlxcbitcXHRcXHRzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW42O1xcbitcXG4rXFx0XFx0ZmVuNiA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvLCBpbmZvKTtcXG4rXFx0XFx0aWYgKCFmZW42LVxcdTAwM2VydClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRldi1cXHUwMDNlZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNjtcXG4rXFx0XFx0ZXYtXFx1MDAzZWFkZHIuaXA2ICAgPSBmZW42LVxcdTAwM2VydC1cXHUwMDNlZmliNl9kc3QuYWRkcjtcXG4rXFx0XFx0ZXYtXFx1MDAzZXByZWZpeF9sZW4gPSBmZW42LVxcdTAwM2VydC1cXHUwMDNlZmliNl9kc3QucGxlbjtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZldi1cXHUwMDNlbm9kZSwgXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl9ldmVudHMpO1xcbitcXHRxdWV1ZV93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VmaWJfd29yayk7XFxuK1xcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFxuK2VycjpcXG4rXFx0a2ZyZWUoZXYpO1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuIGludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmliX3dvcmssIG5mX2Zsb3dfdGFibGVfZmliX3dvcmspO1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmliX2V2ZW50cyk7XFxuIFxcdGZsb3dfYmxvY2tfaW5pdChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xcbiBcXG5AQCAtNzExLDExICs4ODMsMjQgQEAgaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuIFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLFxcbiBcXHRcXHRcXHQgICBcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuIFxcbitcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd3RhYmxlKSkge1xcbitcXHRcXHRmbG93dGFibGUtXFx1MDAzZWZpYl9uYi5ub3RpZmllcl9jYWxsID0gbmZfZmxvd190YWJsZV9maWJfZXZlbnQ7XFxuK1xcdFxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsIFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZpYl9uYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfZmliO1xcbitcXHR9XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZmbG93dGFibGVzKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9maWI6XFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VnY193b3JrKTtcXG4rXFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZXJoYXNodGFibGUpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XFxuIFxcbkBAIC03NTQsOCArOTM5LDI1IEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcXG4gXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX2RyYWluKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuK3tcXG4rXFx0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldiwgKm5leHQ7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpldmVudHM7XFxuK1xcbitcXHRldmVudHMgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VmaWJfZXZlbnRzKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldiwgbmV4dCwgZXZlbnRzLCBub2RlKVxcbitcXHRcXHRrZnJlZShldik7XFxuK31cXG4rXFxuIHZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuIHtcXG4rXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7XFxuK1xcdFxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKHJlYWRfcG5ldChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlbmV0KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl9uYik7XFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl93b3JrKTtcXG4rXFx0XFx0bmZfZmxvd190YWJsZV9maWJfZHJhaW4oZmxvd190YWJsZSk7XFxuK1xcdH1cXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWxpc3QpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDg6NDUuNTE4MTAwMjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjg4MDc4MDQxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0FDVF9DVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX2V2ZW50XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2ZpYl93b3JrXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZmliX2NiXCIsXG4gICAgXCJuZl9mbG93X2ZpYl9mbG93X21hdGNoXCIsXG4gICAgXCJuZl9mbG93X2ZpYl90dXBsZV9tYXRjaFwiLFxuICAgIFwibmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBGSUIgZXZlbnQgaGFuZGxpbmcgdG8gbmV0ZmlsdGVyIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBJdCByZWdpc3RlcnMgYSBGSUIgbm90aWZpZXIgYW5kIHRlYXJzIGRvd24gZmxvd3MgdGhhdCBtYXRjaCB0aGUgRklCIGV2ZW50J3MgcHJlZml4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBtb2RpZnlpbmcgcm91dGluZyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTdjODY0OTE0MzUxNzljMTI3ZmMzOTlkNGUwNjJiMGU2NDkxYjAxZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTU6MDg6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjdjMzYyNTVmNWE0ZjkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTg0LDYgKzg0LDkgQEAgc3RydWN0IG5mX2Zsb3d0YWJsZSB7XG4gXHRzdHJ1Y3QgZmxvd19ibG9ja1x0XHRmbG93X2Jsb2NrO1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZVx0XHRmbG93X2Jsb2NrX2xvY2s7IC8qIEd1YXJkcyBmbG93X2Jsb2NrICovXG4gXHRwb3NzaWJsZV9uZXRfdFx0XHRcdG5ldDtcbitcdHN0cnVjdCBub3RpZmllcl9ibG9ja1x0XHRmaWJfbmI7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0ZmliX3dvcms7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZFx0XHRmaWJfZXZlbnRzO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggOTljNWI5ZDY3MWEwY2EuLjJjOTEyMDU2OTIxYWUwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTUsOCArNSwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXBfZmliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuQEAgLTY5NSwxMSArNjk5LDE3OSBAQCB2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfZG5hdF9wb3J0KTtcbiBcbitzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2gge1xuK1x0c3RydWN0IGxsaXN0X25vZGVcdCpldmVudHM7XG4rfTtcbitcbitzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQge1xuK1x0c3RydWN0IGxsaXN0X25vZGVcdG5vZGU7XG4rXHR1OFx0XHRcdGZhbWlseTtcbitcdHU4XHRcdFx0cHJlZml4X2xlbjtcbitcdHVuaW9uIHtcbitcdFx0X19iZTMyXHRcdGlwNDtcbitcdFx0c3RydWN0IGluNl9hZGRyXHRpcDY7XG4rXHR9IGFkZHI7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2KVxuK3tcbitcdGlmICh0dXBsZS1cdTAwM2VsM3Byb3RvICE9IGV2LVx1MDAzZWZhbWlseSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3dpdGNoIChldi1cdTAwM2VmYW1pbHkpIHtcbitcdGNhc2UgTkZQUk9UT19JUFY0OiB7XG4rXHRcdF9fYmUzMiBtYXNrID0gZXYtXHUwMDNlcHJlZml4X2xlbiA/XG4rXHRcdFx0aHRvbmwofjB1IFx1MDAzY1x1MDAzYyAoMzIgLSBldi1cdTAwM2VwcmVmaXhfbGVuKSkgOiAwO1xuK1x0XHRyZXR1cm4gKHR1cGxlLVx1MDAzZWRzdF92NC5zX2FkZHIgXHUwMDI2IG1hc2spID09IChldi1cdTAwM2VhZGRyLmlwNCBcdTAwMjYgbWFzayk7XG4rXHR9XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRjYXNlIE5GUFJPVE9fSVBWNjpcbitcdFx0cmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKFx1MDAyNnR1cGxlLVx1MDAzZWRzdF92NiwgXHUwMDI2ZXYtXHUwMDNlYWRkci5pcDYsXG4rXHRcdFx0XHRcdCBldi1cdTAwM2VwcmVmaXhfbGVuKTtcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGJvb2wgbmZfZmxvd19maWJfZmxvd19tYXRjaChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX21hdGNoICptKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm9yaWcsICpyZXBseTtcbitcdGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXY7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZTtcbitcbitcdG9yaWcgID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7XG4rXHRyZXBseSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLnR1cGxlO1xuK1xuK1x0Zm9yIChub2RlID0gbS1cdTAwM2VldmVudHM7IG5vZGU7IG5vZGUgPSBub2RlLVx1MDAzZW5leHQpIHtcbitcdFx0ZXYgPSBsbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQsIG5vZGUpO1xuK1x0XHRpZiAobmZfZmxvd19maWJfdHVwbGVfbWF0Y2gob3JpZywgZXYpIHx8XG4rXHRcdCAgICBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChyZXBseSwgZXYpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZmliX2NiKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCAqbSA9IGRhdGE7XG4rXG4rXHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChuZl9mbG93X2ZpYl9mbG93X21hdGNoKGZsb3csIG0pKVxuK1x0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZmliX3dvcmspO1xuK1x0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldiwgKm5leHQ7XG4rXHRzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggbSA9IHt9O1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKmV2ZW50cztcbitcbitcdGV2ZW50cyA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbitcdGlmICghZXZlbnRzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtLmV2ZW50cyA9IGV2ZW50cztcbitcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZmliX2NiLCBcdTAwMjZtKTtcbitcbitcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXYsIG5leHQsIGV2ZW50cywgbm9kZSlcbitcdFx0a2ZyZWUoZXYpO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaChjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4rXHRcdFx0XHRcdCAgdTggZXZlbnRfZmFtaWx5KVxuK3tcbitcdHN3aXRjaCAoZmxvd3RhYmxlLVx1MDAzZXR5cGUtXHUwMDNlZmFtaWx5KSB7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNDpcbitcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQ7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNjpcbitcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4rXHRjYXNlIE5GUFJPVE9fSU5FVDpcbitcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQgfHxcbitcdFx0ICAgICAgIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rfVxuK1xuKy8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xuK3N0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9maWJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbit7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID1cbitcdFx0Y29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBmaWJfbmIpO1xuK1x0c3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvID0gcHRyO1xuK1x0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldjtcbitcbitcdHN3aXRjaCAoZXZlbnQpIHtcbitcdGNhc2UgRklCX0VWRU5UX0VOVFJZX1JFUExBQ0U6XG4rXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9BUFBFTkQ6XG4rXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9ERUw6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1x0fVxuK1xuK1x0LyogU2tpcCBldmVudHMgZm9yIGFuIGFkZHJlc3MgZmFtaWx5IHRoaXMgdGFibGUgY2Fubm90IGhvbGQuICovXG4rXHRpZiAoIW5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoKGZsb3dfdGFibGUsIGluZm8tXHUwMDNlZmFtaWx5KSlcbitcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1xuK1x0ZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTtcbitcdGlmICghZXYpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2VmYW1pbHkpIHtcbitcdGNhc2UgTkZQUk9UT19JUFY0OlxuK1x0XHRzdHJ1Y3QgZmliX2VudHJ5X25vdGlmaWVyX2luZm8gKmZlbjtcbitcbitcdFx0ZmVuID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbywgaW5mbyk7XG4rXHRcdGV2LVx1MDAzZWZhbWlseSAgICAgPSBORlBST1RPX0lQVjQ7XG4rXHRcdGV2LVx1MDAzZWFkZHIuaXA0ICAgPSBodG9ubChmZW4tXHUwMDNlZHN0KTtcbitcdFx0ZXYtXHUwMDNlcHJlZml4X2xlbiA9IGZlbi1cdTAwM2Vkc3RfbGVuO1xuK1x0XHRicmVhaztcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGNhc2UgTkZQUk9UT19JUFY2OlxuK1x0XHRzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW42O1xuK1xuK1x0XHRmZW42ID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8sIGluZm8pO1xuK1x0XHRpZiAoIWZlbjYtXHUwMDNlcnQpXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdGV2LVx1MDAzZWZhbWlseSAgICAgPSBORlBST1RPX0lQVjY7XG4rXHRcdGV2LVx1MDAzZWFkZHIuaXA2ICAgPSBmZW42LVx1MDAzZXJ0LVx1MDAzZWZpYjZfZHN0LmFkZHI7XG4rXHRcdGV2LVx1MDAzZXByZWZpeF9sZW4gPSBmZW42LVx1MDAzZXJ0LVx1MDAzZWZpYjZfZHN0LnBsZW47XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuK1x0ZGVmYXVsdDpcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRsbGlzdF9hZGQoXHUwMDI2ZXYtXHUwMDNlbm9kZSwgXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfd29yayk7XG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXG4rZXJyOlxuK1x0a2ZyZWUoZXYpO1xuK1x0cmV0dXJuIE5PVElGWV9ET05FO1xuK31cbitcbiBpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbiB7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCk7XG4gXHRpbnQgZXJyO1xuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcbitcdElOSVRfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX3dvcmssIG5mX2Zsb3dfdGFibGVfZmliX3dvcmspO1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbiBcdGZsb3dfYmxvY2tfaW5pdChcdTAwMjZmbG93dGFibGUtXHUwMDNlZmxvd19ibG9jayk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuIFxuQEAgLTcxMSwxMSArODgzLDI0IEBAIGludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuIFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXG4gXHRcdFx0ICAgXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbiBcbitcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG4rXHRcdGZsb3d0YWJsZS1cdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50O1xuK1x0XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIobmV0LCBcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX25iLFxuK1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfZmliO1xuK1x0fVxuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZmbG93dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2Zmxvd3RhYmxlcyk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZpYjpcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yayk7XG4rXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZXJoYXNodGFibGUpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcbiBcbkBAIC03NTQsOCArOTM5LDI1IEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG4gXG4rc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9maWJfZHJhaW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbit7XG4rXHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpldmVudHM7XG4rXG4rXHRldmVudHMgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZmliX2V2ZW50cyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpXG4rXHRcdGtmcmVlKGV2KTtcbit9XG4rXG4gdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbiB7XG4rXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpIHtcbitcdFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIocmVhZF9wbmV0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlbmV0KSxcbitcdFx0XHRcdFx0XHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfbmIpO1xuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZmliX3dvcmspO1xuK1x0XHRuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbihmbG93X3RhYmxlKTtcbitcdH1cbitcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VsaXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowODo0NS41MTgxMDE3NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU2MzYyNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZS5oYC4gU2VlbXMgdGhleSdyZSBhZGRpbmcgRklCIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMsIHNwZWNpZmljYWxseSBmb3Igd2hlbiBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWQuIFRoYXQncyBpbnRlcmVzdGluZywgYSBnb29kIGZ1bmN0aW9uYWwgYWRkaXRpb24sIGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIGl0IGlzIGV4YWN0bHkgd2hhdCBJJ2QgZXhwZWN0LiBBIG5vdGlmaWVyIChgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgKSBsaXN0ZW5pbmcgZm9yIEZJQiBldmVudHMg4oCTIHJvdXRlIGNoYW5nZXMsIGJhc2ljYWxseSDigJMgYW5kIGEgd29yayBxdWV1ZSBpdGVtIChgbmZfZmxvd190YWJsZV9maWJfd29ya2ApIHRvIGhhbmRsZSB0aGUgY2xlYW51cC4gVGhlIHdvcmsgaXRlbSBpdGVyYXRlcyB0aGUgZmxvdyB0YWJsZSBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBwcm9ibGVtYXRpYyBwcmVmaXguIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBob3cgdGhpcyBwbGF5cyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY2hhbmdlICppcyogY29yZSBuZXRmaWx0ZXIsIHNvIGl0J3MgcHJvYmFibHkgcmVhY2hhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSdzIHBoeXNpY2FsIGhhcmR3YXJlLiBSb3V0aW5nIHRhYmxlIGNoYW5nZXMgKEZJQiBldmVudHMpIGFyZSBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzaW11bGF0ZWQgb3IgdHJpZ2dlcmVkIGluIFZNcyBieSBhZGRpbmcgb3IgcmVtb3Zpbmcgcm91dGVzLiBBbmQsIG9mIGNvdXJzZSwgTmV0ZmlsdGVyIGZsb3cgdGFibGVzIGNhbiBiZSBjcmVhdGVkIGFuZCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBmbGFnIHNldCwgKmV2ZW4gaWYqIHRoZSBhY3R1YWwgb2ZmbG9hZCBpc24ndCBwcmVzZW50LlxuXG5XYWl0LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGF0IGBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZGAgY2hlY2tzIGlmIHRoZSBmbG93dGFibGUgaGFzIHRoZSBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgIGZsYWcgc2V0LiBUaGF0J3MgZ29vZCwgYnV0IGhvdyBleGFjdGx5IGNhbiB0aGF0IGZsYWcgYmUgc2V0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBjaGVjayBob3cgYE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEYCBpcyB1c2VkIGFuZCBpZiBpdCdzIHBvc3NpYmxlIHRvIHNldCB0aGF0IGZsYWcgZXZlbiBpZiBhY3R1YWwgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgdGhhdCBtYWNybywgc2VlIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA4OjUxLjY3NDQ2Njk1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ5Mjc0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NzE9ZW51bSBuZl9mbG93dGFibGVfZmxhZ3Mge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NzI6XFx0TkZfRkxPV1RBQkxFX0hXX09GRkxPQURcXHRcXHQ9IDB4MSxcXHQvKiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQgKi9cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTczLVxcdE5GX0ZMT1dUQUJMRV9DT1VOVEVSXFx0XFx0PSAweDIsXFx0LyogTkZUX0ZMT1dUQUJMRV9DT1VOVEVSICovXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTkyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC05My17XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo5NDpcXHRyZXR1cm4gZmxvd3RhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtOTUtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTMyND1zdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzQ5LVxcdGN0X2Z0LVxcdTAwM2VuZl9mdC50eXBlID0gXFx1MDAyNmZsb3d0YWJsZV9jdDtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzUwOlxcdGN0X2Z0LVxcdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XFxubmV0L3NjaGVkL2FjdF9jdC5jLTM1MS1cXHRcXHRcXHQgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDg6NTUuNTIzNzUwNTM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM0MzE4NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEhhcmR3YXJlIE9mZmxvYWQgZm9yIENvbm5lY3Rpb24gVHJhY2tpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG9mZmxvYWQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIGl0IHNlZW1zIHRoZSBhY3Rpb24ncyBjb3JlIGxvZ2ljIGlzIHNpdHVhdGVkIHdpdGhpbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgaW1wb3J0YW50IGZsYWcgaGVyZSBpcyBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgLiBJdCdzIHByZXR0eSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGlzIHNldC5cblxuVGhlIGNvZGUncyBjb25uZWN0aW9uIHRvIHRoZSBgbmZ0YWJsZXNgIGZyYW1ld29yayBpcyB0aGUgbmV4dCBwbGFjZSB0byBsb29rIGF0LiBTZWVtcyBsaWtlIHRoZSBrZXkgaXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgIGFuZCBgTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjb25maWd1cmF0aW9uIGlzIGxpa2VseSBtYW5hZ2VkIHZpYSBuZXRsaW5rIHdpdGhpbiB0aGUgbmZ0YWJsZXMgaW50ZXJmYWNlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBwbGFjZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgdGhlIGZyYW1ld29yayBpcyBpbiBzeW5jLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzM2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDk6MDQuODY2OTQyODU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTMwNDg3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NzE9ZW51bSBuZl9mbG93dGFibGVfZmxhZ3Mge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NzI6XFx0TkZfRkxPV1RBQkxFX0hXX09GRkxPQURcXHRcXHQ9IDB4MSxcXHQvKiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQgKi9cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTczLVxcdE5GX0ZMT1dUQUJMRV9DT1VOVEVSXFx0XFx0PSAweDIsXFx0LyogTkZUX0ZMT1dUQUJMRV9DT1VOVEVSICovXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE2ODc9ZW51bSBuZnRfb2JqZWN0X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC0xNzAzLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDoxNzA0OiAqIEBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQ6IGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWRcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDUtICogQE5GVF9GTE9XVEFCTEVfQ09VTlRFUjogZW5hYmxlIGZsb3cgY291bnRlcnNcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9MTcwNz1lbnVtIG5mdF9mbG93dGFibGVfZmxhZ3Mge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6MTcwODpcXHRORlRfRkxPV1RBQkxFX0hXX09GRkxPQURcXHQ9IDB4MSxcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDktXFx0TkZUX0ZMT1dUQUJMRV9DT1VOVEVSXFx0XFx0PSAweDIsXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDoxNzEwOlxcdE5GVF9GTE9XVEFCTEVfTUFTS1xcdFxcdD0gKE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC0xNzExLVxcdFxcdFxcdFxcdFxcdCAgIE5GVF9GTE9XVEFCTEVfQ09VTlRFUilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwOTY9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxNDEtXFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNDI6XFx0XFx0aWYgKChmbG93dGFibGUtXFx1MDAzZWRhdGEuZmxhZ3MgXFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpIF5cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTQzOlxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE0NC1cXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDk6MDcuNjE5OTk2ODQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0OTkwNzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIEZsb3d0YWJsZSBJbml0aWFsaXphdGlvbiBhbmQgRklCIE5vdGlmaWVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBjYW4gZXN0YWJsaXNoIGEgZmxvd3RhYmxlLCBlaXRoZXIgZGlyZWN0bHkgd2l0aCB0aGUgYE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgZmxhZywgb3IgaW5kaXJlY3RseSB2aWEgYHRjIGFjdGlvbiBjdGAuICBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB3aGVuIHRoaXMgZmxvd3RhYmxlIGlzIGluaXRpYWxpemVkLCBgbmZfZmxvd190YWJsZV9pbml0YCBpcyBpbnZva2VkLiAgVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgaWYgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKClgIHJldHVybnMgdHJ1ZSwgYSBGSUIgbm90aWZpZXIgZ2V0cyByZWdpc3RlcmVkLlxuXG5Fc3NlbnRpYWxseSwgd2hlbmV2ZXIgdGhlIHJvdXRpbmcgdGFibGUgKEZJQikgaXMgbW9kaWZpZWQsIHRoZSBgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiB0aGVuIHF1ZXVlcyBhIHdvcmsgaXRlbSwgYGZpYl93b3JrYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBwcm9jZXNzZWQgYnkgYG5mX2Zsb3dfdGFibGVfZmliX3dvcmtgLiAgVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBtZWNoYW5pc20gZm9yIGtlZXBpbmcgdGhlIGZsb3d0YWJsZSBzeW5jaHJvbml6ZWQgd2l0aCByb3V0aW5nIGNoYW5nZXMuXG5cblRoaXMgd2hvbGUgcHJvY2VzcyBhcHBlYXJzIGVtaW5lbnRseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCBldmVuIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIHdoaWNoIGlzIGdvb2QuIFdlIGNhbiBkZWZpbml0ZWx5IHNpbXVsYXRlIHZhcmlvdXMgcm91dGluZyBldmVudHMgYW5kIG1vbml0b3IgdGhlIGZsb3d0YWJsZSdzIHJlYWN0aW9ucy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCB0byBzZWUgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIGVudGlyZSBwcm9jZXNzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToxMi43Njk5MDYzNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTc3NjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2NvcmVcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA5OjE1LjkwMTY5MDgwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDgzNTYxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBGbG93IFRhYmxlIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb2RlIEknbSBsb29raW5nIGF0ICpkZWZpbml0ZWx5KiByZWxpZXMgb24gYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0J3MgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZzsgYSBtaXNzaW5nIGZsb3cgdGFibGUgd291bGQgb2J2aW91c2x5IGJyZWFrIGZ1bmN0aW9uYWxpdHkuIFRoZW4sIGl0J3MgbGV2ZXJhZ2luZyBgQ09ORklHX0lQVjZgIGZvciBJUHY2IHN1cHBvcnQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEdpdmVuIHRoaXMgZGVwZW5kZW5jeSBvbiB0aGUgZmxvdyB0YWJsZSBhbmQgSVB2NiwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGNoZWNrIHRoZXJlIGZvciB0aGUgYE5GX0ZMT1dfVEFCTEVgIG9wdGlvbiB0byB2ZXJpZnkgaXRzIGRldGFpbHMgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyB0aGF0IGNvbmZpZyBvcHRpb24gYmV0dGVyIHdpbGwgZ3VpZGUgaG93IEkgcHJvY2VlZCBmcm9tIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToxOS41NTAwNTA0NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mjk2MjcxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToyMi4xNzk2ODU3MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5MjExMDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgQ29yZSBOZXR3b3JrIEZsb3cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXI6IGBORl9GTE9XX1RBQkxFYCBpcyB0aGUgcHJpbWFyeSBmb2N1cy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIG5ldHdvcmsgZmxvdyBlbnRyaWVzLCBsaWtlbHkgZm9yIHNvbWV0aGluZyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3ctYmFzZWQgcm91dGluZywgb3IgcGVyaGFwcyBldmVuIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHVzZXItc3BhY2UgbmV0d29yayBhY2NlbGVyYXRpb24gbWVjaGFuaXNtLlxuXG5BbmQgdGhlbiBJIHNlZSB0aGUgbWVudGlvbiBvZiBgcmVnaXN0ZXJfZmliX25vdGlmaWVyYC4gUmlnaHQsIHRoYXQgZnVuY3Rpb24ncyBpbiBgbmV0L2NvcmUvZmliX25vdGlmaWVyLmNgLiBUaGF0J3MgYSBzdHJvbmcgaGludC4gYGZpYmAgbWVhbnMgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlLCB3aGljaCBkZWFscyB3aXRoIHJvdXRpbmcgdGFibGVzLiBgTm90aWZpZXJgIGluZGljYXRlcyBhbiBldmVudC1kcml2ZW4gbWVjaGFuaXNtLiBUaHVzLCB0aGUgY29kZSBpcyBsaWtlbHkgcmVnaXN0ZXJpbmcgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIHRvIHRoZSByb3V0aW5nIHRhYmxlLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgbmV0d29yayBmbG93IHRhYmxlJ3MgYmVoYXZpb3Igb3IgZW50cmllcyBhcmUgbGlrZWx5ICpkZXBlbmRlbnQqIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGluZyB0YWJsZS4gQ2hhbmdlcyB0byByb3V0ZXMgKGFkZGVkLCByZW1vdmVkLCBtb2RpZmllZCkgbGlrZWx5IHRyaWdnZXIgc29tZSBhY3Rpb24gcmVsYXRlZCB0byB0aGUgZmxvdyB0YWJsZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBub3RpZmllciBjYWxsYmFjayB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBmbG93IHRhYmxlIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24uIFRoaXMgbWlnaHQgaW52b2x2ZSB0aGluZ3MgbGlrZSBpbnZhbGlkYXRpbmcgY2FjaGVkIGZsb3cgZW50cmllcywgdXBkYXRpbmcgcm91dGVzIHdpdGhpbiB0aGUgZmxvdyB0YWJsZSBpdHNlbGYsIG9yIHBlcmhhcHMgZXZlbiBhbHRlcmluZyBob3cgcGFja2V0cyBhcmUgbWF0Y2hlZCB0byBmbG93IGVudHJpZXMgYmFzZWQgb24gcm91dGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA5OjI2LjE3MTc5OTM0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0Mzk2MDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9maWJfbm90aWZpZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N3aXRjaGRldi5yc3Q9MzQ5PVRvIHByb2dyYW0gdGhlIGRldmljZSwgdGhlIGRyaXZlciBoYXMgdG8gcmVnaXN0ZXIgYSBGSUIgbm90aWZpZXIgaGFuZGxlclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zd2l0Y2hkZXYucnN0OjM1MDp1c2luZyByZWdpc3Rlcl9maWJfbm90aWZpZXIuIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBhdmFpbGFibGU6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N3aXRjaGRldi5yc3QtMzUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYz0xNTQ4PWludCBwcmVzdGVyYV9yb3V0ZXJfaW5pdChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYwMC1cXHRyb3V0ZXItXFx1MDAzZWZpYl9uYi5ub3RpZmllcl9jYWxsID0gX19wcmVzdGVyYV9yb3V0ZXJfZmliX2V2ZW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmM6MTYwMTpcXHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2cm91dGVyLVxcdTAwM2VmaWJfbmIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYy0xNjAyLVxcdFxcdFxcdFxcdCAgICAvKiBUT0RPOiBmbHVzaCBmaWIgZW50cmllcyAqLyBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDMtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jOjE2MDQ6XFx0XFx0Z290byBlcnJfcmVnaXN0ZXJfZmliX25vdGlmaWVyO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jOjE2MDg6ZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDktXFx0dW5yZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcihcXHUwMDI2cm91dGVyLVxcdTAwM2VuZXRldmVudF9uYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jPTE2Mjk9dm9pZCBwcmVzdGVyYV9yb3V0ZXJfZmluaShzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MzAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmM6MTYzMTpcXHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihcXHUwMDI2aW5pdF9uZXQsIFxcdTAwMjZzdy1cXHUwMDNlcm91dGVyLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYzMi1cXHR1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKFxcdTAwMjZzdy1cXHUwMDNlcm91dGVyLVxcdTAwM2VuZXRldmVudF9uYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM9MTg2MD1zdHJ1Y3QgbWx4NWVfdGNfdHVuX2VuY2FwICptbHg1ZV90Y190dW5faW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy0xODcyLVxcdGhhc2hfaW5pdChlbmNhcC1cXHUwMDNlcm91dGVfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM6MTg3MzpcXHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2X25ldChwcml2LVxcdTAwM2VuZXRkZXYpLCBcXHUwMDI2ZW5jYXAtXFx1MDAzZWZpYl9uYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtMTg3NC1cXHRcXHRcXHRcXHQgICAgTlVMTCwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM9MTg4Mz12b2lkIG1seDVlX3RjX3R1bl9jbGVhbnVwKHN0cnVjdCBtbHg1ZV90Y190dW5fZW5jYXAgKmVuY2FwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTE4ODctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjE4ODg6XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2X25ldChlbmNhcC1cXHUwMDNlcHJpdi1cXHUwMDNlbmV0ZGV2KSwgXFx1MDAyNmVuY2FwLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy0xODg5LVxcdGZsdXNoX3dvcmtxdWV1ZShlbmNhcC1cXHUwMDNlcHJpdi1cXHUwMDNld3EpOyAvKiBmbHVzaCBmaWIgZXZlbnQgd29ya3MgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jPTU0MzQ9aW50IG1seDVlX3RjX2Vzd19pbml0KHN0cnVjdCBtbHg1X3JlcF91cGxpbmtfcHJpdiAqdXBsaW5rX3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NDg4LVxcdFxcdGVyciA9IFBUUl9FUlIodXBsaW5rX3ByaXYtXFx1MDAzZWVuY2FwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NDg5OlxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NDkwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU1MDEtXFx0bWx4NWVfdGNfdHVuX2NsZWFudXAodXBsaW5rX3ByaXYtXFx1MDAzZWVuY2FwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NTAyOmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTUwMy1cXHRtYXBwaW5nX2Rlc3Ryb3kodXBsaW5rX3ByaXYtXFx1MDAzZXR1bm5lbF9lbmNfb3B0c19tYXBwaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYz0zNzI9aW50IG1seDVfbGFnX21wX2luaXQoc3RydWN0IG1seDVfbGFnICpsZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jLTM4OS1cXHRtcC1cXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBtbHg1X2xhZ19maWJfZXZlbnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jOjM5MDpcXHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2bXAtXFx1MDAzZWZpYl9uYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL21wLmMtMzkxLVxcdFxcdFxcdFxcdCAgICBtbHg1X2xhZ19maWJfZXZlbnRfZmx1c2gsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jPTQwMD12b2lkIG1seDVfbGFnX21wX2NsZWFudXAoc3RydWN0IG1seDVfbGFnICpsZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL21wLmM6NDA3OlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNm1wLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy00MDgtXFx0ZGVzdHJveV93b3JrcXVldWUobXAtXFx1MDAzZXdxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTExNTc2PWludCBtbHhzd19zcF9yb3V0ZXJfaW5pdChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE2OTYtXFx0bWx4c3dfc3AtXFx1MDAzZXJvdXRlci1cXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBtbHhzd19zcF9yb3V0ZXJfZmliX2V2ZW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjExNjk3OlxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihtbHhzd19zcF9uZXQobWx4c3dfc3ApLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNjk4LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bWx4c3dfc3AtXFx1MDAzZXJvdXRlci1cXHUwMDNlZmliX25iLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3MDAtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMTcwMTpcXHRcXHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3MDItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMTcwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMTcwNTplcnJfcmVnaXN0ZXJfZmliX25vdGlmaWVyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzA2LVxcdHVucmVnaXN0ZXJfbmV4dGhvcF9ub3RpZmllcihtbHhzd19zcF9uZXQobWx4c3dfc3ApLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTE3NTU9dm9pZCBtbHhzd19zcF9yb3V0ZXJfZmluaShzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3NTk6XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIobWx4c3dfc3BfbmV0KG1seHN3X3NwKSwgXFx1MDAyNnJvdXRlci1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMTc2MC1cXHR1bnJlZ2lzdGVyX25leHRob3Bfbm90aWZpZXIobWx4c3dfc3BfbmV0KG1seHN3X3NwKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jPTI4NDQ9c3RhdGljIGludCByb2NrZXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NDItXFx0cm9ja2VyLVxcdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IHJvY2tlcl9yb3V0ZXJfZmliX2V2ZW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jOjI5NDM6XFx0ZXJyID0gcmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNnJvY2tlci1cXHUwMDNlZmliX25iLCBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0yOTQ0LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmM6Mjk0NTpcXHRcXHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMjk0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NjktZXJyX3JlZ2lzdGVyX3N3aXRjaGRldl9ub3RpZmllcjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTcwOlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNnJvY2tlci1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTcxOmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMjk3Mi1cXHRyb2NrZXJfcmVtb3ZlX3BvcnRzKHJvY2tlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYz0yOTk3PXN0YXRpYyB2b2lkIHJvY2tlcl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0zMDA1LVxcdHVucmVnaXN0ZXJfc3dpdGNoZGV2X25vdGlmaWVyKFxcdTAwMjZyb2NrZXJfc3dpdGNoZGV2X25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzozMDA2OlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNnJvY2tlci1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0zMDA3LVxcdHJvY2tlcl9yZW1vdmVfcG9ydHMocm9ja2VyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYz0xNTUyPXN0cnVjdCBuc2ltX2ZpYl9kYXRhICpuc2ltX2ZpYl9jcmVhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTU5Mi1cXHRkYXRhLVxcdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5zaW1fZmliX2V2ZW50X25iO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYzoxNTkzOlxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZsaW5rX25ldChkZXZsaW5rKSwgXFx1MDAyNmRhdGEtXFx1MDAzZWZpYl9uYixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTU5NC1cXHRcXHRcXHRcXHQgICAgbnNpbV9maWJfZHVtcF9pbmNvbnNpc3RlbnQsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTYyNi1lcnJfZmliX25vdGlmaWVyX3VucmVnaXN0ZXI6XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE2Mjc6XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFxcdTAwMjZkYXRhLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYy0xNjI4LWVycl9uZXh0aG9wX25iX3VucmVnaXN0ZXI6XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmM9MTY0NT12b2lkIG5zaW1fZmliX2Rlc3Ryb3koc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBuc2ltX2ZpYl9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2NTctXFx0bnNpbV9maWJfZGVidWdmc19leGl0KGRhdGEpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYzoxNjU4OlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKGRldmxpbmtfbmV0KGRldmxpbmspLCBcXHUwMDI2ZGF0YS1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTY1OS1cXHR1bnJlZ2lzdGVyX25leHRob3Bfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFxcdTAwMjZkYXRhLVxcdTAwM2VuZXh0aG9wX25iKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oPTQxPWludCBjYWxsX2ZpYl9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LCBlbnVtIGZpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUsXFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDItXFx0XFx0ICAgICAgIHN0cnVjdCBmaWJfbm90aWZpZXJfaW5mbyAqaW5mbyk7XFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmg6NDM6aW50IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDQtXFx0XFx0XFx0ICB2b2lkICgqY2IpKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpLFxcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oLTQ1LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5pbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaDo0NjppbnQgdW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcXG5pbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaC00Ny1zdHJ1Y3QgZmliX25vdGlmaWVyX29wcyAqXFxuLS1cXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYz04Mj1zdGF0aWMgYm9vbCBmaWJfZHVtcF9pc19jb25zaXN0ZW50KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTk3LSNkZWZpbmUgRklCX0RVTVBfTUFYX1JFVFJJRVMgNVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jOjk4OmludCByZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTk5LVxcdFxcdFxcdCAgdm9pZCAoKmNiKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTExNy19XFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTE4OkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZmliX25vdGlmaWVyKTtcXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYy0xMTktXFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTIwOmludCB1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtMTIxLXtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTEyNS19XFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTI2OkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9maWJfbm90aWZpZXIpO1xcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTEyNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODY3PWludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04ODctXFx0XFx0Zmxvd3RhYmxlLVxcdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODg4OlxcdFxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsIFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZpYl9uYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg4OS1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgTlVMTCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk1Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05NTQtXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo5NTU6XFx0XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIocmVhZF9wbmV0KFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTU2LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VmaWJfbmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToyOC44MTU3Njk0NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1OTQzMzM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBGaWIgTm90aWZpZXIgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYHJlZ2lzdGVyX2ZpYl9ub3RpZmllcmAuLi4gSSBrbm93IHRoYXQgb25lLiBJdCdzIGluIGBuZXQvY29yZS9maWJfbm90aWZpZXIuY2AuIFRoYXQgZmlsZSBzaG91bGQgYmUgY29tcGlsZWQsIG9idmlvdXNseSwgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgc2V0LiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgdGhvdWdoLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLiBHb3R0YSBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQncyBpbnRlZ3JhdGVkLCBzbyBhIGRvdWJsZS1jaGVjayBpcyB3b3J0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOTozMS45NzUyMDY2N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NDAyNjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfbm90aWZpZXJcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTU6XFx0XFx0XFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE2LVxcdFxcdFxcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTU6XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA5OjM0LjkxOTI0Mzk5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMzOTcxMDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgZmliX25vdGlmaWVyLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBidWlsdCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgYE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIEl0J3MgcmVsYXRlZCB0byB0aGUgYG5mX3RhYmxlc2AgZnJhbWV3b3JrLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZTsgaXQgd2lsbCBjb250YWluIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJJ20gdGhpbmtpbmcgd2UnbGwgbmVlZCBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgZGVmaW5lZC4gQWgsIHdhaXQgYSBtaW51dGUsIGBORlRfRkxPV19PRkZMT0FEYCBpcyB0aGUgKm5mdGFibGVzIG1vZHVsZSogc3BlY2lmaWNhbGx5IGZvciBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMDo1My4yNTg5NTg1MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjM3MjE5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MTA6NTYuNjgyNjg2ODI1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njk3OTIzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkVuYWJsaW5nIEFkdmFuY2VkIEZsb3cgT2ZmbG9hZGluZyBmb3IgRW5oYW5jZWQgUGVyZm9ybWFuY2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHJlcXVpcmVtZW50cywgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gc2VyaW91c2x5IGNvbnNpZGVyIGVuYWJsaW5nIGJvdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIFdlJ3ZlIHNlZW4gdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIHRoZXNlIGZlYXR1cmVzIGJyaW5nIHRvIHRoZSB0YWJsZSBpbiBzaW1pbGFyIGRlcGxveW1lbnRzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBwb3RlbnRpYWwgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aCBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgcGFydGljdWxhcmx5IGFwcGVhbGluZyBmb3IgaGlnaC10aHJvdWdocHV0IHNjZW5hcmlvcywgYW5kIHdlIHdhbnQgdG8gZW5zdXJlIHdlIGFyZSBsZXZlcmFnaW5nIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgdG8gdXMuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gYWxzbyBhZGRpbmcgYE5FVF9BQ1RfQ1RgIHRvIHRoZSBjaGVja2xpc3QuIFRoZSBgdGMgYWN0aW9uIGN0YCBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsIGFzIHRoaXMgd2lsbCBhbGxvdyB1cyB0byBsZXZlcmFnZSBmbG93IHRhYmxlcyB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFRoaXMgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBpcyBlc3NlbnRpYWwgZm9yIGZpbmUtdHVuaW5nIG91ciBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBtYXhpbWl6aW5nIGVmZmljaWVuY3ksIHNwZWNpZmljYWxseSB3aXRoIHRoZSBjYXBhYmlsaXRpZXMgb2YgZmxvdyB0YWJsZXMuIFdlIGNhbiBnYWluIGEgbG90IGJ5IGNvbWJpbmluZyB0aGVzZSB0b29scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMTowMC4zNTI0ODE3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMDE4ODk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9DVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXFxubmV0L3NjaGVkL0tjb25maWctODY2LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjExOjAyLjg4MjY4MjA4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjgxNjQ1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9jdXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBmb2N1cyBzeW1ib2xzIGFkZGVkIGJ5IHRoaXMgcGF0Y2guICBBIHF1aWNrIHNjYW4gc2hvd3M6IGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGAsIGBuZl9mbG93X2ZpYl9mbG93X21hdGNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JgLCBgbmZfZmxvd190YWJsZV9maWJfd29ya2AsIGBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaGAsIGBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudGAsIGFuZCBgbmZfZmxvd190YWJsZV9maWJfZHJhaW5gLiBZdXAsIHRob3NlIGxvb2sgbGlrZSBzb2xpZCBmb2N1cyBwb2ludHMuIE5vdywgbGV0J3MgZ2V0IHRoZW0gb3JnYW5pemVkIGludG8gYSBjbGVhciBsaXN0IGZvciBlYXNpZXIgcmVmZXJlbmNlOlxuXG4qICAgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YFxuKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYFxuKiAgIGBuZl9mbG93X29mZmxvYWRfZmliX2NiYFxuKiAgIGBuZl9mbG93X2ZpYl9mbG93X21hdGNoYFxuKiAgIGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGBcbiogICBgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2hgXG4qICAgYG5mX2Zsb3dfdGFibGVfZmliX2RyYWluYFxuXG5BbHJpZ2h0LCBuZXh0IEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YC4gSSBzZWUgaXQncyByZWdpc3RlcmVkIGFzIGEgbm90aWZpZXIgdXNpbmcgYHJlZ2lzdGVyX2ZpYl9ub3RpZmllcmAuICBBbmQgeWVzLCB3aGVuIHJvdXRlcyBhcmUgYWRkZWQsIHRoZSBgY2FsbF9maWJfbm90aWZpZXJzYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgaW4gdHVybiBjYWxsaW5nIHRoZSBub3RpZmllciBjYWxsYmFjay4gIFNvLCB3ZSBjYW4gc2F5IHdpdGggY29uZmlkZW5jZSB0aGF0IGl0IGlzIGluZGVlZCByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgZ2V0IHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIG5haWxlZCBkb3duLiAgVGhpcyBwYXRjaCBzZWVtcyB0byBuZWVkOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYW5kIGBORVRfQUNUX0NUYC4gIEkgY2FuIHNlZSBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBpbiB0aGUgY29kZSwgc28gZGVmaW5pdGVseSBgSVBWNmAgYXMgd2VsbC5cblxuSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBJUFY2YCBkZXBlbmRlbmN5LiAgWWVzLCBoZXJlIGl0IGlzOlxuXG5gYGBjXG4jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcblx0Y2FzZSBORlBST1RPX0lQVjY6XG5cdFx0cmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKFx1MDAyNnR1cGxlLVx1MDAzZWRzdF92NiwgXHUwMDI2ZXYtXHUwMDNlYWRkci5pcDYsXG5cdFx0XHRcdFx0IGV2LVx1MDAzZXByZWZpeF9sZW4pO1xuI2VuZGlmXG5gYGBcblxuT2theSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoYXQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGgsIHVuZGVyc3Rvb2QuXG5cbkZpbmFsbHksIEknbSB0aGlua2luZyBhYm91dCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCAqbWlnaHQqIGJlIHJlbGV2YW50LiAgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgY29tZXMgdG8gbWluZDsgaXQncyBwb3NzaWJsZSB0aGF0J3MgbmVlZGVkIGZvciBzdXBwb3J0aW5nIG1peGVkIElQdjQvSVB2NiBmbG93IHRhYmxlcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGFzIHBhcnQgb2YgdGhlIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMToxMC41NjQzMzAyMDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njc1MzU5NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMToxMy4yMzE4NzExMDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MjU0MjUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqQ2hlY2tpbmcgdGhlIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBidXQgYmVmb3JlIEkgY29tbWl0LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aG9zZSBmbG93IHRhYmxlIG9wdGlvbnMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSd2ZSBjb25zaWRlcmVkIGFsbCByZWxldmFudCBzZXR0aW5ncywgZXNwZWNpYWxseSBnaXZlbiB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgSVAgdmVyc2lvbnMuIExldCdzIG1ha2Ugc3VyZSBJIGRpZG4ndCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGAgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgLiBJdCdzIGVhc3kgdG8gbWlzcyBhIGNydWNpYWwgc2V0dGluZyB3aGVuIHlvdSdyZSBmb2N1c2luZyBvbiBvbmUgc3BlY2lmaWMgYXNwZWN0LCBzbyBhIGZpbmFsLCBjb21wcmVoZW5zaXZlIHN3ZWVwIGlzIGFsd2F5cyB3YXJyYW50ZWQuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGluIHRoZSBsb25nIHJ1bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMToxNy4wNzQ0MTY3MDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTEzMjQ0MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MTE6MTkuNjI1NzQ5MDQ4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTk1MTExNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBORl9GTE9XX1RBQkxFX0lQVjRgIHdhcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgc29tZXRoaW5nIGZlZWxzIG9mZi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQncyBhY3R1YWxseSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIHRydXRoIGFib3V0IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzLCBvZiBjb3Vyc2UsIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgSVBWNCBmbG93cywgdGhlIGxpa2VseSBwbGFjZSBpcyBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJ2xsIGhlYWQgdGhlcmUgYW5kIGhhdmUgYSBsb29rLiBIb3BlZnVsbHksIHRoaXMgY2xlYXJzIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjExOjIzLjA0NTI2MzIzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMDc5NDIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjExOjI1Ljg0NjA2MzE0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzU2NDYzNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRob3NlIGluaXRpYWwgc3ltYm9scyBJIHdhcyBsb29raW5nIGF0IGFyZW4ndCByZWxldmFudCwgdGhlIGltcG9ydGFudCBvbmVzIGFyZSBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLiBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cblRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgRklCIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlbiBoYXJkd2FyZSBvZmZsb2FkIGlzIGFjdGl2ZS4gSXQncyBlc3NlbnRpYWxseSBtYW5hZ2luZyBmbG93IHRhYmxlIGVudHJpZXMgYmFzZWQgb24gY2hhbmdlcyB0byB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpLiBJdCByZWdpc3RlcnMgYSBub3RpZmllciBmb3IgRklCIGV2ZW50cyBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IGFyZSBub3cgaW52YWxpZCBiZWNhdXNlIHRoZXkgbWF0Y2ggdGhlIHJvdXRpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMsIGFuZCBpdCdzIHJlYWNoYWJsZSBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHBvdGVudGlhbCBpbXBhY3QuIEkgY2FuIHRyaWdnZXIgdGhpcyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1lc3Npbmcgd2l0aCByb3V0aW5nIHRhYmxlcy5cblxuSGVyZSdzIHRoZSBjcml0aWNhbCBmb2N1cyBhcmVhOiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOiBgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgLCBgbmZfZmxvd190YWJsZV9maWJfd29ya2AsIGBuZl9mbG93X29mZmxvYWRfZmliX2NiYCwgYG5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hgLCBgbmZfZmxvd19maWJfdHVwbGVfbWF0Y2hgLCBgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2hgLCBhbmQgYG5mX2Zsb3dfdGFibGVfZmliX2RyYWluYC5cblxuVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBicmluZyB0aGlzIGNvZGUgaW50byBwbGF5IGFyZSBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9BQ1RfQ1RgLCBhbmQgYElQVjZgLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIHdoZW4gY3JhZnRpbmcgdGVzdCBjYXNlcy5cblxuTGV0J3MgZG8gYSBsaXR0bGUgbW9yZSBkaWdnaW5nLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGVuYWJsZWQuIEl0IHVzZXMgc3RhbmRhcmQgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmcm9tIGBpbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaGAsIGBpbmNsdWRlL25ldC9pcF9maWIuaGAsIGFuZCBgaW5jbHVkZS9uZXQvaXA2X2ZpYi5oYCwgd2hpY2ggaXMgYWxsIHByZXR0eSBzdGFuZGFyZCBuZXR3b3JraW5nIGZhcmUuIE5vdGhpbmcganVtcHMgb3V0IGFzIHVudXN1YWxseSBjb21wbGV4IG9yIGRhbmdlcm91cyAqeWV0KiwgYnV0IHRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgbG9naWMgaXMgYmVpbmcgbW9kaWZpZWQuXG5cbkFscmlnaHQsIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhpcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2NiwiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MTE6MzQuMjAyNTMwODI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzY3ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9maWJfZXZlbnRcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX3dvcmtcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JcIixcbiAgICBcIm5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3dfZmliX3R1cGxlX21hdGNoXCIsXG4gICAgXCJuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9maWJfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEZJQiBldmVudCBoYW5kbGluZyB0byBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEl0IHJlZ2lzdGVycyBhIEZJQiBub3RpZmllciBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBGSUIgZXZlbnQncyBwcmVmaXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1vZGlmeWluZyByb3V0aW5nIHRhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9maWJfZXZlbnRcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX3dvcmtcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JcIixcbiAgICBcIm5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3dfZmliX3R1cGxlX21hdGNoXCIsXG4gICAgXCJuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9maWJfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEZJQiBldmVudCBoYW5kbGluZyB0byBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEl0IHJlZ2lzdGVycyBhIEZJQiBub3RpZmllciBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBGSUIgZXZlbnQncyBwcmVmaXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1vZGlmeWluZyByb3V0aW5nIHRhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-09 14:26:38 +0000 UTC FinishedAt: 2026-07-09 15:11:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "60444706aa17616efc03190d099ac347e28b3d0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_ACT_CT", "IPV6" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "60444706aa17616efc03190d099ac347e28b3d0a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_ACT_CT", "IPV6" ], "series_id": "75cd5a68-8e8e-41ef-9da6-dea3554407a7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_flow_table_fib_event", "nf_flow_table_fib_work", "nf_flow_offload_fib_cb", "nf_flow_fib_flow_match", "nf_flow_fib_tuple_match", "nf_flowtable_fib_family_match", "nf_flow_table_fib_drain" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfQUNUX0NUJiMzNDssCiAgICAmIzM0O0lQVjYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9mbG93X3RhYmxlX2ZpYl9ldmVudCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2ZpYl93b3JrJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfb2ZmbG9hZF9maWJfY2ImIzM0OywKICAgICYjMzQ7bmZfZmxvd19maWJfZmxvd19tYXRjaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2ZpYl90dXBsZV9tYXRjaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaCYjMzQ7LAogICAgJiMzNDtuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEZJQiBldmVudCBoYW5kbGluZyB0byBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEl0IHJlZ2lzdGVycyBhIEZJQiBub3RpZmllciBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBGSUIgZXZlbnQmIzM5O3MgcHJlZml4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBtb2RpZnlpbmcgcm91dGluZyB0YWJsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5N2M4NjQ5MTQzNTE3OWMxMjdmYzM5OWQ0ZTA2MmIwZTY0OTFiMDFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxNTowODo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjdjMzYyNTVmNWE0ZjkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTg0LDYgJiM0Mzs4NCw5IEBAIHN0cnVjdCBuZl9mbG93dGFibGUge1xuIFx0c3RydWN0IGZsb3dfYmxvY2tcdFx0Zmxvd19ibG9jaztcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdFx0Zmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqL1xuIFx0cG9zc2libGVfbmV0X3RcdFx0XHRuZXQ7XG4mIzQzO1x0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRcdGZpYl9uYjtcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0ZmliX3dvcms7XG4mIzQzO1x0c3RydWN0IGxsaXN0X2hlYWRcdFx0ZmliX2V2ZW50cztcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbmluZGV4IDk5YzViOWQ2NzFhMGNhLi4yYzkxMjA1NjkyMWFlMCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNcbkBAIC01LDggJiM0Mzs1LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZmlsdGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yaGFzaHRhYmxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2ZpYl9ub3RpZmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcF9maWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuQEAgLTY5NSwxMSAmIzQzOzY5OSwxNzkgQEAgdm9pZCBuZl9mbG93X2RuYXRfcG9ydChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XG4gXG4mIzQzO3N0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCB7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGVcdCpldmVudHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQge1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlXHRub2RlO1xuJiM0MztcdHU4XHRcdFx0ZmFtaWx5O1xuJiM0MztcdHU4XHRcdFx0cHJlZml4X2xlbjtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRfX2JlMzJcdFx0aXA0O1xuJiM0MztcdFx0c3RydWN0IGluNl9hZGRyXHRpcDY7XG4mIzQzO1x0fSBhZGRyO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgbmZfZmxvd19maWJfdHVwbGVfbWF0Y2goY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqdHVwbGUsXG4mIzQzO1x0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXYpXG4mIzQzO3tcbiYjNDM7XHRpZiAodHVwbGUtXHUwMDNlbDNwcm90byAhPSBldi1cdTAwM2VmYW1pbHkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZXYtXHUwMDNlZmFtaWx5KSB7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lQVjQ6IHtcbiYjNDM7XHRcdF9fYmUzMiBtYXNrID0gZXYtXHUwMDNlcHJlZml4X2xlbiA/XG4mIzQzO1x0XHRcdGh0b25sKH4wdSBcdTAwM2NcdTAwM2MgKDMyIC0gZXYtXHUwMDNlcHJlZml4X2xlbikpIDogMDtcbiYjNDM7XHRcdHJldHVybiAodHVwbGUtXHUwMDNlZHN0X3Y0LnNfYWRkciBcdTAwMjYgbWFzaykgPT0gKGV2LVx1MDAzZWFkZHIuaXA0IFx1MDAyNiBtYXNrKTtcbiYjNDM7XHR9XG4mIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKFx1MDAyNnR1cGxlLVx1MDAzZWRzdF92NiwgXHUwMDI2ZXYtXHUwMDNlYWRkci5pcDYsXG4mIzQzO1x0XHRcdFx0XHQgZXYtXHUwMDNlcHJlZml4X2xlbik7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBuZl9mbG93X2ZpYl9mbG93X21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX21hdGNoICptKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3JpZywgKnJlcGx5O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXY7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGU7XG4mIzQzO1xuJiM0MztcdG9yaWcgID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7XG4mIzQzO1x0cmVwbHkgPSBcdTAwMjZmbG93LVx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX1JFUExZXS50dXBsZTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChub2RlID0gbS1cdTAwM2VldmVudHM7IG5vZGU7IG5vZGUgPSBub2RlLVx1MDAzZW5leHQpIHtcbiYjNDM7XHRcdGV2ID0gbGxpc3RfZW50cnkobm9kZSwgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50LCBub2RlKTtcbiYjNDM7XHRcdGlmIChuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChvcmlnLCBldikgfHxcbiYjNDM7XHRcdCAgICBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChyZXBseSwgZXYpKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2ZpYl9jYihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggKm0gPSBkYXRhO1xuJiM0MztcbiYjNDM7XHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChuZl9mbG93X2ZpYl9mbG93X21hdGNoKGZsb3csIG0pKVxuJiM0MztcdFx0Zmxvd19vZmZsb2FkX3RlYXJkb3duKGZsb3cpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2ZpYl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZl9mbG93dGFibGUsIGZpYl93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDtcbiYjNDM7XHRzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggbSA9IHt9O1xuJiM0MztcdHN0cnVjdCBsbGlzdF9ub2RlICpldmVudHM7XG4mIzQzO1xuJiM0MztcdGV2ZW50cyA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbiYjNDM7XHRpZiAoIWV2ZW50cylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bS5ldmVudHMgPSBldmVudHM7XG4mIzQzO1x0bmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2IsIFx1MDAyNm0pO1xuJiM0MztcbiYjNDM7XHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpXG4mIzQzO1x0XHRrZnJlZShldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIG5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoKGNvbnN0IHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTggZXZlbnRfZmFtaWx5KVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChmbG93dGFibGUtXHUwMDNldHlwZS1cdTAwM2VmYW1pbHkpIHtcbiYjNDM7XHRjYXNlIE5GUFJPVE9fSVBWNDpcbiYjNDM7XHRcdHJldHVybiBldmVudF9mYW1pbHkgPT0gTkZQUk9UT19JUFY0O1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY2OlxuJiM0MztcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4mIzQzO1x0Y2FzZSBORlBST1RPX0lORVQ6XG4mIzQzO1x0XHRyZXR1cm4gZXZlbnRfZmFtaWx5ID09IE5GUFJPVE9fSVBWNCB8fFxuJiM0MztcdFx0ICAgICAgIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xuJiM0MztzdGF0aWMgaW50IG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4mIzQzO1x0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9XG4mIzQzO1x0XHRjb250YWluZXJfb2YobmIsIHN0cnVjdCBuZl9mbG93dGFibGUsIGZpYl9uYik7XG4mIzQzO1x0c3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvID0gcHRyO1xuJiM0MztcdHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXY7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoZXZlbnQpIHtcbiYjNDM7XHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9SRVBMQUNFOlxuJiM0MztcdGNhc2UgRklCX0VWRU5UX0VOVFJZX0FQUEVORDpcbiYjNDM7XHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9ERUw6XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogU2tpcCBldmVudHMgZm9yIGFuIGFkZHJlc3MgZmFtaWx5IHRoaXMgdGFibGUgY2Fubm90IGhvbGQuICovXG4mIzQzO1x0aWYgKCFuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaChmbG93X3RhYmxlLCBpbmZvLVx1MDAzZWZhbWlseSkpXG4mIzQzO1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO1xuJiM0MztcdGV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7XG4mIzQzO1x0aWYgKCFldilcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChpbmZvLVx1MDAzZWZhbWlseSkge1xuJiM0MztcdGNhc2UgTkZQUk9UT19JUFY0OlxuJiM0MztcdFx0c3RydWN0IGZpYl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW47XG4mIzQzO1xuJiM0MztcdFx0ZmVuID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbywgaW5mbyk7XG4mIzQzO1x0XHRldi1cdTAwM2VmYW1pbHkgICAgID0gTkZQUk9UT19JUFY0O1xuJiM0MztcdFx0ZXYtXHUwMDNlYWRkci5pcDQgICA9IGh0b25sKGZlbi1cdTAwM2Vkc3QpO1xuJiM0MztcdFx0ZXYtXHUwMDNlcHJlZml4X2xlbiA9IGZlbi1cdTAwM2Vkc3RfbGVuO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiYjNDM7XHRjYXNlIE5GUFJPVE9fSVBWNjpcbiYjNDM7XHRcdHN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8gKmZlbjY7XG4mIzQzO1xuJiM0MztcdFx0ZmVuNiA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvLCBpbmZvKTtcbiYjNDM7XHRcdGlmICghZmVuNi1cdTAwM2VydClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXYtXHUwMDNlZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNjtcbiYjNDM7XHRcdGV2LVx1MDAzZWFkZHIuaXA2ICAgPSBmZW42LVx1MDAzZXJ0LVx1MDAzZWZpYjZfZHN0LmFkZHI7XG4mIzQzO1x0XHRldi1cdTAwM2VwcmVmaXhfbGVuID0gZmVuNi1cdTAwM2VydC1cdTAwM2VmaWI2X2RzdC5wbGVuO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzOyNlbmRpZlxuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxsaXN0X2FkZChcdTAwMjZldi1cdTAwM2Vub2RlLCBcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9ldmVudHMpO1xuJiM0MztcdHF1ZXVlX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfd29yayk7XG4mIzQzO1x0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcbiYjNDM7ZXJyOlxuJiM0MztcdGtmcmVlKGV2KTtcbiYjNDM7XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO31cbiYjNDM7XG4gaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4ge1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZmbG93dGFibGUtXHUwMDNlbmV0KTtcbiBcdGludCBlcnI7XG4gXG4gXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX3dvcmssIG5mX2Zsb3dfdGFibGVfZmliX3dvcmspO1xuJiM0MztcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX2V2ZW50cyk7XG4gXHRmbG93X2Jsb2NrX2luaXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWZsb3dfYmxvY2spO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZmbG93dGFibGUtXHUwMDNlZmxvd19ibG9ja19sb2NrKTtcbiBcbkBAIC03MTEsMTEgJiM0Mzs4ODMsMjQgQEAgaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG4gXHRxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSxcbiBcdFx0XHQgICBcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yaywgSFopO1xuIFxuJiM0MztcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG4mIzQzO1x0XHRmbG93dGFibGUtXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudDtcbiYjNDM7XHRcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsIFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmaWJfbmIsXG4mIzQzO1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4mIzQzO1x0XHRpZiAoZXJyIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9maWI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFx0bGlzdF9hZGQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWxpc3QsIFx1MDAyNmZsb3d0YWJsZXMpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZpYjpcbiYjNDM7XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmspO1xuJiM0MztcdHJoYXNodGFibGVfZGVzdHJveShcdTAwMjZmbG93dGFibGUtXHUwMDNlcmhhc2h0YWJsZSk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcbiBcbkBAIC03NTQsOCAmIzQzOzkzOSwyNSBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2NsZWFudXApO1xuIFxuJiM0MztzdGF0aWMgdm9pZCBuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldiwgKm5leHQ7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKmV2ZW50cztcbiYjNDM7XG4mIzQzO1x0ZXZlbnRzID0gbGxpc3RfZGVsX2FsbChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9ldmVudHMpO1xuJiM0MztcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXYsIG5leHQsIGV2ZW50cywgbm9kZSlcbiYjNDM7XHRcdGtmcmVlKGV2KTtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuIHtcbiYjNDM7XHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpIHtcbiYjNDM7XHRcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKHJlYWRfcG5ldChcdTAwMjZmbG93X3RhYmxlLVx1MDAzZW5ldCksXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9uYik7XG4mIzQzO1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZmliX3dvcmspO1xuJiM0MztcdFx0bmZfZmxvd190YWJsZV9maWJfZHJhaW4oZmxvd190YWJsZSk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VsaXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfQ1QmIzM0OywKICAgICYjMzQ7SVBWNiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZmliX2V2ZW50JiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZmliX3dvcmsmIzM0OywKICAgICYjMzQ7bmZfZmxvd19vZmZsb2FkX2ZpYl9jYiYjMzQ7LAogICAgJiMzNDtuZl9mbG93X2ZpYl9mbG93X21hdGNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfZmliX3R1cGxlX21hdGNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfdGFibGVfZmliX2RyYWluJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgRklCIGV2ZW50IGhhbmRsaW5nIHRvIG5ldGZpbHRlciBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gSXQgcmVnaXN0ZXJzIGEgRklCIG5vdGlmaWVyIGFuZCB0ZWFycyBkb3duIGZsb3dzIHRoYXQgbWF0Y2ggdGhlIEZJQiBldmVudCYjMzk7cyBwcmVmaXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1vZGlmeWluZyByb3V0aW5nIHRhYmxlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOTdjODY0OTE0MzUxNzljMTI3ZmMzOTlkNGUwNjJiMGU2NDkxYjAxZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDkgMTU6MDg6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaAppbmRleCA3YjIzYjI0NWE1YTg2YS4uN2MzNjI1NWY1YTRmOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaApAQCAtODQsNiAmIzQzOzg0LDkgQEAgc3RydWN0IG5mX2Zsb3d0YWJsZSB7CiAJc3RydWN0IGZsb3dfYmxvY2sJCWZsb3dfYmxvY2s7CiAJc3RydWN0IHJ3X3NlbWFwaG9yZQkJZmxvd19ibG9ja19sb2NrOyAvKiBHdWFyZHMgZmxvd19ibG9jayAqLwogCXBvc3NpYmxlX25ldF90CQkJbmV0OwomIzQzOwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJCWZpYl9uYjsKJiM0MzsJc3RydWN0IHdvcmtfc3RydWN0CQlmaWJfd29yazsKJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQJCWZpYl9ldmVudHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKaW5kZXggOTljNWI5ZDY3MWEwY2EuLjJjOTEyMDU2OTIxYWUwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMKQEAgLTUsOCAmIzQzOzUsMTIgQEAKICNpbmNsdWRlICZsdDtsaW51eC9uZXRmaWx0ZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yaGFzaHRhYmxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZmliX25vdGlmaWVyLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9pcF9maWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9maWIuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgmZ3Q7CkBAIC02OTUsMTEgJiM0Mzs2OTksMTc5IEBAIHZvaWQgbmZfZmxvd19kbmF0X3BvcnQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfZG5hdF9wb3J0KTsKIAomIzQzO3N0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCB7CiYjNDM7CXN0cnVjdCBsbGlzdF9ub2RlCSpldmVudHM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZQlub2RlOwomIzQzOwl1OAkJCWZhbWlseTsKJiM0MzsJdTgJCQlwcmVmaXhfbGVuOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlfX2JlMzIJCWlwNDsKJiM0MzsJCXN0cnVjdCBpbjZfYWRkcglpcDY7CiYjNDM7CX0gYWRkcjsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLAomIzQzOwkJCQkgICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldikKJiM0Mzt7CiYjNDM7CWlmICh0dXBsZS0mZ3Q7bDNwcm90byAhPSBldi0mZ3Q7ZmFtaWx5KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlzd2l0Y2ggKGV2LSZndDtmYW1pbHkpIHsKJiM0MzsJY2FzZSBORlBST1RPX0lQVjQ6IHsKJiM0MzsJCV9fYmUzMiBtYXNrID0gZXYtJmd0O3ByZWZpeF9sZW4gPwomIzQzOwkJCWh0b25sKH4wdSAmbHQ7Jmx0OyAoMzIgLSBldi0mZ3Q7cHJlZml4X2xlbikpIDogMDsKJiM0MzsJCXJldHVybiAodHVwbGUtJmd0O2RzdF92NC5zX2FkZHIgJmFtcDsgbWFzaykgPT0gKGV2LSZndDthZGRyLmlwNCAmYW1wOyBtYXNrKTsKJiM0MzsJfQomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIE5GUFJPVE9fSVBWNjoKJiM0MzsJCXJldHVybiBpcHY2X3ByZWZpeF9lcXVhbCgmYW1wO3R1cGxlLSZndDtkc3RfdjYsICZhbXA7ZXYtJmd0O2FkZHIuaXA2LAomIzQzOwkJCQkJIGV2LSZndDtwcmVmaXhfbGVuKTsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBuZl9mbG93X2ZpYl9mbG93X21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csCiYjNDM7CQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCAqbSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm9yaWcsICpyZXBseTsKJiM0MzsJY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldjsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CW9yaWcgID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7CiYjNDM7CXJlcGx5ID0gJmFtcDtmbG93LSZndDt0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9SRVBMWV0udHVwbGU7CiYjNDM7CiYjNDM7CWZvciAobm9kZSA9IG0tJmd0O2V2ZW50czsgbm9kZTsgbm9kZSA9IG5vZGUtJmd0O25leHQpIHsKJiM0MzsJCWV2ID0gbGxpc3RfZW50cnkobm9kZSwgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50LCBub2RlKTsKJiM0MzsJCWlmIChuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChvcmlnLCBldikgfHwKJiM0MzsJCSAgICBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChyZXBseSwgZXYpKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd19vZmZsb2FkX2ZpYl9jYihzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlLAomIzQzOwkJCQkgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX21hdGNoICptID0gZGF0YTsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sICZhbXA7Zmxvdy0mZ3Q7ZmxhZ3MpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAobmZfZmxvd19maWJfZmxvd19tYXRjaChmbG93LCBtKSkKJiM0MzsJCWZsb3dfb2ZmbG9hZF90ZWFyZG93bihmbG93KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9maWJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID0KJiM0MzsJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBmaWJfd29yayk7CiYjNDM7CXN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXYsICpuZXh0OwomIzQzOwlzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggbSA9IHt9OwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqZXZlbnRzOwomIzQzOwomIzQzOwlldmVudHMgPSBsbGlzdF9kZWxfYWxsKCZhbXA7Zmxvd190YWJsZS0mZ3Q7ZmliX2V2ZW50cyk7CiYjNDM7CWlmICghZXZlbnRzKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltLmV2ZW50cyA9IGV2ZW50czsKJiM0MzsJbmZfZmxvd190YWJsZV9pdGVyYXRlKGZsb3dfdGFibGUsIG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2IsICZhbXA7bSk7CiYjNDM7CiYjNDM7CWxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXYsIG5leHQsIGV2ZW50cywgbm9kZSkKJiM0MzsJCWtmcmVlKGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2goY29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLAomIzQzOwkJCQkJICB1OCBldmVudF9mYW1pbHkpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKGZsb3d0YWJsZS0mZ3Q7dHlwZS0mZ3Q7ZmFtaWx5KSB7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY0OgomIzQzOwkJcmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQ7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY2OgomIzQzOwkJcmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7CiYjNDM7CWNhc2UgTkZQUk9UT19JTkVUOgomIzQzOwkJcmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQgfHwKJiM0MzsJCSAgICAgICBldmVudF9mYW1pbHkgPT0gTkZQUk9UT19JUFY2OwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqLwomIzQzO3N0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9maWJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKJiM0MzsJCQkJICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9CiYjNDM7CQljb250YWluZXJfb2YobmIsIHN0cnVjdCBuZl9mbG93dGFibGUsIGZpYl9uYik7CiYjNDM7CXN0cnVjdCBmaWJfbm90aWZpZXJfaW5mbyAqaW5mbyA9IHB0cjsKJiM0MzsJc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldjsKJiM0MzsKJiM0MzsJc3dpdGNoIChldmVudCkgewomIzQzOwljYXNlIEZJQl9FVkVOVF9FTlRSWV9SRVBMQUNFOgomIzQzOwljYXNlIEZJQl9FVkVOVF9FTlRSWV9BUFBFTkQ6CiYjNDM7CWNhc2UgRklCX0VWRU5UX0VOVFJZX0RFTDoKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFNraXAgZXZlbnRzIGZvciBhbiBhZGRyZXNzIGZhbWlseSB0aGlzIHRhYmxlIGNhbm5vdCBob2xkLiAqLwomIzQzOwlpZiAoIW5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoKGZsb3dfdGFibGUsIGluZm8tJmd0O2ZhbWlseSkpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CWV2ID0ga3phbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0FUT01JQyk7CiYjNDM7CWlmICghZXYpCiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaW5mby0mZ3Q7ZmFtaWx5KSB7CiYjNDM7CWNhc2UgTkZQUk9UT19JUFY0OgomIzQzOwkJc3RydWN0IGZpYl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW47CiYjNDM7CiYjNDM7CQlmZW4gPSBjb250YWluZXJfb2YoaW5mbywgc3RydWN0IGZpYl9lbnRyeV9ub3RpZmllcl9pbmZvLCBpbmZvKTsKJiM0MzsJCWV2LSZndDtmYW1pbHkgICAgID0gTkZQUk9UT19JUFY0OwomIzQzOwkJZXYtJmd0O2FkZHIuaXA0ICAgPSBodG9ubChmZW4tJmd0O2RzdCk7CiYjNDM7CQlldi0mZ3Q7cHJlZml4X2xlbiA9IGZlbi0mZ3Q7ZHN0X2xlbjsKJiM0MzsJCWJyZWFrOwomIzQzOwomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQomIzQzOwljYXNlIE5GUFJPVE9fSVBWNjoKJiM0MzsJCXN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8gKmZlbjY7CiYjNDM7CiYjNDM7CQlmZW42ID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8sIGluZm8pOwomIzQzOwkJaWYgKCFmZW42LSZndDtydCkKJiM0MzsJCQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJCWV2LSZndDtmYW1pbHkgICAgID0gTkZQUk9UT19JUFY2OwomIzQzOwkJZXYtJmd0O2FkZHIuaXA2ICAgPSBmZW42LSZndDtydC0mZ3Q7ZmliNl9kc3QuYWRkcjsKJiM0MzsJCWV2LSZndDtwcmVmaXhfbGVuID0gZmVuNi0mZ3Q7cnQtJmd0O2ZpYjZfZHN0LnBsZW47CiYjNDM7CQlicmVhazsKJiM0MzsjZW5kaWYKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxsaXN0X2FkZCgmYW1wO2V2LSZndDtub2RlLCAmYW1wO2Zsb3dfdGFibGUtJmd0O2ZpYl9ldmVudHMpOwomIzQzOwlxdWV1ZV93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsICZhbXA7Zmxvd190YWJsZS0mZ3Q7ZmliX3dvcmspOwomIzQzOwlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CiYjNDM7ZXJyOgomIzQzOwlrZnJlZShldik7CiYjNDM7CXJldHVybiBOT1RJRllfRE9ORTsKJiM0Mzt9CiYjNDM7CiBpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSkKIHsKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gcmVhZF9wbmV0KCZhbXA7Zmxvd3RhYmxlLSZndDtuZXQpOwogCWludCBlcnI7CiAKIAlJTklUX0RFTEFZRURfV09SSygmYW1wO2Zsb3d0YWJsZS0mZ3Q7Z2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpOwomIzQzOwlJTklUX1dPUksoJmFtcDtmbG93dGFibGUtJmd0O2ZpYl93b3JrLCBuZl9mbG93X3RhYmxlX2ZpYl93b3JrKTsKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7Zmxvd3RhYmxlLSZndDtmaWJfZXZlbnRzKTsKIAlmbG93X2Jsb2NrX2luaXQoJmFtcDtmbG93dGFibGUtJmd0O2Zsb3dfYmxvY2spOwogCWluaXRfcndzZW0oJmFtcDtmbG93dGFibGUtJmd0O2Zsb3dfYmxvY2tfbG9jayk7CiAKQEAgLTcxMSwxMSAmIzQzOzg4MywyNCBAQCBpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSkKIAlxdWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwKIAkJCSAgICZhbXA7Zmxvd3RhYmxlLSZndDtnY193b3JrLCBIWik7CiAKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkpIHsKJiM0MzsJCWZsb3d0YWJsZS0mZ3Q7ZmliX25iLm5vdGlmaWVyX2NhbGwgPSBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudDsKJiM0MzsJCWVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsICZhbXA7Zmxvd3RhYmxlLSZndDtmaWJfbmIsCiYjNDM7CQkJCQkgICAgTlVMTCwgTlVMTCk7CiYjNDM7CQlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9maWI7CiYjNDM7CX0KJiM0MzsKIAltdXRleF9sb2NrKCZhbXA7Zmxvd3RhYmxlX2xvY2spOwogCWxpc3RfYWRkKCZhbXA7Zmxvd3RhYmxlLSZndDtsaXN0LCAmYW1wO2Zsb3d0YWJsZXMpOwogCW11dGV4X3VubG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKIAogCXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9maWI6CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO2Zsb3d0YWJsZS0mZ3Q7Z2Nfd29yayk7CiYjNDM7CXJoYXNodGFibGVfZGVzdHJveSgmYW1wO2Zsb3d0YWJsZS0mZ3Q7cmhhc2h0YWJsZSk7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X3RhYmxlX2luaXQpOwogCkBAIC03NTQsOCAmIzQzOzkzOSwyNSBAQCB2b2lkIG5mX2Zsb3dfdGFibGVfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTsKIAomIzQzO3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX2RyYWluKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKmV2ZW50czsKJiM0MzsKJiM0MzsJZXZlbnRzID0gbGxpc3RfZGVsX2FsbCgmYW1wO2Zsb3dfdGFibGUtJmd0O2ZpYl9ldmVudHMpOwomIzQzOwlsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpCiYjNDM7CQlrZnJlZShldik7CiYjNDM7fQomIzQzOwogdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSkKIHsKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7CiYjNDM7CQl1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihyZWFkX3BuZXQoJmFtcDtmbG93X3RhYmxlLSZndDtuZXQpLAomIzQzOwkJCQkJJmFtcDtmbG93X3RhYmxlLSZndDtmaWJfbmIpOwomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO2Zsb3dfdGFibGUtJmd0O2ZpYl93b3JrKTsKJiM0MzsJCW5mX2Zsb3dfdGFibGVfZmliX2RyYWluKGZsb3dfdGFibGUpOwomIzQzOwl9CiYjNDM7CiAJbXV0ZXhfbG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKIAlsaXN0X2RlbCgmYW1wO2Zsb3dfdGFibGUtJmd0O2xpc3QpOwogCW11dGV4X3VubG9jaygmYW1wO2Zsb3d0YWJsZV9sb2NrKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBGbG93IFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZS5oYC4gU2VlbXMgdGhleSYjMzk7cmUgYWRkaW5nIEZJQiBldmVudCBoYW5kbGluZyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGVzLCBzcGVjaWZpY2FsbHkgZm9yIHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhIGdvb2QgZnVuY3Rpb25hbCBhZGRpdGlvbiwgYW5kIHRoZSBhcmNoaXRlY3R1cmUgb2YgaXQgaXMgZXhhY3RseSB3aGF0IEkmIzM5O2QgZXhwZWN0LiBBIG5vdGlmaWVyIChgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgKSBsaXN0ZW5pbmcgZm9yIEZJQiBldmVudHMg4oCTIHJvdXRlIGNoYW5nZXMsIGJhc2ljYWxseSDigJMgYW5kIGEgd29yayBxdWV1ZSBpdGVtIChgbmZfZmxvd190YWJsZV9maWJfd29ya2ApIHRvIGhhbmRsZSB0aGUgY2xlYW51cC4gVGhlIHdvcmsgaXRlbSBpdGVyYXRlcyB0aGUgZmxvdyB0YWJsZSBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBwcm9ibGVtYXRpYyBwcmVmaXguIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXMgaG93IHRoaXMgcGxheXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGNoYW5nZSAqaXMqIGNvcmUgbmV0ZmlsdGVyLCBzbyBpdCYjMzk7cyBwcm9iYWJseSByZWFjaGFibGUgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZXJlJiMzOTtzIHBoeXNpY2FsIGhhcmR3YXJlLiBSb3V0aW5nIHRhYmxlIGNoYW5nZXMgKEZJQiBldmVudHMpIGFyZSBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzaW11bGF0ZWQgb3IgdHJpZ2dlcmVkIGluIFZNcyBieSBhZGRpbmcgb3IgcmVtb3Zpbmcgcm91dGVzLiBBbmQsIG9mIGNvdXJzZSwgTmV0ZmlsdGVyIGZsb3cgdGFibGVzIGNhbiBiZSBjcmVhdGVkIGFuZCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBmbGFnIHNldCwgKmV2ZW4gaWYqIHRoZSBhY3R1YWwgb2ZmbG9hZCBpc24mIzM5O3QgcHJlc2VudC4KCldhaXQsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGl0IHNlZW1zIHRoYXQgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkYCBjaGVja3MgaWYgdGhlIGZsb3d0YWJsZSBoYXMgdGhlIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgZmxhZyBzZXQuIFRoYXQmIzM5O3MgZ29vZCwgYnV0IGhvdyBleGFjdGx5IGNhbiB0aGF0IGZsYWcgYmUgc2V0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBjaGVjayBob3cgYE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEYCBpcyB1c2VkIGFuZCBpZiBpdCYjMzk7cyBwb3NzaWJsZSB0byBzZXQgdGhhdCBmbGFnIGV2ZW4gaWYgYWN0dWFsIGhhcmR3YXJlIGlzIG5vdCBwcmVzZW50LiBUaW1lIHRvIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCBzZWFyY2ggZm9yIHRoYXQgbWFjcm8sIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GX0ZMT1dUQUJMRV9IV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NzE9ZW51bSBuZl9mbG93dGFibGVfZmxhZ3Mge1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo3MjpcdE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEXHRcdD0gMHgxLFx0LyogTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEICovXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTczLVx0TkZfRkxPV1RBQkxFX0NPVU5URVJcdFx0PSAweDIsXHQvKiBORlRfRkxPV1RBQkxFX0NPVU5URVIgKi9cbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTkyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTkzLXtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6OTQ6XHRyZXR1cm4gZmxvd3RhYmxlLVx1MDAzZWZsYWdzIFx1MDAyNiBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRDtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtOTUtfVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYz0zMjQ9c3RhdGljIGludCB0Y2ZfY3RfZmxvd190YWJsZV9nZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX2N0X3BhcmFtcyAqcGFyYW1zKVxuLS1cbm5ldC9zY2hlZC9hY3RfY3QuYy0zNDktXHRjdF9mdC1cdTAwM2VuZl9mdC50eXBlID0gXHUwMDI2Zmxvd3RhYmxlX2N0O1xubmV0L3NjaGVkL2FjdF9jdC5jOjM1MDpcdGN0X2Z0LVx1MDAzZW5mX2Z0LmZsYWdzIHw9IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbm5ldC9zY2hlZC9hY3RfY3QuYy0zNTEtXHRcdFx0ICAgICAgTkZfRkxPV1RBQkxFX0NPVU5URVI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTczNgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gSGFyZHdhcmUgT2ZmbG9hZCBmb3IgQ29ubmVjdGlvbiBUcmFja2luZyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBvZmZsb2FkIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBrZXJuZWwsIGFuZCBpdCBzZWVtcyB0aGUgYWN0aW9uJiMzOTtzIGNvcmUgbG9naWMgaXMgc2l0dWF0ZWQgd2l0aGluIGBuZXQvc2NoZWQvYWN0X2N0LmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBpbXBvcnRhbnQgZmxhZyBoZXJlIGlzIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIEl0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGlzIHNldC4KClRoZSBjb2RlJiMzOTtzIGNvbm5lY3Rpb24gdG8gdGhlIGBuZnRhYmxlc2AgZnJhbWV3b3JrIGlzIHRoZSBuZXh0IHBsYWNlIHRvIGxvb2sgYXQuIFNlZW1zIGxpa2UgdGhlIGtleSBpcyB0aGUgbWFwcGluZyBiZXR3ZWVuIGBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgYW5kIGBORlRfRkxPV1RBQkxFX0hXX09GRkxPQURgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjb25maWd1cmF0aW9uIGlzIGxpa2VseSBtYW5hZ2VkIHZpYSBuZXRsaW5rIHdpdGhpbiB0aGUgbmZ0YWJsZXMgaW50ZXJmYWNlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBwbGFjZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgdGhlIGZyYW1ld29yayBpcyBpbiBzeW5jLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTcxPWVudW0gbmZfZmxvd3RhYmxlX2ZsYWdzIHtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NzI6XHRORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRFx0XHQ9IDB4MSxcdC8qIE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCAqL1xuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC03My1cdE5GX0ZMT1dUQUJMRV9DT1VOVEVSXHRcdD0gMHgyLFx0LyogTkZUX0ZMT1dUQUJMRV9DT1VOVEVSICovXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaD0xNjg3PWVudW0gbmZ0X29iamVjdF9hdHRyaWJ1dGVzIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDMtICpcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6MTcwNDogKiBATkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEOiBmbG93dGFibGUgaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDUtICogQE5GVF9GTE9XVEFCTEVfQ09VTlRFUjogZW5hYmxlIGZsb3cgY291bnRlcnNcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE3MDc9ZW51bSBuZnRfZmxvd3RhYmxlX2ZsYWdzIHtcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6MTcwODpcdE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRFx0PSAweDEsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDktXHRORlRfRkxPV1RBQkxFX0NPVU5URVJcdFx0PSAweDIsXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oOjE3MTA6XHRORlRfRkxPV1RBQkxFX01BU0tcdFx0PSAoTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEIHxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtMTcxMS1cdFx0XHRcdFx0ICAgTkZUX0ZMT1dUQUJMRV9DT1VOVEVSKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwOTY9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTQxLVx0XHR9XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTQyOlx0XHRpZiAoKGZsb3d0YWJsZS1cdTAwM2VkYXRhLmZsYWdzIFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpIF5cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNDM6XHRcdCAgICAoZmxhZ3MgXHUwMDI2IE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCkpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxNDQtXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIEZsb3d0YWJsZSBJbml0aWFsaXphdGlvbiBhbmQgRklCIE5vdGlmaWVyIFJlZ2lzdHJhdGlvbioqCgpPa2F5LCBzbyBmcm9tIHdoYXQgSSYjMzk7bSBzZWVpbmcsIGEgdXNlcnNwYWNlIGFwcGxpY2F0aW9uIGNhbiBlc3RhYmxpc2ggYSBmbG93dGFibGUsIGVpdGhlciBkaXJlY3RseSB3aXRoIHRoZSBgTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEYCBmbGFnLCBvciBpbmRpcmVjdGx5IHZpYSBgdGMgYWN0aW9uIGN0YC4gIFRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHdoZW4gdGhpcyBmbG93dGFibGUgaXMgaW5pdGlhbGl6ZWQsIGBuZl9mbG93X3RhYmxlX2luaXRgIGlzIGludm9rZWQuICBUaGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBpZiBgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoKWAgcmV0dXJucyB0cnVlLCBhIEZJQiBub3RpZmllciBnZXRzIHJlZ2lzdGVyZWQuCgpFc3NlbnRpYWxseSwgd2hlbmV2ZXIgdGhlIHJvdXRpbmcgdGFibGUgKEZJQikgaXMgbW9kaWZpZWQsIHRoZSBgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiB0aGVuIHF1ZXVlcyBhIHdvcmsgaXRlbSwgYGZpYl93b3JrYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBwcm9jZXNzZWQgYnkgYG5mX2Zsb3dfdGFibGVfZmliX3dvcmtgLiAgVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBtZWNoYW5pc20gZm9yIGtlZXBpbmcgdGhlIGZsb3d0YWJsZSBzeW5jaHJvbml6ZWQgd2l0aCByb3V0aW5nIGNoYW5nZXMuCgpUaGlzIHdob2xlIHByb2Nlc3MgYXBwZWFycyBlbWluZW50bHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSwgZXZlbiB3aXRoaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLCB3aGljaCBpcyBnb29kLiBXZSBjYW4gZGVmaW5pdGVseSBzaW11bGF0ZSB2YXJpb3VzIHJvdXRpbmcgZXZlbnRzIGFuZCBtb25pdG9yIHRoZSBmbG93dGFibGUmIzM5O3MgcmVhY3Rpb25zLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmNgIHRvIHNlZSB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgZW50aXJlIHByb2Nlc3MgdG8gZnVuY3Rpb24gY29ycmVjdGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfY29yZVxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXHQmIzQzOz0gbmZfZmxvd190YWJsZS5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0MzpuZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBGbG93IFRhYmxlIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgY29kZSBJJiMzOTttIGxvb2tpbmcgYXQgKmRlZmluaXRlbHkqIHJlbGllcyBvbiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWc7IGEgbWlzc2luZyBmbG93IHRhYmxlIHdvdWxkIG9idmlvdXNseSBicmVhayBmdW5jdGlvbmFsaXR5LiBUaGVuLCBpdCYjMzk7cyBsZXZlcmFnaW5nIGBDT05GSUdfSVBWNmAgZm9yIElQdjYgc3VwcG9ydCwgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gR2l2ZW4gdGhpcyBkZXBlbmRlbmN5IG9uIHRoZSBmbG93IHRhYmxlIGFuZCBJUHY2LCBJIHNob3VsZCBwcm9iYWJseSB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSXQgbWFrZXMgdGhlIG1vc3Qgc2Vuc2UgdG8gY2hlY2sgdGhlcmUgZm9yIHRoZSBgTkZfRkxPV19UQUJMRWAgb3B0aW9uIHRvIHZlcmlmeSBpdHMgZGV0YWlscyBhbmQgYW55IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlLiBVbmRlcnN0YW5kaW5nIHRoYXQgY29uZmlnIG9wdGlvbiBiZXR0ZXIgd2lsbCBndWlkZSBob3cgSSBwcm9jZWVkIGZyb20gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY3NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipFeGFtaW5pbmcgdGhlIENvcmUgTmV0d29yayBGbG93IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCBhbmQgaXQmIzM5O3MgcHJldHR5IGNsZWFyOiBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIHByaW1hcnkgZm9jdXMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyBhYm91dCBtYW5hZ2luZyBuZXR3b3JrIGZsb3cgZW50cmllcywgbGlrZWx5IGZvciBzb21ldGhpbmcgbGlrZSBjb25uZWN0aW9uIHRyYWNraW5nLCBmbG93LWJhc2VkIHJvdXRpbmcsIG9yIHBlcmhhcHMgZXZlbiBhIG1vcmUgc29waGlzdGljYXRlZCB1c2VyLXNwYWNlIG5ldHdvcmsgYWNjZWxlcmF0aW9uIG1lY2hhbmlzbS4KCkFuZCB0aGVuIEkgc2VlIHRoZSBtZW50aW9uIG9mIGByZWdpc3Rlcl9maWJfbm90aWZpZXJgLiBSaWdodCwgdGhhdCBmdW5jdGlvbiYjMzk7cyBpbiBgbmV0L2NvcmUvZmliX25vdGlmaWVyLmNgLiBUaGF0JiMzOTtzIGEgc3Ryb25nIGhpbnQuIGBmaWJgIG1lYW5zIEZvcndhcmRpbmcgSW5mb3JtYXRpb24gQmFzZSwgd2hpY2ggZGVhbHMgd2l0aCByb3V0aW5nIHRhYmxlcy4gYE5vdGlmaWVyYCBpbmRpY2F0ZXMgYW4gZXZlbnQtZHJpdmVuIG1lY2hhbmlzbS4gVGh1cywgdGhlIGNvZGUgaXMgbGlrZWx5IHJlZ2lzdGVyaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgbm90aWZpZWQgb2YgY2hhbmdlcyB0byB0aGUgcm91dGluZyB0YWJsZS4gVGhpcyBpbXBsaWVzIHRoYXQgdGhlIG5ldHdvcmsgZmxvdyB0YWJsZSYjMzk7cyBiZWhhdmlvciBvciBlbnRyaWVzIGFyZSBsaWtlbHkgKmRlcGVuZGVudCogb24gdGhlIHN0YXRlIG9mIHRoZSByb3V0aW5nIHRhYmxlLiBDaGFuZ2VzIHRvIHJvdXRlcyAoYWRkZWQsIHJlbW92ZWQsIG1vZGlmaWVkKSBsaWtlbHkgdHJpZ2dlciBzb21lIGFjdGlvbiByZWxhdGVkIHRvIHRoZSBmbG93IHRhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBub3RpZmllciBjYWxsYmFjayB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBmbG93IHRhYmxlIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24uIFRoaXMgbWlnaHQgaW52b2x2ZSB0aGluZ3MgbGlrZSBpbnZhbGlkYXRpbmcgY2FjaGVkIGZsb3cgZW50cmllcywgdXBkYXRpbmcgcm91dGVzIHdpdGhpbiB0aGUgZmxvdyB0YWJsZSBpdHNlbGYsIG9yIHBlcmhhcHMgZXZlbiBhbHRlcmluZyBob3cgcGFja2V0cyBhcmUgbWF0Y2hlZCB0byBmbG93IGVudHJpZXMgYmFzZWQgb24gcm91dGUgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVnaXN0ZXJfZmliX25vdGlmaWVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9zd2l0Y2hkZXYucnN0PTM0OT1UbyBwcm9ncmFtIHRoZSBkZXZpY2UsIHRoZSBkcml2ZXIgaGFzIHRvIHJlZ2lzdGVyIGEgRklCIG5vdGlmaWVyIGhhbmRsZXJcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zd2l0Y2hkZXYucnN0OjM1MDp1c2luZyByZWdpc3Rlcl9maWJfbm90aWZpZXIuIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBhdmFpbGFibGU6XG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc3dpdGNoZGV2LnJzdC0zNTEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYz0xNTQ4PWludCBwcmVzdGVyYV9yb3V0ZXJfaW5pdChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDAtXHRyb3V0ZXItXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBfX3ByZXN0ZXJhX3JvdXRlcl9maWJfZXZlbnQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jOjE2MDE6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnJvdXRlci1cdTAwM2VmaWJfbmIsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDItXHRcdFx0XHQgICAgLyogVE9ETzogZmx1c2ggZmliIGVudHJpZXMgKi8gTlVMTCwgTlVMTCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDMtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYzoxNjA0Olx0XHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYy0xNjA3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYzoxNjA4OmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDktXHR1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKFx1MDAyNnJvdXRlci1cdTAwM2VuZXRldmVudF9uYik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYz0xNjI5PXZvaWQgcHJlc3RlcmFfcm91dGVyX2Zpbmkoc3RydWN0IHByZXN0ZXJhX3N3aXRjaCAqc3cpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MzAte1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYzoxNjMxOlx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnN3LVx1MDAzZXJvdXRlci1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYy0xNjMyLVx0dW5yZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcihcdTAwMjZzdy1cdTAwM2Vyb3V0ZXItXHUwMDNlbmV0ZXZlbnRfbmIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYz0xODYwPXN0cnVjdCBtbHg1ZV90Y190dW5fZW5jYXAgKm1seDVlX3RjX3R1bl9pbml0KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy0xODcyLVx0aGFzaF9pbml0KGVuY2FwLVx1MDAzZXJvdXRlX3RibCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM6MTg3MzpcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZfbmV0KHByaXYtXHUwMDNlbmV0ZGV2KSwgXHUwMDI2ZW5jYXAtXHUwMDNlZmliX25iLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTE4NzQtXHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jPTE4ODM9dm9pZCBtbHg1ZV90Y190dW5fY2xlYW51cChzdHJ1Y3QgbWx4NWVfdGNfdHVuX2VuY2FwICplbmNhcClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtMTg4Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYzoxODg4Olx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2X25ldChlbmNhcC1cdTAwM2Vwcml2LVx1MDAzZW5ldGRldiksIFx1MDAyNmVuY2FwLVx1MDAzZWZpYl9uYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtMTg4OS1cdGZsdXNoX3dvcmtxdWV1ZShlbmNhcC1cdTAwM2Vwcml2LVx1MDAzZXdxKTsgLyogZmx1c2ggZmliIGV2ZW50IHdvcmtzICovXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmM9NTQzND1pbnQgbWx4NWVfdGNfZXN3X2luaXQoc3RydWN0IG1seDVfcmVwX3VwbGlua19wcml2ICp1cGxpbmtfcHJpdilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NDg4LVx0XHRlcnIgPSBQVFJfRVJSKHVwbGlua19wcml2LVx1MDAzZWVuY2FwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU0ODk6XHRcdGdvdG8gZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU0OTAtXHR9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTUwMS1cdG1seDVlX3RjX3R1bl9jbGVhbnVwKHVwbGlua19wcml2LVx1MDAzZWVuY2FwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jOjU1MDI6ZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU1MDMtXHRtYXBwaW5nX2Rlc3Ryb3kodXBsaW5rX3ByaXYtXHUwMDNldHVubmVsX2VuY19vcHRzX21hcHBpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYz0zNzI9aW50IG1seDVfbGFnX21wX2luaXQoc3RydWN0IG1seDVfbGFnICpsZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy0zODktXHRtcC1cdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG1seDVfbGFnX2ZpYl9ldmVudDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYzozOTA6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNm1wLVx1MDAzZWZpYl9uYixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy0zOTEtXHRcdFx0XHQgICAgbWx4NV9sYWdfZmliX2V2ZW50X2ZsdXNoLCBOVUxMKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL21wLmM9NDAwPXZvaWQgbWx4NV9sYWdfbXBfY2xlYW51cChzdHJ1Y3QgbWx4NV9sYWcgKmxkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jLTQwNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYzo0MDc6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihcdTAwMjZpbml0X25ldCwgXHUwMDI2bXAtXHUwMDNlZmliX25iKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy00MDgtXHRkZXN0cm95X3dvcmtxdWV1ZShtcC1cdTAwM2V3cSk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTE1NzY9aW50IG1seHN3X3NwX3JvdXRlcl9pbml0KHN0cnVjdCBtbHhzd19zcCAqbWx4c3dfc3AsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE2OTYtXHRtbHhzd19zcC1cdTAwM2Vyb3V0ZXItXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBtbHhzd19zcF9yb3V0ZXJfZmliX2V2ZW50O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE2OTc6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIobWx4c3dfc3BfbmV0KG1seHN3X3NwKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNjk4LVx0XHRcdFx0ICAgIFx1MDAyNm1seHN3X3NwLVx1MDAzZXJvdXRlci1cdTAwM2VmaWJfbmIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3MDAtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3MDE6XHRcdGdvdG8gZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzAyLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzA0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3MDU6ZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzA2LVx0dW5yZWdpc3Rlcl9uZXh0aG9wX25vdGlmaWVyKG1seHN3X3NwX25ldChtbHhzd19zcCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTE3NTU9dm9pZCBtbHhzd19zcF9yb3V0ZXJfZmluaShzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzU4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3NTk6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihtbHhzd19zcF9uZXQobWx4c3dfc3ApLCBcdTAwMjZyb3V0ZXItXHUwMDNlZmliX25iKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzYwLVx0dW5yZWdpc3Rlcl9uZXh0aG9wX25vdGlmaWVyKG1seHN3X3NwX25ldChtbHhzd19zcCksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmM9Mjg0ND1zdGF0aWMgaW50IHJvY2tlcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NDItXHRyb2NrZXItXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSByb2NrZXJfcm91dGVyX2ZpYl9ldmVudDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jOjI5NDM6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnJvY2tlci1cdTAwM2VmaWJfbmIsIE5VTEwsIE5VTEwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMjk0NC1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTQ1Olx0XHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0yOTQ2LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NjktZXJyX3JlZ2lzdGVyX3N3aXRjaGRldl9ub3RpZmllcjpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jOjI5NzA6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihcdTAwMjZpbml0X25ldCwgXHUwMDI2cm9ja2VyLVx1MDAzZWZpYl9uYik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTcxOmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0yOTcyLVx0cm9ja2VyX3JlbW92ZV9wb3J0cyhyb2NrZXIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jPTI5OTc9c3RhdGljIHZvaWQgcm9ja2VyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0zMDA1LVx0dW5yZWdpc3Rlcl9zd2l0Y2hkZXZfbm90aWZpZXIoXHUwMDI2cm9ja2VyX3N3aXRjaGRldl9ub3RpZmllcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzozMDA2Olx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoXHUwMDI2aW5pdF9uZXQsIFx1MDAyNnJvY2tlci1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMzAwNy1cdHJvY2tlcl9yZW1vdmVfcG9ydHMocm9ja2VyKTtcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmM9MTU1Mj1zdHJ1Y3QgbnNpbV9maWJfZGF0YSAqbnNpbV9maWJfY3JlYXRlKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYy0xNTkyLVx0ZGF0YS1cdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5zaW1fZmliX2V2ZW50X25iO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE1OTM6XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFx1MDAyNmRhdGEtXHUwMDNlZmliX25iLFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE1OTQtXHRcdFx0XHQgICAgbnNpbV9maWJfZHVtcF9pbmNvbnNpc3RlbnQsIGV4dGFjayk7XG4tLVxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2MjYtZXJyX2ZpYl9ub3RpZmllcl91bnJlZ2lzdGVyOlxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE2Mjc6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZsaW5rX25ldChkZXZsaW5rKSwgXHUwMDI2ZGF0YS1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2MjgtZXJyX25leHRob3BfbmJfdW5yZWdpc3Rlcjpcbi0tXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmM9MTY0NT12b2lkIG5zaW1fZmliX2Rlc3Ryb3koc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBuc2ltX2ZpYl9kYXRhICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYy0xNjU3LVx0bnNpbV9maWJfZGVidWdmc19leGl0KGRhdGEpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE2NTg6XHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZsaW5rX25ldChkZXZsaW5rKSwgXHUwMDI2ZGF0YS1cdTAwM2VmaWJfbmIpO1xuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2NTktXHR1bnJlZ2lzdGVyX25leHRob3Bfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFx1MDAyNmRhdGEtXHUwMDNlbmV4dGhvcF9uYik7XG4tLVxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmg9NDE9aW50IGNhbGxfZmliX25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gZmliX2V2ZW50X3R5cGUgZXZlbnRfdHlwZSxcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oLTQyLVx0XHQgICAgICAgc3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvKTtcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oOjQzOmludCByZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDQtXHRcdFx0ICB2b2lkICgqY2IpKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpLFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDUtXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmg6NDY6aW50IHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7XG5pbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaC00Ny1zdHJ1Y3QgZmliX25vdGlmaWVyX29wcyAqXG4tLVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM9ODI9c3RhdGljIGJvb2wgZmliX2R1bXBfaXNfY29uc2lzdGVudChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG4tLVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtOTctI2RlZmluZSBGSUJfRFVNUF9NQVhfUkVUUklFUyA1XG5uZXQvY29yZS9maWJfbm90aWZpZXIuYzo5ODppbnQgcmVnaXN0ZXJfZmliX25vdGlmaWVyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTk5LVx0XHRcdCAgdm9pZCAoKmNiKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKSxcbi0tXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYy0xMTctfVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTE4OkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZmliX25vdGlmaWVyKTtcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTExOS1cbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jOjEyMDppbnQgdW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtMTIxLXtcbi0tXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYy0xMjUtfVxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTI2OkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9maWJfbm90aWZpZXIpO1xubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtMTI3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODY3PWludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtODg3LVx0XHRmbG93dGFibGUtXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudDtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODg4Olx0XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIobmV0LCBcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX25iLFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04ODktXHRcdFx0XHRcdCAgICBOVUxMLCBOVUxMKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk1Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTU0LVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jOjk1NTpcdFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIocmVhZF9wbmV0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlbmV0KSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTU2LVx0XHRcdFx0XHRcdTAwMjZmbG93X3RhYmxlLVx1MDAzZWZpYl9uYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDM3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBGaWIgTm90aWZpZXIgUmVnaXN0cmF0aW9uKioKCk9rYXksIHNvIGByZWdpc3Rlcl9maWJfbm90aWZpZXJgLi4uIEkga25vdyB0aGF0IG9uZS4gSXQmIzM5O3MgaW4gYG5ldC9jb3JlL2ZpYl9ub3RpZmllci5jYC4gVGhhdCBmaWxlIHNob3VsZCBiZSBjb21waWxlZCwgb2J2aW91c2x5LCBhcyBsb25nIGFzIGBDT05GSUdfTkVUYCBpcyBzZXQuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCB0aG91Z2gsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLiBHb3R0YSBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMuIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgaG93IGl0JiMzOTtzIGludGVncmF0ZWQsIHNvIGEgZG91YmxlLWNoZWNrIGlzIHdvcnRoIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmaWJfbm90aWZpZXJcXC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTEyPW9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbi0tXG5uZXQvY29yZS9NYWtlZmlsZS0xNC1cdFx0XHRzb2NrX2RpYWcubyBkZXZfaW9jdGwubyB0c28ubyBzb2NrX3JldXNlcG9ydC5vIFxcXG5uZXQvY29yZS9NYWtlZmlsZToxNTpcdFx0XHRmaWJfbm90aWZpZXIubyB4ZHAubyBmbG93X29mZmxvYWQubyBncm8ubyBcXFxubmV0L2NvcmUvTWFrZWZpbGUtMTYtXHRcdFx0bmV0ZGV2LWdlbmwubyBuZXRkZXYtZ2VubC1nZW4ubyBuZXRkZXZfd29yay5vIGdzby5vXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNC1cdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE1Olx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnVpbGQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgZmliX25vdGlmaWVyLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBidWlsdCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgYE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIEl0JiMzOTtzIHJlbGF0ZWQgdG8gdGhlIGBuZl90YWJsZXNgIGZyYW1ld29yaywgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJ1aWxkIGRlcGVuZGVuY2llcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTtsbCBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZTsgaXQgd2lsbCBjb250YWluIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJJiMzOTttIHRoaW5raW5nIHdlJiMzOTtsbCBuZWVkIGBORl9UQUJMRVNgLCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBkZWZpbmVkLiBBaCwgd2FpdCBhIG1pbnV0ZSwgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSAqbmZ0YWJsZXMgbW9kdWxlKiBzcGVjaWZpY2FsbHkgZm9yIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5LiBUaGF0JiMzOTtzIGEga2V5IGRpc3RpbmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1Bcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTAxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24sIGdpdmVuIG15IGV4cGVydGlzZToKCioqRW5hYmxpbmcgQWR2YW5jZWQgRmxvdyBPZmZsb2FkaW5nIGZvciBFbmhhbmNlZCBQZXJmb3JtYW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUgYW5kIHRoZSByZXF1aXJlbWVudHMsIEkmIzM5O20gdGhpbmtpbmcgd2UgbmVlZCB0byBzZXJpb3VzbHkgY29uc2lkZXIgZW5hYmxpbmcgYm90aCBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYC4gV2UmIzM5O3ZlIHNlZW4gdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIHRoZXNlIGZlYXR1cmVzIGJyaW5nIHRvIHRoZSB0YWJsZSBpbiBzaW1pbGFyIGRlcGxveW1lbnRzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBwb3RlbnRpYWwgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aCBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgcGFydGljdWxhcmx5IGFwcGVhbGluZyBmb3IgaGlnaC10aHJvdWdocHV0IHNjZW5hcmlvcywgYW5kIHdlIHdhbnQgdG8gZW5zdXJlIHdlIGFyZSBsZXZlcmFnaW5nIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgdG8gdXMuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBhbHNvIGFkZGluZyBgTkVUX0FDVF9DVGAgdG8gdGhlIGNoZWNrbGlzdC4gVGhlIGB0YyBhY3Rpb24gY3RgIGludGVncmF0aW9uIGlzIGNydWNpYWwgYXMgdGhpcyB3aWxsIGFsbG93IHVzIHRvIGxldmVyYWdlIGZsb3cgdGFibGVzIHdpdGhpbiB0aGUgdHJhZmZpYyBjb250cm9sIGZyYW1ld29yay4gVGhpcyBsZXZlbCBvZiBncmFudWxhciBjb250cm9sIGlzIGVzc2VudGlhbCBmb3IgZmluZS10dW5pbmcgb3VyIG5ldHdvcmtpbmcgYmVoYXZpb3IgYW5kIG1heGltaXppbmcgZWZmaWNpZW5jeSwgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGNhcGFiaWxpdGllcyBvZiBmbG93IHRhYmxlcy4gV2UgY2FuIGdhaW4gYSBsb3QgYnkgY29tYmluaW5nIHRoZXNlIHRvb2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxNToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0FDVF9DVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy04NjQtXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXG5uZXQvc2NoZWQvS2NvbmZpZy04NjYtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcJiMzNDtcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTkxNi1cbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxubmV0L3NjaGVkL0tjb25maWctOTE4LVx0dHJpc3RhdGUgXCYjMzQ7Y29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0NzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGb2N1cyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZG9pbmcgaXMgYSBzYW5pdHkgY2hlY2sgb24gdGhlIGZvY3VzIHN5bWJvbHMgYWRkZWQgYnkgdGhpcyBwYXRjaC4gIEEgcXVpY2sgc2NhbiBzaG93czogYG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoYCwgYG5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hgLCBgbmZfZmxvd19vZmZsb2FkX2ZpYl9jYmAsIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYCwgYG5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoYCwgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YCwgYW5kIGBuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbmAuIFl1cCwgdGhvc2UgbG9vayBsaWtlIHNvbGlkIGZvY3VzIHBvaW50cy4gTm93LCBsZXQmIzM5O3MgZ2V0IHRoZW0gb3JnYW5pemVkIGludG8gYSBjbGVhciBsaXN0IGZvciBlYXNpZXIgcmVmZXJlbmNlOgoKKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudGAKKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYAoqICAgYG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JgCiogICBgbmZfZmxvd19maWJfZmxvd19tYXRjaGAKKiAgIGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGAKKiAgIGBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaGAKKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbmAKCkFscmlnaHQsIG5leHQgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YC4gSSBzZWUgaXQmIzM5O3MgcmVnaXN0ZXJlZCBhcyBhIG5vdGlmaWVyIHVzaW5nIGByZWdpc3Rlcl9maWJfbm90aWZpZXJgLiAgQW5kIHllcywgd2hlbiByb3V0ZXMgYXJlIGFkZGVkLCB0aGUgYGNhbGxfZmliX25vdGlmaWVyc2AgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQsIGluIHR1cm4gY2FsbGluZyB0aGUgbm90aWZpZXIgY2FsbGJhY2suICBTbywgd2UgY2FuIHNheSB3aXRoIGNvbmZpZGVuY2UgdGhhdCBpdCBpcyBpbmRlZWQgcmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgZ2V0IHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIG5haWxlZCBkb3duLiAgVGhpcyBwYXRjaCBzZWVtcyB0byBuZWVkOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYW5kIGBORVRfQUNUX0NUYC4gIEkgY2FuIHNlZSBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBpbiB0aGUgY29kZSwgc28gZGVmaW5pdGVseSBgSVBWNmAgYXMgd2VsbC4KCkkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYElQVjZgIGRlcGVuZGVuY3kuICBZZXMsIGhlcmUgaXQgaXM6CgpgYGBjCiNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQoJY2FzZSBORlBST1RPX0lQVjY6CgkJcmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKCZhbXA7dHVwbGUtJmd0O2RzdF92NiwgJmFtcDtldi0mZ3Q7YWRkci5pcDYsCgkJCQkJIGV2LSZndDtwcmVmaXhfbGVuKTsKI2VuZGlmCmBgYAoKT2theSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoYXQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGgsIHVuZGVyc3Rvb2QuCgpGaW5hbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IG90aGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0ICptaWdodCogYmUgcmVsZXZhbnQuICBgTkZfRkxPV19UQUJMRV9JTkVUYCBjb21lcyB0byBtaW5kOyBpdCYjMzk7cyBwb3NzaWJsZSB0aGF0JiMzOTtzIG5lZWRlZCBmb3Igc3VwcG9ydGluZyBtaXhlZCBJUHY0L0lQdjYgZmxvdyB0YWJsZXMuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgYXMgcGFydCBvZiB0aGUgZGVlcGVyIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFX0lORVQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1MTIKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSB1bmRlcnN0YW5kaW5nIHRoYXQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipDaGVja2luZyB0aGUgRmxvdyBUYWJsZSBDb25maWd1cmF0aW9ucyoqCgpBbHJpZ2h0LCBJJiMzOTttIGFscmVhZHkgZGVlcCBpbnRvIHRoaXMgY29uZmlndXJhdGlvbiwgYnV0IGJlZm9yZSBJIGNvbW1pdCwgbGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRob3NlIGZsb3cgdGFibGUgb3B0aW9ucy4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSBJJiMzOTt2ZSBjb25zaWRlcmVkIGFsbCByZWxldmFudCBzZXR0aW5ncywgZXNwZWNpYWxseSBnaXZlbiB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgSVAgdmVyc2lvbnMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSBkaWRuJiMzOTt0IG92ZXJsb29rIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAuIEl0JiMzOTtzIGVhc3kgdG8gbWlzcyBhIGNydWNpYWwgc2V0dGluZyB3aGVuIHlvdSYjMzk7cmUgZm9jdXNpbmcgb24gb25lIHNwZWNpZmljIGFzcGVjdCwgc28gYSBmaW5hbCwgY29tcHJlaGVuc2l2ZSBzd2VlcCBpcyBhbHdheXMgd2FycmFudGVkLiBUaGlzIGNoZWNrIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eSBpbiB0aGUgbG9uZyBydW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSVBWJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3MzQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBhIE1pc3NpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgYE5GX0ZMT1dfVEFCTEVfSVBWNGAgd2FzIGEgdmFsaWQgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBzb21ldGhpbmcgZmVlbHMgb2ZmLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRlbGxpbmcgbWUgdGhhdCBpdCYjMzk7cyBhY3R1YWxseSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIHRydXRoIGFib3V0IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzLCBvZiBjb3Vyc2UsIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgSVBWNCBmbG93cywgdGhlIGxpa2VseSBwbGFjZSBpcyBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTtsbCBoZWFkIHRoZXJlIGFuZCBoYXZlIGEgbG9vay4gSG9wZWZ1bGx5LCB0aGlzIGNsZWFycyBpdCB1cC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTU6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxNjYKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogMzg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSB0aG9zZSBpbml0aWFsIHN5bWJvbHMgSSB3YXMgbG9va2luZyBhdCBhcmVuJiMzOTt0IHJlbGV2YW50LCB0aGUgaW1wb3J0YW50IG9uZXMgYXJlIGBORl9GTE9XX1RBQkxFYCBhbmQgYE5GX0ZMT1dfVEFCTEVfSU5FVGAuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgdGhlIHBhdGNoIGlzIGludHJvZHVjaW5nIEZJQiBldmVudCBoYW5kbGluZyB0byB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgY29kZSwgc3BlY2lmaWNhbGx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBhY3RpdmUuIEl0JiMzOTtzIGVzc2VudGlhbGx5IG1hbmFnaW5nIGZsb3cgdGFibGUgZW50cmllcyBiYXNlZCBvbiBjaGFuZ2VzIHRvIHRoZSBGb3J3YXJkaW5nIEluZm9ybWF0aW9uIEJhc2UgKEZJQikuIEl0IHJlZ2lzdGVycyBhIG5vdGlmaWVyIGZvciBGSUIgZXZlbnRzIGFuZCB0ZWFycyBkb3duIGZsb3dzIHRoYXQgYXJlIG5vdyBpbnZhbGlkIGJlY2F1c2UgdGhleSBtYXRjaCB0aGUgcm91dGluZyBjaGFuZ2VzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYywgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHBvdGVudGlhbCBpbXBhY3QuIEkgY2FuIHRyaWdnZXIgdGhpcyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1lc3Npbmcgd2l0aCByb3V0aW5nIHRhYmxlcy4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIGZvY3VzIGFyZWE6IEkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXM6IGBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudGAsIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYCwgYG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JgLCBgbmZfZmxvd19maWJfZmxvd19tYXRjaGAsIGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGAsIGBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaGAsIGFuZCBgbmZfZmxvd190YWJsZV9maWJfZHJhaW5gLgoKVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBicmluZyB0aGlzIGNvZGUgaW50byBwbGF5IGFyZSBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9BQ1RfQ1RgLCBhbmQgYElQVjZgLiBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZCB3aGVuIGNyYWZ0aW5nIHRlc3QgY2FzZXMuCgpMZXQmIzM5O3MgZG8gYSBsaXR0bGUgbW9yZSBkaWdnaW5nLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGVuYWJsZWQuIEl0IHVzZXMgc3RhbmRhcmQgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmcm9tIGBpbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaGAsIGBpbmNsdWRlL25ldC9pcF9maWIuaGAsIGFuZCBgaW5jbHVkZS9uZXQvaXA2X2ZpYi5oYCwgd2hpY2ggaXMgYWxsIHByZXR0eSBzdGFuZGFyZCBuZXR3b3JraW5nIGZhcmUuIE5vdGhpbmcganVtcHMgb3V0IGFzIHVudXN1YWxseSBjb21wbGV4IG9yIGRhbmdlcm91cyAqeWV0KiwgYnV0IHRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgbG9naWMgaXMgYmVpbmcgbW9kaWZpZWQuCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGlzLiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDE1OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZXZlbnQmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfd29yayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZmliX2NiJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfZmliX2Zsb3dfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd19maWJfdHVwbGVfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBGSUIgZXZlbnQgaGFuZGxpbmcgdG8gbmV0ZmlsdGVyIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBJdCByZWdpc3RlcnMgYSBGSUIgbm90aWZpZXIgYW5kIHRlYXJzIGRvd24gZmxvd3MgdGhhdCBtYXRjaCB0aGUgRklCIGV2ZW50JiMzOTtzIHByZWZpeC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBhbmQgbW9kaWZ5aW5nIHJvdXRpbmcgdGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9DVCYjMzQ7LAogICAgJiMzNDtJUFY2JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZXZlbnQmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfd29yayYjMzQ7LAogICAgJiMzNDtuZl9mbG93X29mZmxvYWRfZmliX2NiJiMzNDssCiAgICAmIzM0O25mX2Zsb3dfZmliX2Zsb3dfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd19maWJfdHVwbGVfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2gmIzM0OywKICAgICYjMzQ7bmZfZmxvd190YWJsZV9maWJfZHJhaW4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBGSUIgZXZlbnQgaGFuZGxpbmcgdG8gbmV0ZmlsdGVyIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBJdCByZWdpc3RlcnMgYSBGSUIgbm90aWZpZXIgYW5kIHRlYXJzIGRvd24gZmxvd3MgdGhhdCBtYXRjaCB0aGUgRklCIGV2ZW50JiMzOTtzIHByZWZpeC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBhbmQgbW9kaWZ5aW5nIHJvdXRpbmcgdGFibGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDg6NDQuNTc1MDY4MTYyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5NzUwODQ3NTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9BQ1RfQ1RcIixcbiAgICBcIklQVjZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl9mbG93X3RhYmxlX2ZpYl9ldmVudFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9maWJfd29ya1wiLFxuICAgIFwibmZfZmxvd19vZmZsb2FkX2ZpYl9jYlwiLFxuICAgIFwibmZfZmxvd19maWJfZmxvd19tYXRjaFwiLFxuICAgIFwibmZfZmxvd19maWJfdHVwbGVfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoXCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2ZpYl9kcmFpblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgRklCIGV2ZW50IGhhbmRsaW5nIHRvIG5ldGZpbHRlciBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gSXQgcmVnaXN0ZXJzIGEgRklCIG5vdGlmaWVyIGFuZCB0ZWFycyBkb3duIGZsb3dzIHRoYXQgbWF0Y2ggdGhlIEZJQiBldmVudCdzIHByZWZpeC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldGZpbHRlciBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGJ5IGNvbmZpZ3VyaW5nIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBhbmQgbW9kaWZ5aW5nIHJvdXRpbmcgdGFibGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowODo0NC41NzUwNzQ2NDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MjE0MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk3Yzg2NDkxNDM1MTc5YzEyN2ZjMzk5ZDRlMDYyYjBlNjQ5MWIwMWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxNTowODo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbmluZGV4IDdiMjNiMjQ1YTVhODZhLi43YzM2MjU1ZjVhNGY5MSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxcbkBAIC04NCw2ICs4NCw5IEBAIHN0cnVjdCBuZl9mbG93dGFibGUge1xcbiBcXHRzdHJ1Y3QgZmxvd19ibG9ja1xcdFxcdGZsb3dfYmxvY2s7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRcXHRmbG93X2Jsb2NrX2xvY2s7IC8qIEd1YXJkcyBmbG93X2Jsb2NrICovXFxuIFxcdHBvc3NpYmxlX25ldF90XFx0XFx0XFx0bmV0O1xcbitcXHRzdHJ1Y3Qgbm90aWZpZXJfYmxvY2tcXHRcXHRmaWJfbmI7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdFxcdGZpYl93b3JrO1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZFxcdFxcdGZpYl9ldmVudHM7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgbmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbmluZGV4IDk5YzViOWQ2NzFhMGNhLi4yYzkxMjA1NjkyMWFlMCAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xcbkBAIC01LDggKzUsMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9sbGlzdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXBfZmliLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X2ZpYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG5AQCAtNjk1LDExICs2OTksMTc5IEBAIHZvaWQgbmZfZmxvd19kbmF0X3BvcnQoY29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZl9mbG93X2RuYXRfcG9ydCk7XFxuIFxcbitzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2gge1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZVxcdCpldmVudHM7XFxuK307XFxuK1xcbitzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQge1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZVxcdG5vZGU7XFxuK1xcdHU4XFx0XFx0XFx0ZmFtaWx5O1xcbitcXHR1OFxcdFxcdFxcdHByZWZpeF9sZW47XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0X19iZTMyXFx0XFx0aXA0O1xcbitcXHRcXHRzdHJ1Y3QgaW42X2FkZHJcXHRpcDY7XFxuK1xcdH0gYWRkcjtcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoKGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKnR1cGxlLFxcbitcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldilcXG4re1xcbitcXHRpZiAodHVwbGUtXFx1MDAzZWwzcHJvdG8gIT0gZXYtXFx1MDAzZWZhbWlseSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0c3dpdGNoIChldi1cXHUwMDNlZmFtaWx5KSB7XFxuK1xcdGNhc2UgTkZQUk9UT19JUFY0OiB7XFxuK1xcdFxcdF9fYmUzMiBtYXNrID0gZXYtXFx1MDAzZXByZWZpeF9sZW4gP1xcbitcXHRcXHRcXHRodG9ubCh+MHUgXFx1MDAzY1xcdTAwM2MgKDMyIC0gZXYtXFx1MDAzZXByZWZpeF9sZW4pKSA6IDA7XFxuK1xcdFxcdHJldHVybiAodHVwbGUtXFx1MDAzZWRzdF92NC5zX2FkZHIgXFx1MDAyNiBtYXNrKSA9PSAoZXYtXFx1MDAzZWFkZHIuaXA0IFxcdTAwMjYgbWFzayk7XFxuK1xcdH1cXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuK1xcdGNhc2UgTkZQUk9UT19JUFY2OlxcbitcXHRcXHRyZXR1cm4gaXB2Nl9wcmVmaXhfZXF1YWwoXFx1MDAyNnR1cGxlLVxcdTAwM2Vkc3RfdjYsIFxcdTAwMjZldi1cXHUwMDNlYWRkci5pcDYsXFxuK1xcdFxcdFxcdFxcdFxcdCBldi1cXHUwMDNlcHJlZml4X2xlbik7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZfZmxvd19maWJfZmxvd19tYXRjaChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggKm0pXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IGZsb3dfb2ZmbG9hZF90dXBsZSAqb3JpZywgKnJlcGx5O1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2O1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZTtcXG4rXFxuK1xcdG9yaWcgID0gXFx1MDAyNmZsb3ctXFx1MDAzZXR1cGxlaGFzaFtGTE9XX09GRkxPQURfRElSX09SSUdJTkFMXS50dXBsZTtcXG4rXFx0cmVwbHkgPSBcXHUwMDI2Zmxvdy1cXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLnR1cGxlO1xcbitcXG4rXFx0Zm9yIChub2RlID0gbS1cXHUwMDNlZXZlbnRzOyBub2RlOyBub2RlID0gbm9kZS1cXHUwMDNlbmV4dCkge1xcbitcXHRcXHRldiA9IGxsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCwgbm9kZSk7XFxuK1xcdFxcdGlmIChuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChvcmlnLCBldikgfHxcXG4rXFx0XFx0ICAgIG5mX2Zsb3dfZmliX3R1cGxlX21hdGNoKHJlcGx5LCBldikpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2Ioc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IGZsb3dfb2ZmbG9hZCAqZmxvdywgdm9pZCAqZGF0YSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggKm0gPSBkYXRhO1xcbitcXG4rXFx0aWYgKHRlc3RfYml0KE5GX0ZMT1dfVEVBUkRPV04sIFxcdTAwMjZmbG93LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChuZl9mbG93X2ZpYl9mbG93X21hdGNoKGZsb3csIG0pKVxcbitcXHRcXHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPVxcbitcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZmliX3dvcmspO1xcbitcXHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDtcXG4rXFx0c3RydWN0IG5mX2Zsb3dfZmliX21hdGNoIG0gPSB7fTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKmV2ZW50cztcXG4rXFxuK1xcdGV2ZW50cyA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl9ldmVudHMpO1xcbitcXHRpZiAoIWV2ZW50cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bS5ldmVudHMgPSBldmVudHM7XFxuK1xcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZmliX2NiLCBcXHUwMDI2bSk7XFxuK1xcbitcXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpXFxuK1xcdFxcdGtmcmVlKGV2KTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2goY29uc3Qgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlLFxcbitcXHRcXHRcXHRcXHRcXHQgIHU4IGV2ZW50X2ZhbWlseSlcXG4re1xcbitcXHRzd2l0Y2ggKGZsb3d0YWJsZS1cXHUwMDNldHlwZS1cXHUwMDNlZmFtaWx5KSB7XFxuK1xcdGNhc2UgTkZQUk9UT19JUFY0OlxcbitcXHRcXHRyZXR1cm4gZXZlbnRfZmFtaWx5ID09IE5GUFJPVE9fSVBWNDtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjY6XFxuK1xcdFxcdHJldHVybiBldmVudF9mYW1pbHkgPT0gTkZQUk9UT19JUFY2O1xcbitcXHRjYXNlIE5GUFJPVE9fSU5FVDpcXG4rXFx0XFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQgfHxcXG4rXFx0XFx0ICAgICAgIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi9cXG4rc3RhdGljIGludCBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXFxuK3tcXG4rXFx0c3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZmliX25iKTtcXG4rXFx0c3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvID0gcHRyO1xcbitcXHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2O1xcbitcXG4rXFx0c3dpdGNoIChldmVudCkge1xcbitcXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9SRVBMQUNFOlxcbitcXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9BUFBFTkQ6XFxuK1xcdGNhc2UgRklCX0VWRU5UX0VOVFJZX0RFTDpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFx0fVxcbitcXG4rXFx0LyogU2tpcCBldmVudHMgZm9yIGFuIGFkZHJlc3MgZmFtaWx5IHRoaXMgdGFibGUgY2Fubm90IGhvbGQuICovXFxuK1xcdGlmICghbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2goZmxvd190YWJsZSwgaW5mby1cXHUwMDNlZmFtaWx5KSlcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0ZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTtcXG4rXFx0aWYgKCFldilcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXG4rXFx0c3dpdGNoIChpbmZvLVxcdTAwM2VmYW1pbHkpIHtcXG4rXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuK1xcdFxcdHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbyAqZmVuO1xcbitcXG4rXFx0XFx0ZmVuID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbywgaW5mbyk7XFxuK1xcdFxcdGV2LVxcdTAwM2VmYW1pbHkgICAgID0gTkZQUk9UT19JUFY0O1xcbitcXHRcXHRldi1cXHUwMDNlYWRkci5pcDQgICA9IGh0b25sKGZlbi1cXHUwMDNlZHN0KTtcXG4rXFx0XFx0ZXYtXFx1MDAzZXByZWZpeF9sZW4gPSBmZW4tXFx1MDAzZWRzdF9sZW47XFxuK1xcdFxcdGJyZWFrO1xcbitcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuK1xcdGNhc2UgTkZQUk9UT19JUFY2OlxcbitcXHRcXHRzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW42O1xcbitcXG4rXFx0XFx0ZmVuNiA9IGNvbnRhaW5lcl9vZihpbmZvLCBzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvLCBpbmZvKTtcXG4rXFx0XFx0aWYgKCFmZW42LVxcdTAwM2VydClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcbitcXHRcXHRldi1cXHUwMDNlZmFtaWx5ICAgICA9IE5GUFJPVE9fSVBWNjtcXG4rXFx0XFx0ZXYtXFx1MDAzZWFkZHIuaXA2ICAgPSBmZW42LVxcdTAwM2VydC1cXHUwMDNlZmliNl9kc3QuYWRkcjtcXG4rXFx0XFx0ZXYtXFx1MDAzZXByZWZpeF9sZW4gPSBmZW42LVxcdTAwM2VydC1cXHUwMDNlZmliNl9kc3QucGxlbjtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZlxcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZldi1cXHUwMDNlbm9kZSwgXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl9ldmVudHMpO1xcbitcXHRxdWV1ZV93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsIFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VmaWJfd29yayk7XFxuK1xcdHJldHVybiBOT1RJRllfRE9ORTtcXG4rXFxuK2VycjpcXG4rXFx0a2ZyZWUoZXYpO1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuIGludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbiB7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VuZXQpO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZ2Nfd29yaywgbmZfZmxvd19vZmZsb2FkX3dvcmtfZ2MpO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmliX3dvcmssIG5mX2Zsb3dfdGFibGVfZmliX3dvcmspO1xcbitcXHRpbml0X2xsaXN0X2hlYWQoXFx1MDAyNmZsb3d0YWJsZS1cXHUwMDNlZmliX2V2ZW50cyk7XFxuIFxcdGZsb3dfYmxvY2tfaW5pdChcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xcbiBcXG5AQCAtNzExLDExICs4ODMsMjQgQEAgaW50IG5mX2Zsb3dfdGFibGVfaW5pdChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuIFxcdHF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1fcG93ZXJfZWZmaWNpZW50X3dxLFxcbiBcXHRcXHRcXHQgICBcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VnY193b3JrLCBIWik7XFxuIFxcbitcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd3RhYmxlKSkge1xcbitcXHRcXHRmbG93dGFibGUtXFx1MDAzZWZpYl9uYi5ub3RpZmllcl9jYWxsID0gbmZfZmxvd190YWJsZV9maWJfZXZlbnQ7XFxuK1xcdFxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsIFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZpYl9uYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE5VTEwsIE5VTEwpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfZmliO1xcbitcXHR9XFxuK1xcbiBcXHRtdXRleF9sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIFxcdGxpc3RfYWRkKFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWxpc3QsIFxcdTAwMjZmbG93dGFibGVzKTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZmbG93dGFibGVfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9maWI6XFxuK1xcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2Zmxvd3RhYmxlLVxcdTAwM2VnY193b3JrKTtcXG4rXFx0cmhhc2h0YWJsZV9kZXN0cm95KFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZXJoYXNodGFibGUpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfaW5pdCk7XFxuIFxcbkBAIC03NTQsOCArOTM5LDI1IEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9jbGVhbnVwKTtcXG4gXFxuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX2RyYWluKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuK3tcXG4rXFx0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldiwgKm5leHQ7XFxuK1xcdHN0cnVjdCBsbGlzdF9ub2RlICpldmVudHM7XFxuK1xcbitcXHRldmVudHMgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VmaWJfZXZlbnRzKTtcXG4rXFx0bGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldiwgbmV4dCwgZXZlbnRzLCBub2RlKVxcbitcXHRcXHRrZnJlZShldik7XFxuK31cXG4rXFxuIHZvaWQgbmZfZmxvd190YWJsZV9mcmVlKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUpXFxuIHtcXG4rXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7XFxuK1xcdFxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKHJlYWRfcG5ldChcXHUwMDI2Zmxvd190YWJsZS1cXHUwMDNlbmV0KSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl9uYik7XFxuK1xcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWZpYl93b3JrKTtcXG4rXFx0XFx0bmZfZmxvd190YWJsZV9maWJfZHJhaW4oZmxvd190YWJsZSk7XFxuK1xcdH1cXG4rXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG4gXFx0bGlzdF9kZWwoXFx1MDAyNmZsb3dfdGFibGUtXFx1MDAzZWxpc3QpO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3d0YWJsZV9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDg6NDUuNTE4MTAwMjkxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjg4MDc4MDQxMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiTkVUX0FDVF9DVFwiLFxuICAgIFwiSVBWNlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX2V2ZW50XCIsXG4gICAgXCJuZl9mbG93X3RhYmxlX2ZpYl93b3JrXCIsXG4gICAgXCJuZl9mbG93X29mZmxvYWRfZmliX2NiXCIsXG4gICAgXCJuZl9mbG93X2ZpYl9mbG93X21hdGNoXCIsXG4gICAgXCJuZl9mbG93X2ZpYl90dXBsZV9tYXRjaFwiLFxuICAgIFwibmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX2RyYWluXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBGSUIgZXZlbnQgaGFuZGxpbmcgdG8gbmV0ZmlsdGVyIGZsb3cgdGFibGVzIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBJdCByZWdpc3RlcnMgYSBGSUIgbm90aWZpZXIgYW5kIHRlYXJzIGRvd24gZmxvd3MgdGhhdCBtYXRjaCB0aGUgRklCIGV2ZW50J3MgcHJlZml4LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0ZmlsdGVyIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYnkgY29uZmlndXJpbmcgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGFuZCBtb2RpZnlpbmcgcm91dGluZyB0YWJsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOTdjODY0OTE0MzUxNzljMTI3ZmMzOTlkNGUwNjJiMGU2NDkxYjAxZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTU6MDg6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuaW5kZXggN2IyM2IyNDVhNWE4NmEuLjdjMzYyNTVmNWE0ZjkxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaFxuQEAgLTg0LDYgKzg0LDkgQEAgc3RydWN0IG5mX2Zsb3d0YWJsZSB7XG4gXHRzdHJ1Y3QgZmxvd19ibG9ja1x0XHRmbG93X2Jsb2NrO1xuIFx0c3RydWN0IHJ3X3NlbWFwaG9yZVx0XHRmbG93X2Jsb2NrX2xvY2s7IC8qIEd1YXJkcyBmbG93X2Jsb2NrICovXG4gXHRwb3NzaWJsZV9uZXRfdFx0XHRcdG5ldDtcbitcdHN0cnVjdCBub3RpZmllcl9ibG9ja1x0XHRmaWJfbmI7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdFx0ZmliX3dvcms7XG4rXHRzdHJ1Y3QgbGxpc3RfaGVhZFx0XHRmaWJfZXZlbnRzO1xuIH07XG4gXG4gc3RhdGljIGlubGluZSBib29sIG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuaW5kZXggOTljNWI5ZDY3MWEwY2EuLjJjOTEyMDU2OTIxYWUwIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY1xuQEAgLTUsOCArNSwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGZpbHRlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmhhc2h0YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9sbGlzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvZmliX25vdGlmaWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXBfZmliLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2ZpYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuQEAgLTY5NSwxMSArNjk5LDE3OSBAQCB2b2lkIG5mX2Zsb3dfZG5hdF9wb3J0KGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWQgKmZsb3csIHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfZG5hdF9wb3J0KTtcbiBcbitzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2gge1xuK1x0c3RydWN0IGxsaXN0X25vZGVcdCpldmVudHM7XG4rfTtcbitcbitzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQge1xuK1x0c3RydWN0IGxsaXN0X25vZGVcdG5vZGU7XG4rXHR1OFx0XHRcdGZhbWlseTtcbitcdHU4XHRcdFx0cHJlZml4X2xlbjtcbitcdHVuaW9uIHtcbitcdFx0X19iZTMyXHRcdGlwNDtcbitcdFx0c3RydWN0IGluNl9hZGRyXHRpcDY7XG4rXHR9IGFkZHI7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1cGxlICp0dXBsZSxcbitcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2KVxuK3tcbitcdGlmICh0dXBsZS1cdTAwM2VsM3Byb3RvICE9IGV2LVx1MDAzZWZhbWlseSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0c3dpdGNoIChldi1cdTAwM2VmYW1pbHkpIHtcbitcdGNhc2UgTkZQUk9UT19JUFY0OiB7XG4rXHRcdF9fYmUzMiBtYXNrID0gZXYtXHUwMDNlcHJlZml4X2xlbiA/XG4rXHRcdFx0aHRvbmwofjB1IFx1MDAzY1x1MDAzYyAoMzIgLSBldi1cdTAwM2VwcmVmaXhfbGVuKSkgOiAwO1xuK1x0XHRyZXR1cm4gKHR1cGxlLVx1MDAzZWRzdF92NC5zX2FkZHIgXHUwMDI2IG1hc2spID09IChldi1cdTAwM2VhZGRyLmlwNCBcdTAwMjYgbWFzayk7XG4rXHR9XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4rXHRjYXNlIE5GUFJPVE9fSVBWNjpcbitcdFx0cmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKFx1MDAyNnR1cGxlLVx1MDAzZWRzdF92NiwgXHUwMDI2ZXYtXHUwMDNlYWRkci5pcDYsXG4rXHRcdFx0XHRcdCBldi1cdTAwM2VwcmVmaXhfbGVuKTtcbisjZW5kaWZcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGJvb2wgbmZfZmxvd19maWJfZmxvd19tYXRjaChjb25zdCBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfZmliX21hdGNoICptKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBmbG93X29mZmxvYWRfdHVwbGUgKm9yaWcsICpyZXBseTtcbitcdGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9ldmVudCAqZXY7XG4rXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZTtcbitcbitcdG9yaWcgID0gXHUwMDI2Zmxvdy1cdTAwM2V0dXBsZWhhc2hbRkxPV19PRkZMT0FEX0RJUl9PUklHSU5BTF0udHVwbGU7XG4rXHRyZXBseSA9IFx1MDAyNmZsb3ctXHUwMDNldHVwbGVoYXNoW0ZMT1dfT0ZGTE9BRF9ESVJfUkVQTFldLnR1cGxlO1xuK1xuK1x0Zm9yIChub2RlID0gbS1cdTAwM2VldmVudHM7IG5vZGU7IG5vZGUgPSBub2RlLVx1MDAzZW5leHQpIHtcbitcdFx0ZXYgPSBsbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQsIG5vZGUpO1xuK1x0XHRpZiAobmZfZmxvd19maWJfdHVwbGVfbWF0Y2gob3JpZywgZXYpIHx8XG4rXHRcdCAgICBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaChyZXBseSwgZXYpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgdm9pZCBuZl9mbG93X29mZmxvYWRfZmliX2NiKHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgZmxvd19vZmZsb2FkICpmbG93LCB2b2lkICpkYXRhKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBuZl9mbG93X2ZpYl9tYXRjaCAqbSA9IGRhdGE7XG4rXG4rXHRpZiAodGVzdF9iaXQoTkZfRkxPV19URUFSRE9XTiwgXHUwMDI2Zmxvdy1cdTAwM2VmbGFncykpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChuZl9mbG93X2ZpYl9mbG93X21hdGNoKGZsb3csIG0pKVxuK1x0XHRmbG93X29mZmxvYWRfdGVhcmRvd24oZmxvdyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5mX2Zsb3dfdGFibGVfZmliX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3dfdGFibGUgPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG5mX2Zsb3d0YWJsZSwgZmliX3dvcmspO1xuK1x0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldiwgKm5leHQ7XG4rXHRzdHJ1Y3QgbmZfZmxvd19maWJfbWF0Y2ggbSA9IHt9O1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKmV2ZW50cztcbitcbitcdGV2ZW50cyA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbitcdGlmICghZXZlbnRzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtLmV2ZW50cyA9IGV2ZW50cztcbitcdG5mX2Zsb3dfdGFibGVfaXRlcmF0ZShmbG93X3RhYmxlLCBuZl9mbG93X29mZmxvYWRfZmliX2NiLCBcdTAwMjZtKTtcbitcbitcdGxsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXYsIG5leHQsIGV2ZW50cywgbm9kZSlcbitcdFx0a2ZyZWUoZXYpO1xuK31cbitcbitzdGF0aWMgYm9vbCBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaChjb25zdCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUsXG4rXHRcdFx0XHRcdCAgdTggZXZlbnRfZmFtaWx5KVxuK3tcbitcdHN3aXRjaCAoZmxvd3RhYmxlLVx1MDAzZXR5cGUtXHUwMDNlZmFtaWx5KSB7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNDpcbitcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQ7XG4rXHRjYXNlIE5GUFJPVE9fSVBWNjpcbitcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4rXHRjYXNlIE5GUFJPVE9fSU5FVDpcbitcdFx0cmV0dXJuIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjQgfHxcbitcdFx0ICAgICAgIGV2ZW50X2ZhbWlseSA9PSBORlBST1RPX0lQVjY7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rfVxuK1xuKy8qIENhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2soKSAqL1xuK3N0YXRpYyBpbnQgbmZfZmxvd190YWJsZV9maWJfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cilcbit7XG4rXHRzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlID1cbitcdFx0Y29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlLCBmaWJfbmIpO1xuK1x0c3RydWN0IGZpYl9ub3RpZmllcl9pbmZvICppbmZvID0gcHRyO1xuK1x0c3RydWN0IG5mX2Zsb3dfZmliX2V2ZW50ICpldjtcbitcbitcdHN3aXRjaCAoZXZlbnQpIHtcbitcdGNhc2UgRklCX0VWRU5UX0VOVFJZX1JFUExBQ0U6XG4rXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9BUFBFTkQ6XG4rXHRjYXNlIEZJQl9FVkVOVF9FTlRSWV9ERUw6XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1x0fVxuK1xuK1x0LyogU2tpcCBldmVudHMgZm9yIGFuIGFkZHJlc3MgZmFtaWx5IHRoaXMgdGFibGUgY2Fubm90IGhvbGQuICovXG4rXHRpZiAoIW5mX2Zsb3d0YWJsZV9maWJfZmFtaWx5X21hdGNoKGZsb3dfdGFibGUsIGluZm8tXHUwMDNlZmFtaWx5KSlcbitcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuK1xuK1x0ZXYgPSBremFsbG9jKHNpemVvZigqZXYpLCBHRlBfQVRPTUlDKTtcbitcdGlmICghZXYpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcbitcdHN3aXRjaCAoaW5mby1cdTAwM2VmYW1pbHkpIHtcbitcdGNhc2UgTkZQUk9UT19JUFY0OlxuK1x0XHRzdHJ1Y3QgZmliX2VudHJ5X25vdGlmaWVyX2luZm8gKmZlbjtcbitcbitcdFx0ZmVuID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWJfZW50cnlfbm90aWZpZXJfaW5mbywgaW5mbyk7XG4rXHRcdGV2LVx1MDAzZWZhbWlseSAgICAgPSBORlBST1RPX0lQVjQ7XG4rXHRcdGV2LVx1MDAzZWFkZHIuaXA0ICAgPSBodG9ubChmZW4tXHUwMDNlZHN0KTtcbitcdFx0ZXYtXHUwMDNlcHJlZml4X2xlbiA9IGZlbi1cdTAwM2Vkc3RfbGVuO1xuK1x0XHRicmVhaztcbitcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbitcdGNhc2UgTkZQUk9UT19JUFY2OlxuK1x0XHRzdHJ1Y3QgZmliNl9lbnRyeV9ub3RpZmllcl9pbmZvICpmZW42O1xuK1xuK1x0XHRmZW42ID0gY29udGFpbmVyX29mKGluZm8sIHN0cnVjdCBmaWI2X2VudHJ5X25vdGlmaWVyX2luZm8sIGluZm8pO1xuK1x0XHRpZiAoIWZlbjYtXHUwMDNlcnQpXG4rXHRcdFx0Z290byBlcnI7XG4rXG4rXHRcdGV2LVx1MDAzZWZhbWlseSAgICAgPSBORlBST1RPX0lQVjY7XG4rXHRcdGV2LVx1MDAzZWFkZHIuaXA2ICAgPSBmZW42LVx1MDAzZXJ0LVx1MDAzZWZpYjZfZHN0LmFkZHI7XG4rXHRcdGV2LVx1MDAzZXByZWZpeF9sZW4gPSBmZW42LVx1MDAzZXJ0LVx1MDAzZWZpYjZfZHN0LnBsZW47XG4rXHRcdGJyZWFrO1xuKyNlbmRpZlxuK1x0ZGVmYXVsdDpcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4rXHRsbGlzdF9hZGQoXHUwMDI2ZXYtXHUwMDNlbm9kZSwgXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbitcdHF1ZXVlX3dvcmsoc3lzdGVtX3Bvd2VyX2VmZmljaWVudF93cSwgXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfd29yayk7XG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXG4rZXJyOlxuK1x0a2ZyZWUoZXYpO1xuK1x0cmV0dXJuIE5PVElGWV9ET05FO1xuK31cbitcbiBpbnQgbmZfZmxvd190YWJsZV9pbml0KHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbiB7XG4rXHRzdHJ1Y3QgbmV0ICpuZXQgPSByZWFkX3BuZXQoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZW5ldCk7XG4gXHRpbnQgZXJyO1xuIFxuIFx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIG5mX2Zsb3dfb2ZmbG9hZF93b3JrX2djKTtcbitcdElOSVRfV09SSyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX3dvcmssIG5mX2Zsb3dfdGFibGVfZmliX3dvcmspO1xuK1x0aW5pdF9sbGlzdF9oZWFkKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmaWJfZXZlbnRzKTtcbiBcdGZsb3dfYmxvY2tfaW5pdChcdTAwMjZmbG93dGFibGUtXHUwMDNlZmxvd19ibG9jayk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmZsb3d0YWJsZS1cdTAwM2VmbG93X2Jsb2NrX2xvY2spO1xuIFxuQEAgLTcxMSwxMSArODgzLDI0IEBAIGludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxuIFx0cXVldWVfZGVsYXllZF93b3JrKHN5c3RlbV9wb3dlcl9lZmZpY2llbnRfd3EsXG4gXHRcdFx0ICAgXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZWdjX3dvcmssIEhaKTtcbiBcbitcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpKSB7XG4rXHRcdGZsb3d0YWJsZS1cdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50O1xuK1x0XHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIobmV0LCBcdTAwMjZmbG93dGFibGUtXHUwMDNlZmliX25iLFxuK1x0XHRcdFx0XHQgICAgTlVMTCwgTlVMTCk7XG4rXHRcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfZmliO1xuK1x0fVxuK1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4gXHRsaXN0X2FkZChcdTAwMjZmbG93dGFibGUtXHUwMDNlbGlzdCwgXHUwMDI2Zmxvd3RhYmxlcyk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZpYjpcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZmbG93dGFibGUtXHUwMDNlZ2Nfd29yayk7XG4rXHRyaGFzaHRhYmxlX2Rlc3Ryb3koXHUwMDI2Zmxvd3RhYmxlLVx1MDAzZXJoYXNodGFibGUpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwobmZfZmxvd190YWJsZV9pbml0KTtcbiBcbkBAIC03NTQsOCArOTM5LDI1IEBAIHZvaWQgbmZfZmxvd190YWJsZV9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Zsb3dfdGFibGVfY2xlYW51cCk7XG4gXG4rc3RhdGljIHZvaWQgbmZfZmxvd190YWJsZV9maWJfZHJhaW4oc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbit7XG4rXHRzdHJ1Y3QgbmZfZmxvd19maWJfZXZlbnQgKmV2LCAqbmV4dDtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpldmVudHM7XG4rXG4rXHRldmVudHMgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZmliX2V2ZW50cyk7XG4rXHRsbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2LCBuZXh0LCBldmVudHMsIG5vZGUpXG4rXHRcdGtmcmVlKGV2KTtcbit9XG4rXG4gdm9pZCBuZl9mbG93X3RhYmxlX2ZyZWUoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd190YWJsZSlcbiB7XG4rXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoZmxvd190YWJsZSkpIHtcbitcdFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIocmVhZF9wbmV0KFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlbmV0KSxcbitcdFx0XHRcdFx0XHUwMDI2Zmxvd190YWJsZS1cdTAwM2VmaWJfbmIpO1xuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNmZsb3dfdGFibGUtXHUwMDNlZmliX3dvcmspO1xuK1x0XHRuZl9mbG93X3RhYmxlX2ZpYl9kcmFpbihmbG93X3RhYmxlKTtcbitcdH1cbitcbiBcdG11dGV4X2xvY2soXHUwMDI2Zmxvd3RhYmxlX2xvY2spO1xuIFx0bGlzdF9kZWwoXHUwMDI2Zmxvd190YWJsZS1cdTAwM2VsaXN0KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZmbG93dGFibGVfbG9jayk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowODo0NS41MTgxMDE3NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU2MzYyNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmZfZmxvd190YWJsZV9jb3JlLmNgIGFuZCBgbmZfZmxvd190YWJsZS5oYC4gU2VlbXMgdGhleSdyZSBhZGRpbmcgRklCIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMsIHNwZWNpZmljYWxseSBmb3Igd2hlbiBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWQuIFRoYXQncyBpbnRlcmVzdGluZywgYSBnb29kIGZ1bmN0aW9uYWwgYWRkaXRpb24sIGFuZCB0aGUgYXJjaGl0ZWN0dXJlIG9mIGl0IGlzIGV4YWN0bHkgd2hhdCBJJ2QgZXhwZWN0LiBBIG5vdGlmaWVyIChgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgKSBsaXN0ZW5pbmcgZm9yIEZJQiBldmVudHMg4oCTIHJvdXRlIGNoYW5nZXMsIGJhc2ljYWxseSDigJMgYW5kIGEgd29yayBxdWV1ZSBpdGVtIChgbmZfZmxvd190YWJsZV9maWJfd29ya2ApIHRvIGhhbmRsZSB0aGUgY2xlYW51cC4gVGhlIHdvcmsgaXRlbSBpdGVyYXRlcyB0aGUgZmxvdyB0YWJsZSBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBwcm9ibGVtYXRpYyBwcmVmaXguIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyBob3cgdGhpcyBwbGF5cyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgY2hhbmdlICppcyogY29yZSBuZXRmaWx0ZXIsIHNvIGl0J3MgcHJvYmFibHkgcmVhY2hhYmxlIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSdzIHBoeXNpY2FsIGhhcmR3YXJlLiBSb3V0aW5nIHRhYmxlIGNoYW5nZXMgKEZJQiBldmVudHMpIGFyZSBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGNhbiBiZSBzaW11bGF0ZWQgb3IgdHJpZ2dlcmVkIGluIFZNcyBieSBhZGRpbmcgb3IgcmVtb3Zpbmcgcm91dGVzLiBBbmQsIG9mIGNvdXJzZSwgTmV0ZmlsdGVyIGZsb3cgdGFibGVzIGNhbiBiZSBjcmVhdGVkIGFuZCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBmbGFnIHNldCwgKmV2ZW4gaWYqIHRoZSBhY3R1YWwgb2ZmbG9hZCBpc24ndCBwcmVzZW50LlxuXG5XYWl0LCBsb29raW5nIGF0IHRoZSBjb2RlLCBpdCBzZWVtcyB0aGF0IGBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZGAgY2hlY2tzIGlmIHRoZSBmbG93dGFibGUgaGFzIHRoZSBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgIGZsYWcgc2V0LiBUaGF0J3MgZ29vZCwgYnV0IGhvdyBleGFjdGx5IGNhbiB0aGF0IGZsYWcgYmUgc2V0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEkgbmVlZCB0byBjaGVjayBob3cgYE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEYCBpcyB1c2VkIGFuZCBpZiBpdCdzIHBvc3NpYmxlIHRvIHNldCB0aGF0IGZsYWcgZXZlbiBpZiBhY3R1YWwgaGFyZHdhcmUgaXMgbm90IHByZXNlbnQuIFRpbWUgdG8gZmlyZSB1cCBgZ3JlcHBlcmAgYW5kIHNlYXJjaCBmb3IgdGhhdCBtYWNybywgc2VlIHdoZXJlIGl0J3MgZGVmaW5lZCBhbmQgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY0NywiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA4OjUxLjY3NDQ2Njk1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODQ5Mjc0ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NzE9ZW51bSBuZl9mbG93dGFibGVfZmxhZ3Mge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NzI6XFx0TkZfRkxPV1RBQkxFX0hXX09GRkxPQURcXHRcXHQ9IDB4MSxcXHQvKiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQgKi9cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTczLVxcdE5GX0ZMT1dUQUJMRV9DT1VOVEVSXFx0XFx0PSAweDIsXFx0LyogTkZUX0ZMT1dUQUJMRV9DT1VOVEVSICovXFxuLS1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTkyPXN0YXRpYyBpbmxpbmUgYm9vbCBuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC05My17XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDo5NDpcXHRyZXR1cm4gZmxvd3RhYmxlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GX0ZMT1dUQUJMRV9IV19PRkZMT0FEO1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtOTUtfVxcbi0tXFxubmV0L3NjaGVkL2FjdF9jdC5jPTMyND1zdGF0aWMgaW50IHRjZl9jdF9mbG93X3RhYmxlX2dldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfY3RfcGFyYW1zICpwYXJhbXMpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2N0LmMtMzQ5LVxcdGN0X2Z0LVxcdTAwM2VuZl9mdC50eXBlID0gXFx1MDAyNmZsb3d0YWJsZV9jdDtcXG5uZXQvc2NoZWQvYWN0X2N0LmM6MzUwOlxcdGN0X2Z0LVxcdTAwM2VuZl9mdC5mbGFncyB8PSBORl9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XFxubmV0L3NjaGVkL2FjdF9jdC5jLTM1MS1cXHRcXHRcXHQgICAgICBORl9GTE9XVEFCTEVfQ09VTlRFUjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDg6NTUuNTIzNzUwNTM4WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM0MzE4NzA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEhhcmR3YXJlIE9mZmxvYWQgZm9yIENvbm5lY3Rpb24gVHJhY2tpbmcqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIG9mZmxvYWQgaXMgaGFuZGxlZCB3aXRoaW4gdGhlIGtlcm5lbCwgYW5kIGl0IHNlZW1zIHRoZSBhY3Rpb24ncyBjb3JlIGxvZ2ljIGlzIHNpdHVhdGVkIHdpdGhpbiBgbmV0L3NjaGVkL2FjdF9jdC5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgaW1wb3J0YW50IGZsYWcgaGVyZSBpcyBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgLiBJdCdzIHByZXR0eSBzdGFuZGFyZCwgYnV0IEkgd2FudCB0byBzZWUgaG93IHRoZSBjb25uZWN0aW9uIGlzIHNldC5cblxuVGhlIGNvZGUncyBjb25uZWN0aW9uIHRvIHRoZSBgbmZ0YWJsZXNgIGZyYW1ld29yayBpcyB0aGUgbmV4dCBwbGFjZSB0byBsb29rIGF0LiBTZWVtcyBsaWtlIHRoZSBrZXkgaXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBgTkZfRkxPV1RBQkxFX0hXX09GRkxPQURgIGFuZCBgTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEYC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRpb24gdGhhdCB0aGUgaGFyZHdhcmUgb2ZmbG9hZCBjb25maWd1cmF0aW9uIGlzIGxpa2VseSBtYW5hZ2VkIHZpYSBuZXRsaW5rIHdpdGhpbiB0aGUgbmZ0YWJsZXMgaW50ZXJmYWNlLiBUaGF0IG1lYW5zIGl0IGlzIHRoZSBwbGFjZSB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgdGhlIGZyYW1ld29yayBpcyBpbiBzeW5jLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzM2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDk6MDQuODY2OTQyODU2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTMwNDg3NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9NzE9ZW51bSBuZl9mbG93dGFibGVfZmxhZ3Mge1xcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg6NzI6XFx0TkZfRkxPV1RBQkxFX0hXX09GRkxPQURcXHRcXHQ9IDB4MSxcXHQvKiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQgKi9cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTczLVxcdE5GX0ZMT1dUQUJMRV9DT1VOVEVSXFx0XFx0PSAweDIsXFx0LyogTkZUX0ZMT1dUQUJMRV9DT1VOVEVSICovXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTE2ODc9ZW51bSBuZnRfb2JqZWN0X2F0dHJpYnV0ZXMge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC0xNzAzLSAqXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDoxNzA0OiAqIEBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQ6IGZsb3d0YWJsZSBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWRcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDUtICogQE5GVF9GTE9XVEFCTEVfQ09VTlRFUjogZW5hYmxlIGZsb3cgY291bnRlcnNcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg9MTcwNz1lbnVtIG5mdF9mbG93dGFibGVfZmxhZ3Mge1xcbmluY2x1ZGUvdWFwaS9saW51eC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6MTcwODpcXHRORlRfRkxPV1RBQkxFX0hXX09GRkxPQURcXHQ9IDB4MSxcXG5pbmNsdWRlL3VhcGkvbGludXgvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTE3MDktXFx0TkZUX0ZMT1dUQUJMRV9DT1VOVEVSXFx0XFx0PSAweDIsXFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaDoxNzEwOlxcdE5GVF9GTE9XVEFCTEVfTUFTS1xcdFxcdD0gKE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCB8XFxuaW5jbHVkZS91YXBpL2xpbnV4L25ldGZpbHRlci9uZl90YWJsZXMuaC0xNzExLVxcdFxcdFxcdFxcdFxcdCAgIE5GVF9GTE9XVEFCTEVfQ09VTlRFUilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTkwOTY9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTkxNDEtXFx0XFx0fVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNDI6XFx0XFx0aWYgKChmbG93dGFibGUtXFx1MDAzZWRhdGEuZmxhZ3MgXFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpIF5cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTQzOlxcdFxcdCAgICAoZmxhZ3MgXFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE0NC1cXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MDk6MDcuNjE5OTk2ODQ4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE0OTkwNzIyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIEZsb3d0YWJsZSBJbml0aWFsaXphdGlvbiBhbmQgRklCIE5vdGlmaWVyIFJlZ2lzdHJhdGlvbioqXG5cbk9rYXksIHNvIGZyb20gd2hhdCBJJ20gc2VlaW5nLCBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBjYW4gZXN0YWJsaXNoIGEgZmxvd3RhYmxlLCBlaXRoZXIgZGlyZWN0bHkgd2l0aCB0aGUgYE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAgZmxhZywgb3IgaW5kaXJlY3RseSB2aWEgYHRjIGFjdGlvbiBjdGAuICBUaGUgY3JpdGljYWwgcG9pbnQgaXMgdGhhdCB3aGVuIHRoaXMgZmxvd3RhYmxlIGlzIGluaXRpYWxpemVkLCBgbmZfZmxvd190YWJsZV9pbml0YCBpcyBpbnZva2VkLiAgVGhlIGltcG9ydGFudCB0aGluZyBoZXJlIGlzIHRoYXQgaWYgYG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKClgIHJldHVybnMgdHJ1ZSwgYSBGSUIgbm90aWZpZXIgZ2V0cyByZWdpc3RlcmVkLlxuXG5Fc3NlbnRpYWxseSwgd2hlbmV2ZXIgdGhlIHJvdXRpbmcgdGFibGUgKEZJQikgaXMgbW9kaWZpZWQsIHRoZSBgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiB0aGVuIHF1ZXVlcyBhIHdvcmsgaXRlbSwgYGZpYl93b3JrYCwgd2hpY2ggaXMgdWx0aW1hdGVseSBwcm9jZXNzZWQgYnkgYG5mX2Zsb3dfdGFibGVfZmliX3dvcmtgLiAgVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBtZWNoYW5pc20gZm9yIGtlZXBpbmcgdGhlIGZsb3d0YWJsZSBzeW5jaHJvbml6ZWQgd2l0aCByb3V0aW5nIGNoYW5nZXMuXG5cblRoaXMgd2hvbGUgcHJvY2VzcyBhcHBlYXJzIGVtaW5lbnRseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlLCBldmVuIHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmcsIHdoaWNoIGlzIGdvb2QuIFdlIGNhbiBkZWZpbml0ZWx5IHNpbXVsYXRlIHZhcmlvdXMgcm91dGluZyBldmVudHMgYW5kIG1vbml0b3IgdGhlIGZsb3d0YWJsZSdzIHJlYWN0aW9ucy5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBuZWNlc3Nhcnkga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jYCB0byBzZWUgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIGZvciB0aGlzIGVudGlyZSBwcm9jZXNzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToxMi43Njk5MDYzNzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTc3NjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX2NvcmVcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xNDI9b2JqLSQoQ09ORklHX05GX0ZMT1dfVEFCTEUpXFx0Kz0gbmZfZmxvd190YWJsZS5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDM6bmZfZmxvd190YWJsZS1vYmpzXFx0XFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NC1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX3BhdGgubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA5OjE1LjkwMTY5MDgwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NDgzNTYxNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOlxuXG4qKkNoZWNraW5nIHRoZSBGbG93IFRhYmxlIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSBjb2RlIEknbSBsb29raW5nIGF0ICpkZWZpbml0ZWx5KiByZWxpZXMgb24gYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0J3MgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZzsgYSBtaXNzaW5nIGZsb3cgdGFibGUgd291bGQgb2J2aW91c2x5IGJyZWFrIGZ1bmN0aW9uYWxpdHkuIFRoZW4sIGl0J3MgbGV2ZXJhZ2luZyBgQ09ORklHX0lQVjZgIGZvciBJUHY2IHN1cHBvcnQsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEdpdmVuIHRoaXMgZGVwZW5kZW5jeSBvbiB0aGUgZmxvdyB0YWJsZSBhbmQgSVB2NiwgSSBzaG91bGQgcHJvYmFibHkgdGFrZSBhIGxvb2sgYXQgdGhlIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGZpbGUuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIHRvIGNoZWNrIHRoZXJlIGZvciB0aGUgYE5GX0ZMT1dfVEFCTEVgIG9wdGlvbiB0byB2ZXJpZnkgaXRzIGRldGFpbHMgYW5kIGFueSBkZXBlbmRlbmNpZXMgaXQgbWlnaHQgaGF2ZS4gVW5kZXJzdGFuZGluZyB0aGF0IGNvbmZpZyBvcHRpb24gYmV0dGVyIHdpbGwgZ3VpZGUgaG93IEkgcHJvY2VlZCBmcm9tIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToxOS41NTAwNTA0NzZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Mjk2MjcxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToyMi4xNzk2ODU3MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5MjExMDgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkV4YW1pbmluZyB0aGUgQ29yZSBOZXR3b3JrIEZsb3cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXI6IGBORl9GTE9XX1RBQkxFYCBpcyB0aGUgcHJpbWFyeSBmb2N1cy4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIG5ldHdvcmsgZmxvdyBlbnRyaWVzLCBsaWtlbHkgZm9yIHNvbWV0aGluZyBsaWtlIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGZsb3ctYmFzZWQgcm91dGluZywgb3IgcGVyaGFwcyBldmVuIGEgbW9yZSBzb3BoaXN0aWNhdGVkIHVzZXItc3BhY2UgbmV0d29yayBhY2NlbGVyYXRpb24gbWVjaGFuaXNtLlxuXG5BbmQgdGhlbiBJIHNlZSB0aGUgbWVudGlvbiBvZiBgcmVnaXN0ZXJfZmliX25vdGlmaWVyYC4gUmlnaHQsIHRoYXQgZnVuY3Rpb24ncyBpbiBgbmV0L2NvcmUvZmliX25vdGlmaWVyLmNgLiBUaGF0J3MgYSBzdHJvbmcgaGludC4gYGZpYmAgbWVhbnMgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlLCB3aGljaCBkZWFscyB3aXRoIHJvdXRpbmcgdGFibGVzLiBgTm90aWZpZXJgIGluZGljYXRlcyBhbiBldmVudC1kcml2ZW4gbWVjaGFuaXNtLiBUaHVzLCB0aGUgY29kZSBpcyBsaWtlbHkgcmVnaXN0ZXJpbmcgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIHRvIHRoZSByb3V0aW5nIHRhYmxlLiBUaGlzIGltcGxpZXMgdGhhdCB0aGUgbmV0d29yayBmbG93IHRhYmxlJ3MgYmVoYXZpb3Igb3IgZW50cmllcyBhcmUgbGlrZWx5ICpkZXBlbmRlbnQqIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGluZyB0YWJsZS4gQ2hhbmdlcyB0byByb3V0ZXMgKGFkZGVkLCByZW1vdmVkLCBtb2RpZmllZCkgbGlrZWx5IHRyaWdnZXIgc29tZSBhY3Rpb24gcmVsYXRlZCB0byB0aGUgZmxvdyB0YWJsZS4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBub3RpZmllciBjYWxsYmFjayB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBmbG93IHRhYmxlIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIHJvdXRpbmcgaW5mb3JtYXRpb24uIFRoaXMgbWlnaHQgaW52b2x2ZSB0aGluZ3MgbGlrZSBpbnZhbGlkYXRpbmcgY2FjaGVkIGZsb3cgZW50cmllcywgdXBkYXRpbmcgcm91dGVzIHdpdGhpbiB0aGUgZmxvdyB0YWJsZSBpdHNlbGYsIG9yIHBlcmhhcHMgZXZlbiBhbHRlcmluZyBob3cgcGFja2V0cyBhcmUgbWF0Y2hlZCB0byBmbG93IGVudHJpZXMgYmFzZWQgb24gcm91dGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY3NywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA5OjI2LjE3MTc5OTM0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0Mzk2MDYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9maWJfbm90aWZpZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N3aXRjaGRldi5yc3Q9MzQ5PVRvIHByb2dyYW0gdGhlIGRldmljZSwgdGhlIGRyaXZlciBoYXMgdG8gcmVnaXN0ZXIgYSBGSUIgbm90aWZpZXIgaGFuZGxlclxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9zd2l0Y2hkZXYucnN0OjM1MDp1c2luZyByZWdpc3Rlcl9maWJfbm90aWZpZXIuIFRoZSBmb2xsb3dpbmcgZXZlbnRzIGFyZSBhdmFpbGFibGU6XFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3N3aXRjaGRldi5yc3QtMzUxLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYz0xNTQ4PWludCBwcmVzdGVyYV9yb3V0ZXJfaW5pdChzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYwMC1cXHRyb3V0ZXItXFx1MDAzZWZpYl9uYi5ub3RpZmllcl9jYWxsID0gX19wcmVzdGVyYV9yb3V0ZXJfZmliX2V2ZW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmM6MTYwMTpcXHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2cm91dGVyLVxcdTAwM2VmaWJfbmIsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9wcmVzdGVyYS9wcmVzdGVyYV9yb3V0ZXIuYy0xNjAyLVxcdFxcdFxcdFxcdCAgICAvKiBUT0RPOiBmbHVzaCBmaWIgZW50cmllcyAqLyBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDMtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jOjE2MDQ6XFx0XFx0Z290byBlcnJfcmVnaXN0ZXJfZmliX25vdGlmaWVyO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYwNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jOjE2MDg6ZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MDktXFx0dW5yZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcihcXHUwMDI2cm91dGVyLVxcdTAwM2VuZXRldmVudF9uYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jPTE2Mjk9dm9pZCBwcmVzdGVyYV9yb3V0ZXJfZmluaShzdHJ1Y3QgcHJlc3RlcmFfc3dpdGNoICpzdylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL3ByZXN0ZXJhL3ByZXN0ZXJhX3JvdXRlci5jLTE2MzAte1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmM6MTYzMTpcXHR1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihcXHUwMDI2aW5pdF9uZXQsIFxcdTAwMjZzdy1cXHUwMDNlcm91dGVyLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvcHJlc3RlcmEvcHJlc3RlcmFfcm91dGVyLmMtMTYzMi1cXHR1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKFxcdTAwMjZzdy1cXHUwMDNlcm91dGVyLVxcdTAwM2VuZXRldmVudF9uYik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM9MTg2MD1zdHJ1Y3QgbWx4NWVfdGNfdHVuX2VuY2FwICptbHg1ZV90Y190dW5faW5pdChzdHJ1Y3QgbWx4NWVfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy0xODcyLVxcdGhhc2hfaW5pdChlbmNhcC1cXHUwMDNlcm91dGVfdGJsKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM6MTg3MzpcXHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2X25ldChwcml2LVxcdTAwM2VuZXRkZXYpLCBcXHUwMDI2ZW5jYXAtXFx1MDAzZWZpYl9uYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmMtMTg3NC1cXHRcXHRcXHRcXHQgICAgTlVMTCwgTlVMTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2VuY2FwLmM9MTg4Mz12b2lkIG1seDVlX3RjX3R1bl9jbGVhbnVwKHN0cnVjdCBtbHg1ZV90Y190dW5fZW5jYXAgKmVuY2FwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jLTE4ODctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9lbmNhcC5jOjE4ODg6XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2X25ldChlbmNhcC1cXHUwMDNlcHJpdi1cXHUwMDNlbmV0ZGV2KSwgXFx1MDAyNmVuY2FwLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZW5jYXAuYy0xODg5LVxcdGZsdXNoX3dvcmtxdWV1ZShlbmNhcC1cXHUwMDNlcHJpdi1cXHUwMDNld3EpOyAvKiBmbHVzaCBmaWIgZXZlbnQgd29ya3MgKi9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jPTU0MzQ9aW50IG1seDVlX3RjX2Vzd19pbml0KHN0cnVjdCBtbHg1X3JlcF91cGxpbmtfcHJpdiAqdXBsaW5rX3ByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NDg4LVxcdFxcdGVyciA9IFBUUl9FUlIodXBsaW5rX3ByaXYtXFx1MDAzZWVuY2FwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NDg5OlxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyX2ZpYl9ub3RpZmllcjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYy01NDkwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jLTU1MDEtXFx0bWx4NWVfdGNfdHVuX2NsZWFudXAodXBsaW5rX3ByaXYtXFx1MDAzZWVuY2FwKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo1NTAyOmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMtNTUwMy1cXHRtYXBwaW5nX2Rlc3Ryb3kodXBsaW5rX3ByaXYtXFx1MDAzZXR1bm5lbF9lbmNfb3B0c19tYXBwaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYz0zNzI9aW50IG1seDVfbGFnX21wX2luaXQoc3RydWN0IG1seDVfbGFnICpsZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jLTM4OS1cXHRtcC1cXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBtbHg1X2xhZ19maWJfZXZlbnQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jOjM5MDpcXHRlcnIgPSByZWdpc3Rlcl9maWJfbm90aWZpZXIoXFx1MDAyNmluaXRfbmV0LCBcXHUwMDI2bXAtXFx1MDAzZWZpYl9uYixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL21wLmMtMzkxLVxcdFxcdFxcdFxcdCAgICBtbHg1X2xhZ19maWJfZXZlbnRfZmx1c2gsIE5VTEwpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jPTQwMD12b2lkIG1seDVfbGFnX21wX2NsZWFudXAoc3RydWN0IG1seDVfbGFnICpsZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2xhZy9tcC5jLTQwNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbGFnL21wLmM6NDA3OlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNm1wLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9sYWcvbXAuYy00MDgtXFx0ZGVzdHJveV93b3JrcXVldWUobXAtXFx1MDAzZXdxKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jPTExNTc2PWludCBtbHhzd19zcF9yb3V0ZXJfaW5pdChzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE2OTYtXFx0bWx4c3dfc3AtXFx1MDAzZXJvdXRlci1cXHUwMDNlZmliX25iLm5vdGlmaWVyX2NhbGwgPSBtbHhzd19zcF9yb3V0ZXJfZmliX2V2ZW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jOjExNjk3OlxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihtbHhzd19zcF9uZXQobWx4c3dfc3ApLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNjk4LVxcdFxcdFxcdFxcdCAgICBcXHUwMDI2bWx4c3dfc3AtXFx1MDAzZXJvdXRlci1cXHUwMDNlZmliX25iLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3MDAtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMTcwMTpcXHRcXHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3MDItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMTcwNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYzoxMTcwNTplcnJfcmVnaXN0ZXJfZmliX25vdGlmaWVyOlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L3NwZWN0cnVtX3JvdXRlci5jLTExNzA2LVxcdHVucmVnaXN0ZXJfbmV4dGhvcF9ub3RpZmllcihtbHhzd19zcF9uZXQobWx4c3dfc3ApLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM9MTE3NTU9dm9pZCBtbHhzd19zcF9yb3V0ZXJfZmluaShzdHJ1Y3QgbWx4c3dfc3AgKm1seHN3X3NwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmMtMTE3NTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvc3BlY3RydW1fcm91dGVyLmM6MTE3NTk6XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIobWx4c3dfc3BfbmV0KG1seHN3X3NwKSwgXFx1MDAyNnJvdXRlci1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9zcGVjdHJ1bV9yb3V0ZXIuYy0xMTc2MC1cXHR1bnJlZ2lzdGVyX25leHRob3Bfbm90aWZpZXIobWx4c3dfc3BfbmV0KG1seHN3X3NwKSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jPTI4NDQ9c3RhdGljIGludCByb2NrZXJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NDItXFx0cm9ja2VyLVxcdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IHJvY2tlcl9yb3V0ZXJfZmliX2V2ZW50O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jOjI5NDM6XFx0ZXJyID0gcmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNnJvY2tlci1cXHUwMDNlZmliX25iLCBOVUxMLCBOVUxMKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0yOTQ0LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmM6Mjk0NTpcXHRcXHRnb3RvIGVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMjk0Ni1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXJfbWFpbi5jLTI5NjktZXJyX3JlZ2lzdGVyX3N3aXRjaGRldl9ub3RpZmllcjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTcwOlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNnJvY2tlci1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzoyOTcxOmVycl9yZWdpc3Rlcl9maWJfbm90aWZpZXI6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlcl9tYWluLmMtMjk3Mi1cXHRyb2NrZXJfcmVtb3ZlX3BvcnRzKHJvY2tlcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYz0yOTk3PXN0YXRpYyB2b2lkIHJvY2tlcl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0zMDA1LVxcdHVucmVnaXN0ZXJfc3dpdGNoZGV2X25vdGlmaWVyKFxcdTAwMjZyb2NrZXJfc3dpdGNoZGV2X25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYzozMDA2OlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKFxcdTAwMjZpbml0X25ldCwgXFx1MDAyNnJvY2tlci1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyX21haW4uYy0zMDA3LVxcdHJvY2tlcl9yZW1vdmVfcG9ydHMocm9ja2VyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYz0xNTUyPXN0cnVjdCBuc2ltX2ZpYl9kYXRhICpuc2ltX2ZpYl9jcmVhdGUoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTU5Mi1cXHRkYXRhLVxcdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5zaW1fZmliX2V2ZW50X25iO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYzoxNTkzOlxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihkZXZsaW5rX25ldChkZXZsaW5rKSwgXFx1MDAyNmRhdGEtXFx1MDAzZWZpYl9uYixcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTU5NC1cXHRcXHRcXHRcXHQgICAgbnNpbV9maWJfZHVtcF9pbmNvbnNpc3RlbnQsIGV4dGFjayk7XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTYyNi1lcnJfZmliX25vdGlmaWVyX3VucmVnaXN0ZXI6XFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jOjE2Mjc6XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFxcdTAwMjZkYXRhLVxcdTAwM2VmaWJfbmIpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYy0xNjI4LWVycl9uZXh0aG9wX25iX3VucmVnaXN0ZXI6XFxuLS1cXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmM9MTY0NT12b2lkIG5zaW1fZmliX2Rlc3Ryb3koc3RydWN0IGRldmxpbmsgKmRldmxpbmssIHN0cnVjdCBuc2ltX2ZpYl9kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvbmV0ZGV2c2ltL2ZpYi5jLTE2NTctXFx0bnNpbV9maWJfZGVidWdmc19leGl0KGRhdGEpO1xcbmRyaXZlcnMvbmV0L25ldGRldnNpbS9maWIuYzoxNjU4OlxcdHVucmVnaXN0ZXJfZmliX25vdGlmaWVyKGRldmxpbmtfbmV0KGRldmxpbmspLCBcXHUwMDI2ZGF0YS1cXHUwMDNlZmliX25iKTtcXG5kcml2ZXJzL25ldC9uZXRkZXZzaW0vZmliLmMtMTY1OS1cXHR1bnJlZ2lzdGVyX25leHRob3Bfbm90aWZpZXIoZGV2bGlua19uZXQoZGV2bGluayksIFxcdTAwMjZkYXRhLVxcdTAwM2VuZXh0aG9wX25iKTtcXG4tLVxcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oPTQxPWludCBjYWxsX2ZpYl9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LCBlbnVtIGZpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUsXFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDItXFx0XFx0ICAgICAgIHN0cnVjdCBmaWJfbm90aWZpZXJfaW5mbyAqaW5mbyk7XFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmg6NDM6aW50IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXFxuaW5jbHVkZS9uZXQvZmliX25vdGlmaWVyLmgtNDQtXFx0XFx0XFx0ICB2b2lkICgqY2IpKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpLFxcbmluY2x1ZGUvbmV0L2ZpYl9ub3RpZmllci5oLTQ1LVxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5pbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaDo0NjppbnQgdW5yZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTtcXG5pbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaC00Ny1zdHJ1Y3QgZmliX25vdGlmaWVyX29wcyAqXFxuLS1cXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYz04Mj1zdGF0aWMgYm9vbCBmaWJfZHVtcF9pc19jb25zaXN0ZW50KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTk3LSNkZWZpbmUgRklCX0RVTVBfTUFYX1JFVFJJRVMgNVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jOjk4OmludCByZWdpc3Rlcl9maWJfbm90aWZpZXIoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTk5LVxcdFxcdFxcdCAgdm9pZCAoKmNiKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKSxcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTExNy19XFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTE4OkVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZmliX25vdGlmaWVyKTtcXG5uZXQvY29yZS9maWJfbm90aWZpZXIuYy0xMTktXFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTIwOmludCB1bnJlZ2lzdGVyX2ZpYl9ub3RpZmllcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmMtMTIxLXtcXG4tLVxcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTEyNS19XFxubmV0L2NvcmUvZmliX25vdGlmaWVyLmM6MTI2OkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9maWJfbm90aWZpZXIpO1xcbm5ldC9jb3JlL2ZpYl9ub3RpZmllci5jLTEyNy1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM9ODY3PWludCBuZl9mbG93X3RhYmxlX2luaXQoc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy04ODctXFx0XFx0Zmxvd3RhYmxlLVxcdTAwM2VmaWJfbmIubm90aWZpZXJfY2FsbCA9IG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50O1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmM6ODg4OlxcdFxcdGVyciA9IHJlZ2lzdGVyX2ZpYl9ub3RpZmllcihuZXQsIFxcdTAwMjZmbG93dGFibGUtXFx1MDAzZWZpYl9uYixcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jLTg4OS1cXHRcXHRcXHRcXHRcXHQgICAgTlVMTCwgTlVMTCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfY29yZS5jPTk1Mj12b2lkIG5mX2Zsb3dfdGFibGVfZnJlZShzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93X3RhYmxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYy05NTQtXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3dfdGFibGUpKSB7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuYzo5NTU6XFx0XFx0dW5yZWdpc3Rlcl9maWJfbm90aWZpZXIocmVhZF9wbmV0KFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VuZXQpLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9jb3JlLmMtOTU2LVxcdFxcdFxcdFxcdFxcdFxcdTAwMjZmbG93X3RhYmxlLVxcdTAwM2VmaWJfbmIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOToyOC44MTU3Njk0NzhaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1OTQzMzM5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBGaWIgTm90aWZpZXIgUmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gYHJlZ2lzdGVyX2ZpYl9ub3RpZmllcmAuLi4gSSBrbm93IHRoYXQgb25lLiBJdCdzIGluIGBuZXQvY29yZS9maWJfbm90aWZpZXIuY2AuIFRoYXQgZmlsZSBzaG91bGQgYmUgY29tcGlsZWQsIG9idmlvdXNseSwgYXMgbG9uZyBhcyBgQ09ORklHX05FVGAgaXMgc2V0LiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgdGhvdWdoLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgLiBHb3R0YSBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcnVsZXMuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBob3cgaXQncyBpbnRlZ3JhdGVkLCBzbyBhIGRvdWJsZS1jaGVjayBpcyB3b3J0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMzcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNTowOTozMS45NzUyMDY2N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0NDAyNjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaWJfbm90aWZpZXJcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvTWFrZWZpbGU9MTI9b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbi0tXFxubmV0L2NvcmUvTWFrZWZpbGUtMTQtXFx0XFx0XFx0c29ja19kaWFnLm8gZGV2X2lvY3RsLm8gdHNvLm8gc29ja19yZXVzZXBvcnQubyBcXFxcXFxubmV0L2NvcmUvTWFrZWZpbGU6MTU6XFx0XFx0XFx0ZmliX25vdGlmaWVyLm8geGRwLm8gZmxvd19vZmZsb2FkLm8gZ3JvLm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTE2LVxcdFxcdFxcdG5ldGRldi1nZW5sLm8gbmV0ZGV2LWdlbmwtZ2VuLm8gbmV0ZGV2X3dvcmsubyBnc28ub1xcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTQtXFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTU6XFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjA5OjM0LjkxOTI0Mzk5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODMzOTcxMDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1aWxkIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgZmliX25vdGlmaWVyLm9gIGlzIGNvbnNpc3RlbnRseSBiZWluZyBidWlsdCwgdGhhdCBtdWNoIGlzIGNsZWFyLiBNeSBuZXh0IHRob3VnaHQgaXMgYWJvdXQgYE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRGAuIEl0J3MgcmVsYXRlZCB0byB0aGUgYG5mX3RhYmxlc2AgZnJhbWV3b3JrLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYnVpbGQgZGVwZW5kZW5jaWVzLiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZTsgaXQgd2lsbCBjb250YWluIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORl9UQUJMRVNgLiBJJ20gdGhpbmtpbmcgd2UnbGwgbmVlZCBgTkZfVEFCTEVTYCwgYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAgZGVmaW5lZC4gQWgsIHdhaXQgYSBtaW51dGUsIGBORlRfRkxPV19PRkZMT0FEYCBpcyB0aGUgKm5mdGFibGVzIG1vZHVsZSogc3BlY2lmaWNhbGx5IGZvciBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eS4gVGhhdCdzIGEga2V5IGRpc3RpbmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjUxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMDo1My4yNTg5NTg1MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0MjM3MjE5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GVF9GTE9XX09GRkxPQURcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTQ5OD1jb25maWcgTkZUX0VYVEhEUl9EQ0NQXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTAzLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDQ6Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MTA6NTYuNjgyNjg2ODI1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Njk3OTIzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biwgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkVuYWJsaW5nIEFkdmFuY2VkIEZsb3cgT2ZmbG9hZGluZyBmb3IgRW5oYW5jZWQgUGVyZm9ybWFuY2UqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gQmFzZWQgb24gdGhlIGFyY2hpdGVjdHVyZSBhbmQgdGhlIHJlcXVpcmVtZW50cywgSSdtIHRoaW5raW5nIHdlIG5lZWQgdG8gc2VyaW91c2x5IGNvbnNpZGVyIGVuYWJsaW5nIGJvdGggYE5GX0ZMT1dfVEFCTEVgIGFuZCBgTkZUX0ZMT1dfT0ZGTE9BRGAuIFdlJ3ZlIHNlZW4gdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXRzIHRoZXNlIGZlYXR1cmVzIGJyaW5nIHRvIHRoZSB0YWJsZSBpbiBzaW1pbGFyIGRlcGxveW1lbnRzLCBlc3BlY2lhbGx5IHVuZGVyIGhlYXZ5IGxvYWQuIFRoZSBwb3RlbnRpYWwgZm9yIGhhcmR3YXJlIG9mZmxvYWRpbmcgd2l0aCBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgcGFydGljdWxhcmx5IGFwcGVhbGluZyBmb3IgaGlnaC10aHJvdWdocHV0IHNjZW5hcmlvcywgYW5kIHdlIHdhbnQgdG8gZW5zdXJlIHdlIGFyZSBsZXZlcmFnaW5nIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gdGhhdCBpcyBhdmFpbGFibGUgdG8gdXMuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gYWxzbyBhZGRpbmcgYE5FVF9BQ1RfQ1RgIHRvIHRoZSBjaGVja2xpc3QuIFRoZSBgdGMgYWN0aW9uIGN0YCBpbnRlZ3JhdGlvbiBpcyBjcnVjaWFsIGFzIHRoaXMgd2lsbCBhbGxvdyB1cyB0byBsZXZlcmFnZSBmbG93IHRhYmxlcyB3aXRoaW4gdGhlIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFRoaXMgbGV2ZWwgb2YgZ3JhbnVsYXIgY29udHJvbCBpcyBlc3NlbnRpYWwgZm9yIGZpbmUtdHVuaW5nIG91ciBuZXR3b3JraW5nIGJlaGF2aW9yIGFuZCBtYXhpbWl6aW5nIGVmZmljaWVuY3ksIHNwZWNpZmljYWxseSB3aXRoIHRoZSBjYXBhYmlsaXRpZXMgb2YgZmxvdyB0YWJsZXMuIFdlIGNhbiBnYWluIGEgbG90IGJ5IGNvbWJpbmluZyB0aGVzZSB0b29scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5MDEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMTowMC4zNTI0ODE3M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUzMDE4ODk2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9DVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz04NTM9Y29uZmlnIE5FVF9BQ1RfQ09OTk1BUktcXG4tLVxcbm5ldC9zY2hlZC9LY29uZmlnLTg2NC1cXG5uZXQvc2NoZWQvS2NvbmZpZzo4NjU6Y29uZmlnIE5FVF9BQ1RfQ1RJTkZPXFxubmV0L3NjaGVkL0tjb25maWctODY2LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgQ29ubmVjdGlvbiBNYXJrIEFjdGlvbnNcXFwiXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZz05MDY9Y29uZmlnIE5FVF9BQ1RfVFVOTkVMX0tFWVxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTE2LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkxNzpjb25maWcgTkVUX0FDVF9DVFxcbm5ldC9zY2hlZC9LY29uZmlnLTkxOC1cXHR0cmlzdGF0ZSBcXFwiY29ubmVjdGlvbiB0cmFja2luZyB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjExOjAyLjg4MjY4MjA4OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjgxNjQ1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9jdXMgb2YgVGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSdtIGRvaW5nIGlzIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSBmb2N1cyBzeW1ib2xzIGFkZGVkIGJ5IHRoaXMgcGF0Y2guICBBIHF1aWNrIHNjYW4gc2hvd3M6IGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGAsIGBuZl9mbG93X2ZpYl9mbG93X21hdGNoYCwgYG5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JgLCBgbmZfZmxvd190YWJsZV9maWJfd29ya2AsIGBuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaGAsIGBuZl9mbG93X3RhYmxlX2ZpYl9ldmVudGAsIGFuZCBgbmZfZmxvd190YWJsZV9maWJfZHJhaW5gLiBZdXAsIHRob3NlIGxvb2sgbGlrZSBzb2xpZCBmb2N1cyBwb2ludHMuIE5vdywgbGV0J3MgZ2V0IHRoZW0gb3JnYW5pemVkIGludG8gYSBjbGVhciBsaXN0IGZvciBlYXNpZXIgcmVmZXJlbmNlOlxuXG4qICAgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YFxuKiAgIGBuZl9mbG93X3RhYmxlX2ZpYl93b3JrYFxuKiAgIGBuZl9mbG93X29mZmxvYWRfZmliX2NiYFxuKiAgIGBuZl9mbG93X2ZpYl9mbG93X21hdGNoYFxuKiAgIGBuZl9mbG93X2ZpYl90dXBsZV9tYXRjaGBcbiogICBgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2hgXG4qICAgYG5mX2Zsb3dfdGFibGVfZmliX2RyYWluYFxuXG5BbHJpZ2h0LCBuZXh0IEknbSBnb2luZyB0byBxdWlja2x5IHZlcmlmeSByZWFjaGFiaWxpdHkgb2YgYG5mX2Zsb3dfdGFibGVfZmliX2V2ZW50YC4gSSBzZWUgaXQncyByZWdpc3RlcmVkIGFzIGEgbm90aWZpZXIgdXNpbmcgYHJlZ2lzdGVyX2ZpYl9ub3RpZmllcmAuICBBbmQgeWVzLCB3aGVuIHJvdXRlcyBhcmUgYWRkZWQsIHRoZSBgY2FsbF9maWJfbm90aWZpZXJzYCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCwgaW4gdHVybiBjYWxsaW5nIHRoZSBub3RpZmllciBjYWxsYmFjay4gIFNvLCB3ZSBjYW4gc2F5IHdpdGggY29uZmlkZW5jZSB0aGF0IGl0IGlzIGluZGVlZCByZWFjaGFibGUuXG5cbk5vdywgbGV0J3MgZ2V0IHRoZSBjb25maWcgZGVwZW5kZW5jaWVzIG5haWxlZCBkb3duLiAgVGhpcyBwYXRjaCBzZWVtcyB0byBuZWVkOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYW5kIGBORVRfQUNUX0NUYC4gIEkgY2FuIHNlZSBhbiBgI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpYCBpbiB0aGUgY29kZSwgc28gZGVmaW5pdGVseSBgSVBWNmAgYXMgd2VsbC5cblxuSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IGBJUFY2YCBkZXBlbmRlbmN5LiAgWWVzLCBoZXJlIGl0IGlzOlxuXG5gYGBjXG4jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcblx0Y2FzZSBORlBST1RPX0lQVjY6XG5cdFx0cmV0dXJuIGlwdjZfcHJlZml4X2VxdWFsKFx1MDAyNnR1cGxlLVx1MDAzZWRzdF92NiwgXHUwMDI2ZXYtXHUwMDNlYWRkci5pcDYsXG5cdFx0XHRcdFx0IGV2LVx1MDAzZXByZWZpeF9sZW4pO1xuI2VuZGlmXG5gYGBcblxuT2theSwgdGhlIGNvbXBpbGVyIG5lZWRzIHRoYXQgdG8gZW5hYmxlIHRoZSByZWxldmFudCBjb2RlIHBhdGgsIHVuZGVyc3Rvb2QuXG5cbkZpbmFsbHksIEknbSB0aGlua2luZyBhYm91dCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCAqbWlnaHQqIGJlIHJlbGV2YW50LiAgYE5GX0ZMT1dfVEFCTEVfSU5FVGAgY29tZXMgdG8gbWluZDsgaXQncyBwb3NzaWJsZSB0aGF0J3MgbmVlZGVkIGZvciBzdXBwb3J0aW5nIG1peGVkIElQdjQvSVB2NiBmbG93IHRhYmxlcy4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGF0IGFzIHBhcnQgb2YgdGhlIGRlZXBlciBkaXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM0OSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMToxMC41NjQzMzAyMDFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Njc1MzU5NDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMToxMy4yMzE4NzExMDdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg0MjU0MjUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqQ2hlY2tpbmcgdGhlIEZsb3cgVGFibGUgQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJJ20gYWxyZWFkeSBkZWVwIGludG8gdGhpcyBjb25maWd1cmF0aW9uLCBidXQgYmVmb3JlIEkgY29tbWl0LCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aG9zZSBmbG93IHRhYmxlIG9wdGlvbnMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgSSd2ZSBjb25zaWRlcmVkIGFsbCByZWxldmFudCBzZXR0aW5ncywgZXNwZWNpYWxseSBnaXZlbiB0aGUgbnVhbmNlcyBvZiBkaWZmZXJlbnQgSVAgdmVyc2lvbnMuIExldCdzIG1ha2Ugc3VyZSBJIGRpZG4ndCBvdmVybG9vayBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gYE5GX0ZMT1dfVEFCTEVfSVBWNGAgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgLiBJdCdzIGVhc3kgdG8gbWlzcyBhIGNydWNpYWwgc2V0dGluZyB3aGVuIHlvdSdyZSBmb2N1c2luZyBvbiBvbmUgc3BlY2lmaWMgYXNwZWN0LCBzbyBhIGZpbmFsLCBjb21wcmVoZW5zaXZlIHN3ZWVwIGlzIGFsd2F5cyB3YXJyYW50ZWQuIFRoaXMgY2hlY2sgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5IGluIHRoZSBsb25nIHJ1bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MTIsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxNToxMToxNy4wNzQ0MTY3MDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTEzMjQ0MjYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFX0lQVlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MTE6MTkuNjI1NzQ5MDQ4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTk1MTExNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTWlzc2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IGBORl9GTE9XX1RBQkxFX0lQVjRgIHdhcyBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBidXQgc29tZXRoaW5nIGZlZWxzIG9mZi4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0ZWxsaW5nIG1lIHRoYXQgaXQncyBhY3R1YWxseSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHBhdGguIFRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhlIHRydXRoIGFib3V0IGEga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzLCBvZiBjb3Vyc2UsIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU2luY2Ugd2UgYXJlIHRhbGtpbmcgYWJvdXQgSVBWNCBmbG93cywgdGhlIGxpa2VseSBwbGFjZSBpcyBgbmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJ2xsIGhlYWQgdGhlcmUgYW5kIGhhdmUgYSBsb29rLiBIb3BlZnVsbHksIHRoaXMgY2xlYXJzIGl0IHVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDczNCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjExOjIzLjA0NTI2MzIzNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwMDc5NDIwMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRkxPV19UQUJMRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAxPWVuZGlmICMgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzA0LVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXFx0Ym9vbCBcXFwiU3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDE1OjExOjI1Ljg0NjA2MzE0OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzU2NDYzNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgTmV0ZmlsdGVyIEZsb3cgVGFibGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHRob3NlIGluaXRpYWwgc3ltYm9scyBJIHdhcyBsb29raW5nIGF0IGFyZW4ndCByZWxldmFudCwgdGhlIGltcG9ydGFudCBvbmVzIGFyZSBgTkZfRkxPV19UQUJMRWAgYW5kIGBORl9GTE9XX1RBQkxFX0lORVRgLiBMZXQncyBicmVhayB0aGlzIGRvd24uXG5cblRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyB0aGUgcGF0Y2ggaXMgaW50cm9kdWNpbmcgRklCIGV2ZW50IGhhbmRsaW5nIHRvIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBjb2RlLCBzcGVjaWZpY2FsbHkgd2hlbiBoYXJkd2FyZSBvZmZsb2FkIGlzIGFjdGl2ZS4gSXQncyBlc3NlbnRpYWxseSBtYW5hZ2luZyBmbG93IHRhYmxlIGVudHJpZXMgYmFzZWQgb24gY2hhbmdlcyB0byB0aGUgRm9yd2FyZGluZyBJbmZvcm1hdGlvbiBCYXNlIChGSUIpLiBJdCByZWdpc3RlcnMgYSBub3RpZmllciBmb3IgRklCIGV2ZW50cyBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IGFyZSBub3cgaW52YWxpZCBiZWNhdXNlIHRoZXkgbWF0Y2ggdGhlIHJvdXRpbmcgY2hhbmdlcy4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiB0byB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMsIGFuZCBpdCdzIHJlYWNoYWJsZSBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggYnJvYWRlbnMgdGhlIHNjb3BlIG9mIHBvdGVudGlhbCBpbXBhY3QuIEkgY2FuIHRyaWdnZXIgdGhpcyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1lc3Npbmcgd2l0aCByb3V0aW5nIHRhYmxlcy5cblxuSGVyZSdzIHRoZSBjcml0aWNhbCBmb2N1cyBhcmVhOiBJIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9scyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzOiBgbmZfZmxvd190YWJsZV9maWJfZXZlbnRgLCBgbmZfZmxvd190YWJsZV9maWJfd29ya2AsIGBuZl9mbG93X29mZmxvYWRfZmliX2NiYCwgYG5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hgLCBgbmZfZmxvd19maWJfdHVwbGVfbWF0Y2hgLCBgbmZfZmxvd3RhYmxlX2ZpYl9mYW1pbHlfbWF0Y2hgLCBhbmQgYG5mX2Zsb3dfdGFibGVfZmliX2RyYWluYC5cblxuVGhlIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBicmluZyB0aGlzIGNvZGUgaW50byBwbGF5IGFyZSBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9BQ1RfQ1RgLCBhbmQgYElQVjZgLiBJJ2xsIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kIHdoZW4gY3JhZnRpbmcgdGVzdCBjYXNlcy5cblxuTGV0J3MgZG8gYSBsaXR0bGUgbW9yZSBkaWdnaW5nLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX2NvcmUuY2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgIGlzIGVuYWJsZWQuIEl0IHVzZXMgc3RhbmRhcmQgbmV0d29ya2luZyBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyBmcm9tIGBpbmNsdWRlL25ldC9maWJfbm90aWZpZXIuaGAsIGBpbmNsdWRlL25ldC9pcF9maWIuaGAsIGFuZCBgaW5jbHVkZS9uZXQvaXA2X2ZpYi5oYCwgd2hpY2ggaXMgYWxsIHByZXR0eSBzdGFuZGFyZCBuZXR3b3JraW5nIGZhcmUuIE5vdGhpbmcganVtcHMgb3V0IGFzIHVudXN1YWxseSBjb21wbGV4IG9yIGRhbmdlcm91cyAqeWV0KiwgYnV0IHRoaXMgaXMgZGVmaW5pdGVseSB3aGVyZSB0aGUgbG9naWMgaXMgYmVpbmcgbW9kaWZpZWQuXG5cbkFscmlnaHQsIEkndmUgZ290IGEgZ29vZCBoYW5kbGUgb24gdGhpcy4gVGltZSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE2NiwiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTU6MTE6MzQuMjAyNTMwODI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzY3ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9maWJfZXZlbnRcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX3dvcmtcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JcIixcbiAgICBcIm5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3dfZmliX3R1cGxlX21hdGNoXCIsXG4gICAgXCJuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9maWJfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEZJQiBldmVudCBoYW5kbGluZyB0byBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEl0IHJlZ2lzdGVycyBhIEZJQiBub3RpZmllciBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBGSUIgZXZlbnQncyBwcmVmaXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1vZGlmeWluZyByb3V0aW5nIHRhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfQUNUX0NUXCIsXG4gICAgXCJJUFY2XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZmxvd190YWJsZV9maWJfZXZlbnRcIixcbiAgICBcIm5mX2Zsb3dfdGFibGVfZmliX3dvcmtcIixcbiAgICBcIm5mX2Zsb3dfb2ZmbG9hZF9maWJfY2JcIixcbiAgICBcIm5mX2Zsb3dfZmliX2Zsb3dfbWF0Y2hcIixcbiAgICBcIm5mX2Zsb3dfZmliX3R1cGxlX21hdGNoXCIsXG4gICAgXCJuZl9mbG93dGFibGVfZmliX2ZhbWlseV9tYXRjaFwiLFxuICAgIFwibmZfZmxvd190YWJsZV9maWJfZHJhaW5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIEZJQiBldmVudCBoYW5kbGluZyB0byBuZXRmaWx0ZXIgZmxvdyB0YWJsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEl0IHJlZ2lzdGVycyBhIEZJQiBub3RpZmllciBhbmQgdGVhcnMgZG93biBmbG93cyB0aGF0IG1hdGNoIHRoZSBGSUIgZXZlbnQncyBwcmVmaXguIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXRmaWx0ZXIgbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBieSBjb25maWd1cmluZyBmbG93IHRhYmxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgYW5kIG1vZGlmeWluZyByb3V0aW5nIHRhYmxlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[1] Phase: Succeeded StartedAt: 2026-07-09 15:11:46 +0000 UTC FinishedAt: 2026-07-09 15:11:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-09 15:11:46 +0000 UTC FinishedAt: 2026-07-09 15:11:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2] Phase: Succeeded StartedAt: 2026-07-09 15:11:46 +0000 UTC FinishedAt: 2026-07-09 19:54:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-09 15:11:46 +0000 UTC FinishedAt: 2026-07-09 19:54:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-09 15:11:46 +0000 UTC FinishedAt: 2026-07-09 15:12:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-09 15:11:46 +0000 UTC FinishedAt: 2026-07-09 15:12:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowbrnmd/series-workflowbrnmd-convert-artifact-3606177658/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-09 15:12:54 +0000 UTC FinishedAt: 2026-07-09 15:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-09 15:12:54 +0000 UTC FinishedAt: 2026-07-09 15:44:49 +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:*368b1ec1-8ecd-45b8-aadb-22dc2e65a680,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-workflowbrnmd/series-workflowbrnmd-convert-artifact-3606177658/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": "3640cc1c-8b25-4317-98c5-cba746e55d7b", "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-workflowbrnmd/series-workflowbrnmd-build-action-1645983784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-09 15:12:54 +0000 UTC FinishedAt: 2026-07-09 15:44:39 +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:*368b1ec1-8ecd-45b8-aadb-22dc2e65a680,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-workflowbrnmd/series-workflowbrnmd-convert-artifact-3606177658/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": "3640cc1c-8b25-4317-98c5-cba746e55d7b", "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-workflowbrnmd/series-workflowbrnmd-build-action-1645983784/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-09 15:44:49 +0000 UTC FinishedAt: 2026-07-09 15:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-09 15:44:49 +0000 UTC FinishedAt: 2026-07-09 15:44:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-09 15:44:49 +0000 UTC FinishedAt: 2026-07-09 15:44:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-09 15:44:49 +0000 UTC FinishedAt: 2026-07-09 15:44:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.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-workflowbrnmd/series-workflowbrnmd-convert-artifact-1884708565/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-09 15:44:59 +0000 UTC FinishedAt: 2026-07-09 15:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-09 15:44:59 +0000 UTC FinishedAt: 2026-07-09 15:46:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3640cc1c-8b25-4317-98c5-cba746e55d7b,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-workflowbrnmd/series-workflowbrnmd-build-action-1645983784/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-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-09 15:46:49 +0000 UTC FinishedAt: 2026-07-09 15:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-09 15:46:49 +0000 UTC FinishedAt: 2026-07-09 15:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-09 15:46:49 +0000 UTC FinishedAt: 2026-07-09 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-09 15:46:49 +0000 UTC FinishedAt: 2026-07-09 16:45:48 +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:*368b1ec1-8ecd-45b8-aadb-22dc2e65a680,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-workflowbrnmd/series-workflowbrnmd-convert-artifact-1884708565/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": "b941607c-6459-4d25-8127-6c11f2a37ef0", "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-workflowbrnmd/series-workflowbrnmd-build-action-3460792417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-09 15:46:49 +0000 UTC FinishedAt: 2026-07-09 16:45:38 +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:*368b1ec1-8ecd-45b8-aadb-22dc2e65a680,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-workflowbrnmd/series-workflowbrnmd-convert-artifact-1884708565/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": "b941607c-6459-4d25-8127-6c11f2a37ef0", "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-workflowbrnmd/series-workflowbrnmd-build-action-3460792417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-09 16:45:48 +0000 UTC FinishedAt: 2026-07-09 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-09 16:45:48 +0000 UTC FinishedAt: 2026-07-09 16:45:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-09 16:45:48 +0000 UTC FinishedAt: 2026-07-09 16:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-09 16:45:48 +0000 UTC FinishedAt: 2026-07-09 16:47:35 +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:*b941607c-6459-4d25-8127-6c11f2a37ef0,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-workflowbrnmd/series-workflowbrnmd-build-action-3460792417/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-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 19:54:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 19:54:19 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3640cc1c-8b25-4317-98c5-cba746e55d7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b941607c-6459-4d25-8127-6c11f2a37ef0,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-workflowbrnmd/series-workflowbrnmd-build-action-1645983784/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-workflowbrnmd/series-workflowbrnmd-build-action-3460792417/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 16:47:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 16:47:51 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbrnmd/series-workflowbrnmd-convert-artifact-3284749242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 16:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 16:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-09 16:47:45 +0000 UTC FinishedAt: 2026-07-09 16:47:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-09 16:47:55 +0000 UTC FinishedAt: 2026-07-09 19:54:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbrnmd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_flow_table_fib_event","nf_flow_table_fib_work","nf_flow_offload_fib_cb","nf_flow_fib_flow_match","nf_flow_fib_tuple_match","nf_flowtable_fib_family_match","nf_flow_table_fib_drain"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"60444706aa17616efc03190d099ac347e28b3d0a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_ACT_CT","IPV6"],"series_id":"75cd5a68-8e8e-41ef-9da6-dea3554407a7","tree_name":"nf","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-09 16:47:55 +0000 UTC FinishedAt: 2026-07-09 19:54:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3640cc1c-8b25-4317-98c5-cba746e55d7b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b941607c-6459-4d25-8127-6c11f2a37ef0,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-workflowbrnmd/series-workflowbrnmd-build-action-1645983784/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-workflowbrnmd/series-workflowbrnmd-build-action-3460792417/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-workflowbrnmd/series-workflowbrnmd-convert-artifact-3284749242/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,}