Name: series-workflowsl8m5 Phase: Succeeded StartedAt: 2026-08-29 05:33:00 +0000 UTC FinishedAt: 2026-08-29 10:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[0] Phase: Succeeded StartedAt: 2026-08-29 05:33:00 +0000 UTC FinishedAt: 2026-08-29 07:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 05:33:00 +0000 UTC FinishedAt: 2026-08-29 07:05:42 +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": "4a9d62a8774f130a5b8de26ca9f415e6050a9d51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "4a9d62a8774f130a5b8de26ca9f415e6050a9d51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "30c321fc-7f68-4f4d-b520-87ec58e418ef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_dup_ipv4", "nf_dup_ipv6" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxuXG4xLiBJbml0aWFsaXphdGlvbjogQWxsIGBza19idWZmYCBpbnN0YW5jZXMgYXJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24gdmlhIGBza2J1ZmZfY2xlYXIoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkgZnJvbSB0aGUgc3RhcnQgb2YgYHN0cnVjdCBza19idWZmYCB1cCB0byBgdGFpbGApLCBlbnN1cmluZyBgbmZfZHVwbGljYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSXQgaXMgcHJvcGVybHkgcHJlc2VydmVkIGluIGBuZl9jb3B5KClgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXIoKWAuXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBwYWNrZXQgZGF0YSBsZW5ndGhzLCBwYXlsb2FkIGJvdW5kcywgb3IgYWNjZXNzIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICYjMzk7bmZfZHVwbGljYXRlZCYjMzk7IGJpdCBpbiBzdHJ1Y3Qgc2tfYnVmZiB0byB0cmFjayBjbG9uZWQgcGFja2V0cyBhY3Jvc3MgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGhvb2tzIChlLmcuIG5mdF9kdXAgYW5kIHh0X1RFRSksIHByZXZlbnRpbmcgaW5maW5pdGUgZHVwbGljYXRpb24gbG9vcHMuIFRoaXMgZGlyZWN0bHkgY2hhbmdlcyBwYWNrZXQgY2xvbmluZyBhbmQgcm91dGluZyBiZWhhdmlvciBpbiBuZXRmaWx0ZXIgSVB2NCBhbmQgSVB2NiBkdXBsaWNhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4OTI0Mzk4ZDI0Yzg5ZmZkYzVkMDg2Y2NkOGE3NDhhYjNlZDcwYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwNzowMjowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggNTUyMjcxNmRmOGZmZi4uZjVjN2I3YjFjZWRlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC04MTIsNiAmIzQzOzgxMiw3IEBAIGVudW0gc2tiX3RzdGFtcF90eXBlIHtcbiAgKlx0QHJlZGlyZWN0ZWQ6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBieSBwYWNrZXQgY2xhc3NpZmllclxuICAqXHRAZnJvbV9pbmdyZXNzOiBwYWNrZXQgd2FzIHJlZGlyZWN0ZWQgZnJvbSB0aGUgaW5ncmVzcyBwYXRoXG4gICpcdEBuZl9za2lwX2VncmVzczogcGFja2V0IHNoYWxsIHNraXAgbmYgZWdyZXNzIC0gc2VlIG5ldGZpbHRlcl9uZXRkZXYuaFxuJiM0MzsgKlx0QG5mX2R1cGxpY2F0ZWQ6IHBhY2tldCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGFjdGlvblxuICAqXHRAcGVla2VkOiB0aGlzIHBhY2tldCBoYXMgYmVlbiBzZWVuIGFscmVhZHksIHNvIHN0YXRzIGhhdmUgYmVlblxuICAqXHRcdGRvbmUgZm9yIGl0LCBkb24mIzM5O3QgZG8gdGhlbSBhZ2FpblxuICAqXHRAbmZfdHJhY2U6IG5ldGZpbHRlciBwYWNrZXQgdHJhY2UgZmxhZ1xuQEAgLTEwMjMsNiAmIzQzOzEwMjQsOSBAQCBzdHJ1Y3Qgc2tfYnVmZiB7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcbiBcdF9fdThcdFx0XHRuZl9za2lwX2VncmVzczoxO1xuICNlbmRpZlxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuJiM0MztcdF9fdThcdFx0XHRuZl9kdXBsaWNhdGVkOjE7XG4mIzQzOyNlbmRpZlxuICNpZmRlZiBDT05GSUdfU0tCX0RFQ1JZUFRFRFxuIFx0X191OFx0XHRcdGRlY3J5cHRlZDoxO1xuICNlbmRpZlxuQEAgLTUyMDAsNiAmIzQzOzUyMDQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuIFx0bmZfY29ubnRyYWNrX3B1dChza2JfbmZjdChkc3QpKTtcbiAjZW5kaWZcbiBcdGRzdC1cdTAwM2VzbG93X2dybyA9IHNyYy1cdTAwM2VzbG93X2dybztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcbiYjNDM7XHRkc3QtXHUwMDNlbmZfZHVwbGljYXRlZCA9IHNyYy1cdTAwM2VuZl9kdXBsaWNhdGVkO1xuJiM0MzsjZW5kaWZcbiBcdF9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbmluZGV4IDlhNzczNTAyZjEwYWMuLjhmZTMxYTBkYjA2M2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbkBAIC01NCw3ICYjNDM7NTQsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0LypcbiBcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXG5AQCAtODYsNiAmIzQzOzg2LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gXG4gXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4mIzQzO1x0XHRza2ItXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiBcdFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbmluZGV4IDZkYTMxMDJiN2MxYjMuLmUwZmRiNDNkN2QzZGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuIHtcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoc2tiID09IE5VTEwpXG5AQCAtNjQsNiAmIzQzOzY0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2Vob3BfbGltaXQ7XG4gXHR9XG4gXHRpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4mIzQzO1x0XHRza2ItXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiBcdFx0aXA2X2xvY2FsX291dChuZXQsIHNrYi1cdTAwM2Vzaywgc2tiKTtcbiBcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZHVwX2lwdjQmIzM0OywKICAgICYjMzQ7bmZfZHVwX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAmIzM5O25mX2R1cGxpY2F0ZWQmIzM5OyBiaXQgaW4gc3RydWN0IHNrX2J1ZmYgdG8gdHJhY2sgY2xvbmVkIHBhY2tldHMgYWNyb3NzIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBob29rcyAoZS5nLiBuZnRfZHVwIGFuZCB4dF9URUUpLCBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzLiBUaGlzIGRpcmVjdGx5IGNoYW5nZXMgcGFja2V0IGNsb25pbmcgYW5kIHJvdXRpbmcgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyIElQdjQgYW5kIElQdjYgZHVwbGljYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODkyNDM5OGQyNGM4OWZmZGM1ZDA4NmNjZDhhNzQ4YWIzZWQ3MGFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDc6MDI6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA1NTIyNzE2ZGY4ZmZmLi5mNWM3YjdiMWNlZGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTgxMiw2ICYjNDM7ODEyLDcgQEAgZW51bSBza2JfdHN0YW1wX3R5cGUgewogICoJQHJlZGlyZWN0ZWQ6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBieSBwYWNrZXQgY2xhc3NpZmllcgogICoJQGZyb21faW5ncmVzczogcGFja2V0IHdhcyByZWRpcmVjdGVkIGZyb20gdGhlIGluZ3Jlc3MgcGF0aAogICoJQG5mX3NraXBfZWdyZXNzOiBwYWNrZXQgc2hhbGwgc2tpcCBuZiBlZ3Jlc3MgLSBzZWUgbmV0ZmlsdGVyX25ldGRldi5oCiYjNDM7ICoJQG5mX2R1cGxpY2F0ZWQ6IHBhY2tldCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGFjdGlvbgogICoJQHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW4KICAqCQlkb25lIGZvciBpdCwgZG9uJiMzOTt0IGRvIHRoZW0gYWdhaW4KICAqCUBuZl90cmFjZTogbmV0ZmlsdGVyIHBhY2tldCB0cmFjZSBmbGFnCkBAIC0xMDIzLDYgJiM0MzsxMDI0LDkgQEAgc3RydWN0IHNrX2J1ZmYgewogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1MKIAlfX3U4CQkJbmZfc2tpcF9lZ3Jlc3M6MTsKICNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNCkgfHwgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjYpCiYjNDM7CV9fdTgJCQluZl9kdXBsaWNhdGVkOjE7CiYjNDM7I2VuZGlmCiAjaWZkZWYgQ09ORklHX1NLQl9ERUNSWVBURUQKIAlfX3U4CQkJZGVjcnlwdGVkOjE7CiAjZW5kaWYKQEAgLTUyMDAsNiAmIzQzOzUyMDQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKQogCW5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7CiAjZW5kaWYKIAlkc3QtJmd0O3Nsb3dfZ3JvID0gc3JjLSZndDtzbG93X2dybzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KQomIzQzOwlkc3QtJmd0O25mX2R1cGxpY2F0ZWQgPSBzcmMtJmd0O25mX2R1cGxpY2F0ZWQ7CiYjNDM7I2VuZGlmCiAJX19uZl9jb3B5KGRzdCwgc3JjLCB0cnVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwppbmRleCA5YTc3MzUwMmYxMGFjLi44ZmUzMWEwZGIwNjNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwpAQCAtNTQsNyAmIzQzOzU0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCXN0cnVjdCBpcGhkciAqaXBoOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiYjNDM7CWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLSZndDtuZl9kdXBsaWNhdGVkKQogCQlnb3RvIG91dDsKIAkvKgogCSAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yCkBAIC04Niw2ICYjNDM7ODYsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCS0taXBoLSZndDt0dGw7CiAKIAlpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7CiYjNDM7CQlza2ItJmd0O25mX2R1cGxpY2F0ZWQgPSAxOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSB0cnVlOwogCQlpcF9sb2NhbF9vdXQobmV0LCBza2ItJmd0O3NrLCBza2IpOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKaW5kZXggNmRhMzEwMmI3YzFiMy4uZTBmZGI0M2Q3ZDNkZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpCiB7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiYjNDM7CWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLSZndDtuZl9kdXBsaWNhdGVkKQogCQlnb3RvIG91dDsKIAlza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC02NCw2ICYjNDM7NjQsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCS0taXBoLSZndDtob3BfbGltaXQ7CiAJfQogCWlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHsKJiM0MzsJCXNrYi0mZ3Q7bmZfZHVwbGljYXRlZCA9IDE7CiAJCWN1cnJlbnQtJmd0O2luX25mX2R1cGxpY2F0ZSA9IHRydWU7CiAJCWlwNl9sb2NhbF9vdXQobmV0LCBza2ItJmd0O3NrLCBza2IpOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYWNrZXQgRHVwbGljYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyB0aGUgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYyDigJMgdGhpbmdzIGxpa2UgYG5mdF9kdXBfaXB2NGAsIGBuZnRfZHVwX2lwdjZgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgeHRfVEVFYCwgYWxsIG9mIHdoaWNoIGxldmVyYWdlIHRoZSBjb3JlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgZnVuY3Rpb25zLiBUaGUgY29yZSBjb25jZXB0IGhlcmUgaXMgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcyBvciByZWN1cnNpb24gd2hlbiBhIGR1cGxpY2F0ZWQgcGFja2V0IGhpdHMgbmV0ZmlsdGVyIGhvb2tzIGFnYWluLiBTbWFydC4KClRoZSBtb2RpZmljYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHRoZXkmIzM5O3JlIGFkZGluZyBhIGBuZl9kdXBsaWNhdGVkOjFgIGJpdCB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gVGhpcyBiaXQgaXMgY29uZGl0aW9uYWwsIG9ubHkgYXBwZWFyaW5nIHdoZW4gZWl0aGVyIGBDT05GSUdfTkZfRFVQX0lQVjRgIG9yIGBDT05GSUdfTkZfRFVQX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwga2VlcHMgdGhlIHN0cnVjdCBsZWFuIHdoZW4gaXQmIzM5O3Mgbm90IG5lZWRlZC4gVGhleSYjMzk7cmUgYWxzbyBtYWtpbmcgc3VyZSBgbmZfZHVwbGljYXRlZGAgZ2V0cyBjb3BpZWQgb3ZlciBpbiBgbmZfY29weSgpYC4gTWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gcmV0YWluIHRoYXQgZHVwbGljYXRlZCBzdGF0dXMuCgpOb3csIGluIGBuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AsIGl0JiMzOTtzIGFsbCBhYm91dCBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGlzIG5ldyBiaXQuIEJvdGggYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAgYXJlIGNoZWNraW5nIGlmIGBza2ItJmd0O25mX2R1cGxpY2F0ZWRgIGlzIGFscmVhZHkgc2V0LCBhbmQgKnRoZW4qIHNldHRpbmcgaXQgaWYgaXQgaXNuJiMzOTt0LiBUaGlzIHByZXZlbnRzIHRoZSBzYW1lIHBhY2tldCBmcm9tIGJlaW5nIG1hcmtlZCBhcyBkdXBsaWNhdGVkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIGR1cGxpY2F0aW9uIHBhdGguCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHZlcmlmeSBob3cgdGhlIEtjb25maWcgc2V0dGluZ3MgYXJlIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGBDT05GSUdfTkZfRFVQX0lQVjRgIGFuZCBgQ09ORklHX05GX0RVUF9JUFY2YCBmbGFncyBhcmUgY29uZmlndXJlZC4gSSYjMzk7bGwgcHJvYmFibHkgcnVuIGEgYGdyZXBwZXJgIGFjcm9zcyB0aGUgS2NvbmZpZyBmaWxlcywgb3IganVzdCBkaWcgdGhyb3VnaCB0aGVtIGlmIEkgbmVlZCB0by4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlLCBvZiBjb3Vyc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0RVUF9JUFZbNDZdJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzEtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo3Mjpjb25maWcgTkZfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIElQdjQgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTU5PWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjYxOmNvbmZpZyBORl9EVVBfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKktjb25maWcgSW5zcGVjdGlvbiBmb3IgSVB2NCBhbmQgSVB2NiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGFydGljdWxhcmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGNvbXBvbmVudHMgYXJlIHN0cnVjdHVyZWQuIExldCBtZSBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNzIsIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgSVB2NCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbnRvIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNjEgdG8gc2VlIGhvdyB0aGUgSVB2NiBjb25maWd1cmF0aW9uIGlzIHNldCB1cC4gVGhpcyB3aWxsIGxldCBtZSBzZWUgaWYgdGhlIElQdjYgY29uZmlndXJhdGlvbiBpcyBzaW1pbGFyIG9yIGhhcyBpdHMgb3duIHNwZWNpZmljIGRlcGVuZGVuY2llcyB0byBiZSBhd2FyZSBvZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb3JlIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhlc2UgS2NvbmZpZyBmaWxlcyB3aWxsIGNsZWFybHkgb3V0bGluZSB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbGxvd2luZyBtZSB0byBmdWxseSBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHQgIG11bHRpY2FzdCBvciBibGFja2hvbGUuXG4gIDYxOlx0XG4gIDYyOlx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxuICA2MzpcdFxuICA2NDpcdGNvbmZpZyBORl9UQUJMRVNfQVJQXG4gIDY1Olx0XHRib29sIFwmIzM0O0FSUCBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuICA2NjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4gIDY3Olx0XHRoZWxwXG4gIDY4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFSUCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDY5Olx0XG4gIDcwOlx0ZW5kaWYgIyBORl9UQUJMRVNcbiAgNzE6XHRcbiAgNzI6XHRjb25maWcgTkZfRFVQX0lQVjRcbiAgNzM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cJiMzNDtcbiAgNzQ6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcbiAgNzU6XHRcdGhlbHBcbiAgNzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjQgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY0XG4gIDc3Olx0XHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxuICA3ODpcdFxuICA3OTpcdGNvbmZpZyBORl9MT0dfQVJQXG4gIDgwOlx0XHR0cmlzdGF0ZSBcJiMzNDtBUlAgcGFja2V0IGxvZ2dpbmdcJiMzNDtcbiAgODE6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4MjpcdFx0c2VsZWN0IE5GX0xPR19TWVNMT0dcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAgODU6XHRcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxuICA4NjpcdFxuICA4NzpcdGNvbmZpZyBORl9MT0dfSVBWNFxuICA4ODpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuICA4OTpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDkwOlx0XHRzZWxlY3QgTkZfTE9HX1NZU0xPR1xuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0VGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlciYjMzk7cyBjb252ZW5pZW5jZVxuICA5MzpcdFx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMgQ09ORklHX05GX0xPR19TWVNMT0cuXG4gIDk0Olx0XG4gIDk1Olx0Y29uZmlnIE5GX1JFSkVDVF9JUFY0XG4gIDk2Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY0IHBhY2tldCByZWplY3Rpb25cJiMzNDtcbiAgOTc6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA5ODpcdFxuICA5OTpcdGlmIE5GX05BVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBORl9EVVBfSVBWNC9JUFY2IERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAgb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGJleW9uZCB0aGVpciBiYXNpYyBmdW5jdGlvbiwgbGV0JiMzOTtzIGV4cGxvcmUgdGhlaXIgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGVjb3N5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBtb2R1bGVzLCBvciBjb25maWd1cmF0aW9ucyAqc2VsZWN0KiB0aGVzZSBvcHRpb25zIOKAkyB3aGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gQ29udmVyc2VseSwgSSYjMzk7bSBlcXVhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCAqZGVwZW5kcyogb24gdGhlbS4gV2hpY2ggcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgcmVseSBvbiB0aGVzZSBzZXR0aW5ncyB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZW0sIGFuZCBwYXJ0aWN1bGFybHkgd2hlbiBjb25zaWRlcmluZyBjb21wYXRpYmlsaXR5IGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuIFdlIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGNvbm5lY3Rpb25zIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRFVQX0lQVls0Nl0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjUwOlx0c2VsZWN0IE5GX0RVUF9JUFY0XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cdGhlbHBcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzEtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo3Mjpjb25maWcgTkZfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIElQdjQgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfSVBfTkZfQVJQRklMVEVSKSAmIzQzOz0gYXJwdGFibGVfZmlsdGVyLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01Mi1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICYjNDM7PSBuZl9kdXBfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NDM9Y29uZmlnIE5GVF9EVVBfSVBWNlxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTQ1LVx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XHRzZWxlY3QgTkZfRFVQX0lQVjZcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTQ3LVx0aGVscFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTU5PWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjYxOmNvbmZpZyBORl9EVVBfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNikgJiM0Mzs9IG5mX3JlamVjdF9pcHY2Lm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkZfRFVQX0lQVjYpICYjNDM7PSBuZl9kdXBfaXB2Ni5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjUtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTEwNTc9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUyB8fCAhSVA2X05GX0lQVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTA2MjpcdHNlbGVjdCBORl9EVVBfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjM6XHRzZWxlY3QgTkZfRFVQX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODk1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIER1cGxpY2F0aW9uIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgaG93IElQdjQgYW5kIElQdjYgcGFja2V0cyBnZXQgZHVwbGljYXRlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgZHVwbGljYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYC4gVGhhdCYjMzk7bGwgYmUgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzIHRvIGdldCB0aGUgaW5mb3JtYXRpb24gSSByZXF1aXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiAoQykgMjAwNyBieSBTZWJhc3RpYW4gQ2xhw59lbiBcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXHUwMDNlXG4gICA0Olx0ICogKEMpIDIwMDctMjAxMCBieSBKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcbiAgIDU6XHQgKlxuICAgNjpcdCAqIEV4dHJhY3RlZCBmcm9tIHh0X1RFRS5jXG4gICA3Olx0ICovXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yb3V0ZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9jaGVja3N1bS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2Zsb3cuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcdTAwM2VcbiAgMjA6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAgMjI6XHQjZW5kaWZcbiAgMjM6XHRcbiAgMjQ6XHRzdGF0aWMgYm9vbCBuZl9kdXBfaXB2NF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDI1Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuICAyNjpcdHtcbiAgMjc6XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XG4gIDI4Olx0XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiAgMjk6XHRcdHN0cnVjdCBmbG93aTQgZmw0O1xuICAzMDpcdFxuICAzMTpcdFx0bWVtc2V0KFx1MDAyNmZsNCwgMCwgc2l6ZW9mKGZsNCkpO1xuICAzMjpcdFx0aWYgKG9pZiAhPSAtMSlcbiAgMzM6XHRcdFx0Zmw0LmZsb3dpNF9vaWYgPSBvaWY7XG4gIDM0Olx0XG4gIDM1Olx0XHRmbDQuZGFkZHIgPSBndy1cdTAwM2VzX2FkZHI7XG4gIDM2Olx0XHRmbDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBoKTtcbiAgMzc6XHRcdGZsNC5mbG93aTRfc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRTtcbiAgMzg6XHRcdGZsNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xuICAzOTpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbiAgNDA6XHRcdGlmIChJU19FUlIocnQpKVxuICA0MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDQyOlx0XG4gIDQzOlx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiAgNDQ6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiAgNDU6XHRcdHNrYi1cdTAwM2VkZXYgICAgICA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4gIDQ2Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuICA1MjpcdFx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuICA1MzpcdHtcbiAgNTQ6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuICA1NTpcdFxuICA1NjpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuICA1NzpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuICA1ODpcdFx0XHRnb3RvIG91dDtcbiAgNTk6XHRcdC8qXG4gIDYwOlx0XHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxuICA2MTpcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcbiAgNjI6XHRcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXG4gIDYzOlx0XHQgKi9cbiAgNjQ6XHRcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuICA2NTpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuICA2NjpcdFx0XHRnb3RvIG91dDtcbiAgNjc6XHRcbiAgNjg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICA2OTpcdFx0LyogQXZvaWQgY291bnRpbmcgY2xvbmVkIHBhY2tldHMgdG93YXJkcyB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4gKi9cbiAgNzA6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDcxOlx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA3MjpcdCNlbmRpZlxuICA3MzpcdFx0LypcbiAgNzQ6XHRcdCAqIElmIHdlIGFyZSBpbiBQUkVST1VUSU5HL0lOUFVULCBkZWNyZWFzZSB0aGUgVFRMIHRvIG1pdGlnYXRlIHBvdGVudGlhbFxuICA3NTpcdFx0ICogbG9vcHMgYmV0d2VlbiB0d28gaG9zdHMuXG4gIDc2Olx0XHQgKlxuICA3NzpcdFx0ICogU2V0ICVJUF9ERiBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWxseVxuICA3ODpcdFx0ICogZGVjcmVhc2VkIE1UVSBvbiB0aGUgY2xvbmUgcm91dGUuIElQdjYgZG9lcyB0aGlzIHRvby5cbiAgNzk6XHRcdCAqXG4gIDgwOlx0XHQgKiBJUCBoZWFkZXIgY2hlY2tzdW0gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgaXBfbG9jYWxfb3V0LlxuICA4MTpcdFx0ICovXG4gIDgyOlx0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiAgODM6XHRcdGlwaC1cdTAwM2VmcmFnX29mZiB8PSBodG9ucyhJUF9ERik7XG4gIDg0Olx0XHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XG4gIDg1Olx0XHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKVxuICA4NjpcdFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gIDg3Olx0XG4gIDg4Olx0XHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4gIDg5Olx0XHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiAgOTA6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuICA5MTpcdFx0XHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDkyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDkzOlx0XHR9IGVsc2Uge1xuICA5NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTU6XHRcdH1cbiAgOTY6XHRvdXQ6XG4gIDk3Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgOTg6XHR9XG4gIDk5Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjQpO1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgRHVwbGljYXRlIFBhY2tldCBQcmV2ZW50aW9uIE1vZHVsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIEkmIzM5O20gZ3Vlc3Npbmcgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IGhvdyBkdXBsaWNhdGUgSVB2NiBwYWNrZXRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIGZvY3VzaW5nIG9uIHRoZSBsb2dpYyB0aGF0IHByZXZlbnRzIHJlZHVuZGFudCBwcm9jZXNzaW5nIG9yIHRyYW5zbWlzc2lvbiBvZiBwYWNrZXRzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhleSBpZGVudGlmeSBhbmQgZGlzY2FyZCB0aGVzZSBkdXBsaWNhdGVzIHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LCB3aGljaCBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIHNlcXVlbmNlIG51bWJlcnMsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHNwZWNpZmljIHRvIElQdjYmIzM5O3MgZGVzaWduLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGF0IGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyByZWxhdGVkIHRvIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgZGVkdXBsaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcbiAgIDQ6XHQgKiAoQykgMjAwNy0yMDEwIGJ5IEphbiBFbmdlbGhhcmR0IFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVx1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogRXh0cmFjdGVkIGZyb20geHRfVEVFLmNcbiAgIDc6XHQgKi9cbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFx1MDAzZVxuICAxNTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICAxNzpcdCNlbmRpZlxuICAxODpcdFxuICAxOTpcdHN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjA6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuICAyMTpcdHtcbiAgMjI6XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xuICAyMzpcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuICAyNDpcdFx0c3RydWN0IGZsb3dpNiBmbDY7XG4gIDI1Olx0XG4gIDI2Olx0XHRtZW1zZXQoXHUwMDI2Zmw2LCAwLCBzaXplb2YoZmw2KSk7XG4gIDI3Olx0XHRpZiAob2lmICE9IC0xKVxuICAyODpcdFx0XHRmbDYuZmxvd2k2X29pZiA9IG9pZjtcbiAgMjk6XHRcbiAgMzA6XHRcdGZsNi5kYWRkciA9ICpndztcbiAgMzE6XHRcdGZsNi5mbG93bGFiZWwgPSAoX19mb3JjZSBfX2JlMzIpKCgoaXBoLVx1MDAzZWZsb3dfbGJsWzBdIFx1MDAyNiAweEYpIFx1MDAzY1x1MDAzYyAxNikgfFxuICAzMjpcdFx0XHRcdChpcGgtXHUwMDNlZmxvd19sYmxbMV0gXHUwMDNjXHUwMDNjIDgpIHwgaXBoLVx1MDAzZWZsb3dfbGJsWzJdKTtcbiAgMzM6XHRcdGZsNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xuICAzNDpcdFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIFx1MDAyNmZsNik7XG4gIDM1Olx0XHRpZiAoZHN0LVx1MDAzZWVycm9yKSB7XG4gIDM2Olx0XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gIDM3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgMzg6XHRcdH1cbiAgMzk6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuICA0MDpcdFx0c2tiX2RzdF9zZXQoc2tiLCBkc3QpO1xuICA0MTpcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gZHN0X2Rldihkc3QpO1xuICA0MjpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gIDQzOlx0XG4gIDQ0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNDU6XHR9XG4gIDQ2Olx0XG4gIDQ3Olx0dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuICA0ODpcdFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiAgNDk6XHR7XG4gIDUwOlx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDUxOlx0XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gIDUyOlx0XHRcdGdvdG8gb3V0O1xuICA1MzpcdFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gIDU0Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gIDU1Olx0XHRcdGdvdG8gb3V0O1xuICA1NjpcdFxuICA1NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDU4Olx0XHRuZl9yZXNldF9jdChza2IpO1xuICA1OTpcdFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcbiAgNjA6XHQjZW5kaWZcbiAgNjE6XHRcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcbiAgNjI6XHRcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pIHtcbiAgNjM6XHRcdFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XG4gIDY0Olx0XHRcdC0taXBoLVx1MDAzZWhvcF9saW1pdDtcbiAgNjU6XHRcdH1cbiAgNjY6XHRcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbiAgNjc6XHRcdFx0c2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xuICA2ODpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDY5Olx0XHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDcwOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDcxOlx0XHR9IGVsc2Uge1xuICA3MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNzM6XHRcdH1cbiAgNzQ6XHRvdXQ6XG4gIDc1Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNzY6XHR9XG4gIDc3Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xuICA3ODpcdFxuICA3OTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7U2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVwmIzM0Oyk7XG4gIDgwOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTYzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYywgd2hpY2ggaXMgb2J2aW91c2x5IGltcG9ydGFudCBmb3IgdGhpbmdzIGxpa2UgbWlycm9yaW5nLCBsb2FkIGJhbGFuY2luZywgb3IgZXZlbiBqdXN0IGRlYnVnZ2luZyBuZXR3b3JrIHRyYWZmaWMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCwgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgd2l0aGluIHRob3NlIGNvbnRleHRzLCBhbmQgdGhlIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBhcmd1bWVudHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uIOKAkyB3aGF0IHNrYiBjb250ZXh0IGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gSG93IGFyZSB0aGUgSVAgaGVhZGVycyBtb2RpZmllZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY2FsbCBzaXRlcywgbWF5YmUgaWRlbnRpZnkgYW55IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MsIG9yIGp1c3QgZ2VuZXJhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZHVwbGljYXRlZCBwYWNrZXRzIHRocm91Z2ggdGhlIE5ldGZpbHRlciBzdGFjay4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGxhcmdlciBhc3BlY3Qgb2YgbmV0d29yayBjb25uZWN0aW9uIG1hbmFnZW1lbnQgb3IgdHJhZmZpYyBzaGFwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9kdXBfaXB2WzQ2XVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oLTctXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oOjg6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaC05LVx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oLTYtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oOjc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaC04LVx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZik7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MjQ9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6NTE6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTItXHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM6MzA6XHRuZl9kdXBfaXB2NChuZnRfbmV0KHBrdCksIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFx1MDAyNmd3LCBvaWYpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTMxLX1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYz0xOT1zdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzo0Nzp2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy00OC1cdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2Nl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMjctXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM6Mjg6XHRuZl9kdXBfaXB2NihuZnRfbmV0KHBrdCksIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIGd3LCBvaWYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jLTI5LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jPTM3PXRlZV90ZzQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDEtXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jOjQyOlx0bmZfZHVwX2lwdjQoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcdTAwMjZpbmZvLVx1MDAzZWd3LmluLCBvaWYpO1xubmV0L25ldGZpbHRlci94dF9URUUuYy00My1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jPTQ5PXRlZV90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTMtXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jOjU0Olx0bmZfZHVwX2lwdjYoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcdTAwMjZpbmZvLVx1MDAzZWd3LmluNiwgb2lmKTtcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9uZSBhdCB0aGF0LiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBlbmFibGluZyBmdXp6aW5nIGZvciBzb21ldGhpbmcgdGhhdCAqZGlyZWN0bHkqIG1vZGlmaWVzIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBsb2dpYy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgc2tfYnVmZmAsIGBuZl9kdXBfaXB2NGAsIGBuZl9kdXBfaXB2NmAsIGFuZCBgbmZfY29weWAuIFRoZXNlIGFyZSBjcml0aWNhbCBwaWVjZXM7IGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIHNvIGZ1enppbmcgaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYS4KCk15IHByaW1hcnkgZm9jdXMgcG9pbnRzIGhlcmUgYXJlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAsIGFzIHRob3NlIGFyZSBleHBsaWNpdGx5IGNhbGxlZCBvdXQuIFRoYXQgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBjb25jZW50cmF0ZSBpdHMgZWZmb3J0cywgb3IgYXQgbGVhc3Qgd2hlcmUgaW5pdGlhbCB0YXJnZXRzIHdpbGwgYmUuCgpOb3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgbW9kdWxlcyBlbmFibGVkLiBJIGtub3cgd2UmIzM5O2xsIG5lZWQgYE5GX0RVUF9JUFY0YCBhbmQgYE5GX0RVUF9JUFY2YC4gQnV0IGl0JiMzOTtzIGFsc28gd29ydGggY2hlY2tpbmcgd2hldGhlciBgbmZ0X2R1cGAsIGB4dF9URUVgLCBvciBiYXNpYyBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgYXJlIGVuYWJsZWQsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmZWF0dXJlcy4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhbHNvIGhhdmUgYE5FVEZJTFRFUmAsIGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYCwgYElORVRgLCBhbmQgYElQVjZgIGNvbmZpZ3VyZWQuIEJlc3QgcHJhY3RpY2UgaXMgdG8gY292ZXIgdGhlc2UgY29uZmlndXJhdGlvbnMgYW5kIGVuc3VyZSB0aGUgZmVhdHVyZSB3aWxsIHdvcmsgYXMgaW50ZW5kZWQgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuCgpOZXh0IHN0ZXA6IEnigJlsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYW5kIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyB0aGVzZSByZWx5IG9uIHRvIHdvcmsgY29ycmVjdGx5LCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIGlzIGVzc2VudGlhbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRFVQX0lQVls0Nl0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQyPWNvbmZpZyBORlRfUkVKRUNUX0lQVjRcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy00Ni1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjQ3OmNvbmZpZyBORlRfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBuZl90YWJsZXMgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0zOD1jb25maWcgTkZUX1JFSkVDVF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDItXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgTkZUX0RVUF9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O0lQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBjb25maWd1cmVkIGFyb3VuZCBsaW5lIDQ3LiBTb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZSwgYW5kIEkgc3VzcGVjdCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gY2hhc2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhhdCBzZWN0aW9uIGFuZCBqb2cgbXkgbWVtb3J5IG9mIHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGNvbnRleHQgYW5kIG1pZ2h0IHJlbWluZCBtZSBvZiBhIGNyaXRpY2FsIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRpZiBORl9UQUJMRVNfSVBWNFxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjRcbiAgNDM6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNFxuICA0NDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQ1Olx0XHR0cmlzdGF0ZVxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBORlRfRFVQX0lQVjRcbiAgNDg6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDUwOlx0XHRzZWxlY3QgTkZfRFVQX0lQVjRcbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5GVF9GSUJfSVBWNFxuICA1NTpcdFx0c2VsZWN0IE5GVF9GSUJcbiAgNTY6XHRcdHRyaXN0YXRlIFwmIzM0O25mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFwmIzM0O1xuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjQgRklCIGxvb2t1cHMsIGUuZy4gZm9yIHJldmVyc2UgcGF0aCBmaWx0ZXJpbmcuXG4gIDU5Olx0XHQgIEl0IGFsc28gYWxsb3dzIHF1ZXJ5IG9mIHRoZSBGSUIgZm9yIHRoZSByb3V0ZSB0eXBlLCBlLmcuIGxvY2FsLCB1bmljYXN0LFxuICA2MDpcdFx0ICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLlxuICA2MTpcdFxuICA2MjpcdGVuZGlmICMgTkZfVEFCTEVTX0lQVjRcbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgTkZfVEFCTEVTX0FSUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgSVB2NiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBhcm91bmQgbGluZSA0My4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBkZXBlbmRlbmN5LiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGxpa2VseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIGZlYXR1cmUmIzM5O3MgYXZhaWxhYmlsaXR5IGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLCBvciBJIG1pZ2h0IGJlIGRlYnVnZ2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIElQdjYgZmlsdGVyaW5nLiBQZXJoYXBzIEkgYW0gaW52ZXN0aWdhdGluZyBhIHJlY2VudCBwYXRjaCBhbmQgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBjb3JyZWN0bHkgbGlua2VkIHVwIHRvIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcbiAgMzY6XHRpZiBORl9UQUJMRVNfSVBWNlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjZcbiAgMzk6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNlxuICA0MDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQxOlx0XHR0cmlzdGF0ZVxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBORlRfRFVQX0lQVjZcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDQ2Olx0XHRzZWxlY3QgTkZfRFVQX0lQVjZcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIE5GVF9GSUJfSVBWNlxuICA1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7bmZfdGFibGVzIGZpYiAvIGlwdjYgcm91dGUgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgNTI6XHRcdHNlbGVjdCBORlRfRklCXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NiBGSUIgbG9va3VwcywgZS5nLiBmb3IgcmV2ZXJzZSBwYXRoIGZpbHRlcmluZy5cbiAgNTU6XHRcdCAgSXQgYWxzbyBhbGxvd3MgcXVlcnkgb2YgdGhlIEZJQiBmb3IgdGhlIHJvdXRlIHR5cGUsIGUuZy4gbG9jYWwsIHVuaWNhc3QsXG4gIDU2Olx0XHQgIG11bHRpY2FzdCBvciBibGFja2hvbGUuXG4gIDU3Olx0XG4gIDU4Olx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNlxuICA1OTpcdGVuZGlmICMgTkZfVEFCTEVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZm9yIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAqKgoKT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAgdGFyZ2V0IGluIG5ldGZpbHRlci4gQmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBzbyBsZXQgbWUgcHVsbCB1cCBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBuZWFyIHRoZSBlbmQgb2YgdGhlIG5ldGZpbHRlciB0YXJnZXQgZGVmaW5pdGlvbnMuIEkmIzM5O2xsIGp1bXAgdG8gYXJvdW5kIGxpbmUgMTA1NyBvciBzbyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGV5IGdyb3VwIHNpbWlsYXIgZmVhdHVyZXMuIEhvcGVmdWxseSwgdGhlIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyBhcmUgY2xlYXIgdGhlcmUuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGlzc3VlIG9yIGZ1cnRoZXIgY29udGV4dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVzdWFsOiB0aGUgZGVwZW5kZW5jeSB0cmVlLCBhbnkgZGVmYXVsdCBvcHRpb25zLCBhbmQgYSBjbGVhciBkZXNjcmlwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTU6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4xMDU2Olx0XG4xMDU3Olx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXG4xMDU4Olx0XHR0cmlzdGF0ZSAmIzM5O1wmIzM0O1RFRVwmIzM0OyAtIHBhY2tldCBjbG9uaW5nIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvbiYjMzk7XG4xMDU5Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuMTA2MDpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xuMTA2MTpcdFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xuMTA2MjpcdFx0c2VsZWN0IE5GX0RVUF9JUFY0XG4xMDYzOlx0XHRzZWxlY3QgTkZfRFVQX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTXG4xMDY0Olx0XHRoZWxwXG4xMDY1Olx0XHRUaGlzIG9wdGlvbiBhZGRzIGEgXCYjMzQ7VEVFXCYjMzQ7IHRhcmdldCB3aXRoIHdoaWNoIGEgcGFja2V0IGNhbiBiZSBjbG9uZWQgYW5kXG4xMDY2Olx0XHR0aGlzIGNsb25lIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgbmV4dGhvcC5cbjEwNjc6XHRcbjEwNjg6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFlcbjEwNjk6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7VFBST1hZXCYjMzQ7IHRhcmdldCB0cmFuc3BhcmVudCBwcm94eWluZyBzdXBwb3J0JiMzOTtcbjEwNzA6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbjEwNzE6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4xMDcyOlx0XHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUyB8fCBJUDZfTkZfSVBUQUJMRVM9blxuMTA3MzpcdFx0ZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgTkZUX0NPTVBBVFxuMTA3NDpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4xMDc1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTICE9IG5cbjEwNzY6XHRcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxuMTA3NzpcdFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xuMTA3ODpcdFx0aGVscFxuMTA3OTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEgYFRQUk9YWSYjMzk7IHRhcmdldCwgd2hpY2ggaXMgc29tZXdoYXQgc2ltaWxhciB0b1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzMwoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiA0MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBEdXBsaWNhdGlvbiBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHJlbGF0ZWQgdG8gSVBWNCBhbmQgSVBWNiBkdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAuIEkgc2VlIHRoYXQgYE5GX0RVUF9JUFY0YCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseSwgb3IgdGhyb3VnaCB0aGUgTmV0ZmlsdGVyIHRhYmxlIGV4dGVuc2lvbnMsIGBORlRfRFVQX0lQVjRgLCBvciBldmVuIHZpYSB0aGUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYCBvcHRpb24sIHdoaWNoIGltcGxpZXMgc29tZSBsZXZlbCBvZiBURUUgc3VwcG9ydCBpcyBiZWluZyBsZXZlcmFnZWQuIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gSVB2NiBhbmQgYE5GX0RVUF9JUFY2YCwgd2hpY2ggY2FuIGJlIGVuYWJsZWQgZGlyZWN0bHkgb3IgdmlhIGBORlRfRFVQX0lQVjZgIG9yIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBib3RoIGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAgaGF2ZSBhIHJhdGhlciByZWxheGVkIGRlcGVuZGVuY3kgb24gY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHRoYXQgdGhleSBjYW4gZXhpc3Qgd2l0aCAqb3IqIHdpdGhvdXQgaXQ6IGAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4KClRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBiZSBndWFyZGluZyB0aGUgYHNrYmAgZmllbGQgd2l0aCBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIGJhc2VkIG9uIHdoZXRoZXIgYE5GX0RVUF9JUFY0YCBvciBgTkZfRFVQX0lQVjZgIGFyZSBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgdG8gc3VtbWFyaXplIHRoZSByZWxldmFudCBjb25maWdzLCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyOiBgTkZfRFVQX0lQVjRgLCBgTkZfRFVQX0lQVjZgLCBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCB0aGUgY29tbW9uIGRlbm9taW5hdG9yIG9mIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXI6IGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHRvb2wmIzM5O3MgcGFyYW1ldGVycyBhbmQgcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGFsaWducy4gSSBzZWU6Ci0gYFdvcnRoRnV6emluZ2A6IFRydWUsIHdoaWNoIGlzIGV4cGVjdGVkLgotIGBGb2N1c1N5bWJvbHNgOiBDb25maXJtZWQuIFRoZXkgYXJlIHByZWNpc2VseSB3aGF0IEkgYW50aWNpcGF0ZWQuCi0gYEVuYWJsZUNvbmZpZ3NgOiBMb29rcyBzcG90IG9uOyBhbGwgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGxpc3RlZC4KLSBgUmVhc29uaW5nYDogU2VlbXMgY29uY2lzZS4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX1RFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2R1cF9pcHY0JiMzNDssCiAgICAmIzM0O25mX2R1cF9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgJiMzOTtuZl9kdXBsaWNhdGVkJiMzOTsgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZHVwX2lwdjQmIzM0OywKICAgICYjMzQ7bmZfZHVwX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAmIzM5O25mX2R1cGxpY2F0ZWQmIzM5OyBiaXQgaW4gc3RydWN0IHNrX2J1ZmYgdG8gdHJhY2sgY2xvbmVkIHBhY2tldHMgYWNyb3NzIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBob29rcyAoZS5nLiBuZnRfZHVwIGFuZCB4dF9URUUpLCBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzLiBUaGlzIGRpcmVjdGx5IGNoYW5nZXMgcGFja2V0IGNsb25pbmcgYW5kIHJvdXRpbmcgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyIElQdjQgYW5kIElQdjYgZHVwbGljYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgMS1iaXQgZmxhZyBgbmZfZHVwbGljYXRlZGAgdG8gYHN0cnVjdCBza19idWZmYCBhbmQgc2V0cy9jaGVja3MgaXQgaW4gYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCB0byBwcmV2ZW50IGluZmluaXRlIHBhY2tldCBkdXBsaWNhdGlvbiBsb29wcy5cblxuMS4gSW5pdGlhbGl6YXRpb246IEFsbCBgc2tfYnVmZmAgaW5zdGFuY2VzIGFyZSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uIHZpYSBgc2tidWZmX2NsZWFyKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5IGZyb20gdGhlIHN0YXJ0IG9mIGBzdHJ1Y3Qgc2tfYnVmZmAgdXAgdG8gYHRhaWxgKSwgZW5zdXJpbmcgYG5mX2R1cGxpY2F0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAuIEl0IGlzIHByb3Blcmx5IHByZXNlcnZlZCBpbiBgbmZfY29weSgpYCBhbmQgYF9fY29weV9za2JfaGVhZGVyKClgLlxuMi4gTm8gSW5mby1MZWFrczogYG5mX2R1cGxpY2F0ZWRgIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgZmxhZyB3aXRoaW4gYHN0cnVjdCBza19idWZmYCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzg5MjQzOThkMjRjODlmZmRjNWQwODZjY2Q4YTc0OGFiM2VkNzBhYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDA3OjAyOjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggNTUyMjcxNmRmOGZmZi4uZjVjN2I3YjFjZWRlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC04MTIsNiAmIzQzOzgxMiw3IEBAIGVudW0gc2tiX3RzdGFtcF90eXBlIHsKICAqCUByZWRpcmVjdGVkOiBwYWNrZXQgd2FzIHJlZGlyZWN0ZWQgYnkgcGFja2V0IGNsYXNzaWZpZXIKICAqCUBmcm9tX2luZ3Jlc3M6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBmcm9tIHRoZSBpbmdyZXNzIHBhdGgKICAqCUBuZl9za2lwX2VncmVzczogcGFja2V0IHNoYWxsIHNraXAgbmYgZWdyZXNzIC0gc2VlIG5ldGZpbHRlcl9uZXRkZXYuaAomIzQzOyAqCUBuZl9kdXBsaWNhdGVkOiBwYWNrZXQgd2FzIGdlbmVyYXRlZCBieSBhIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBhY3Rpb24KICAqCUBwZWVrZWQ6IHRoaXMgcGFja2V0IGhhcyBiZWVuIHNlZW4gYWxyZWFkeSwgc28gc3RhdHMgaGF2ZSBiZWVuCiAgKgkJZG9uZSBmb3IgaXQsIGRvbiYjMzk7dCBkbyB0aGVtIGFnYWluCiAgKglAbmZfdHJhY2U6IG5ldGZpbHRlciBwYWNrZXQgdHJhY2UgZmxhZwpAQCAtMTAyMyw2ICYjNDM7MTAyNCw5IEBAIHN0cnVjdCBza19idWZmIHsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1NLSVBfRUdSRVNTCiAJX191OAkJCW5mX3NraXBfZWdyZXNzOjE7CiAjZW5kaWYKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KQomIzQzOwlfX3U4CQkJbmZfZHVwbGljYXRlZDoxOwomIzQzOyNlbmRpZgogI2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVECiAJX191OAkJCWRlY3J5cHRlZDoxOwogI2VuZGlmCkBAIC01MjAwLDYgJiM0Mzs1MjA0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG5mX2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYykKIAluZl9jb25udHJhY2tfcHV0KHNrYl9uZmN0KGRzdCkpOwogI2VuZGlmCiAJZHN0LSZndDtzbG93X2dybyA9IHNyYy0mZ3Q7c2xvd19ncm87CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNikKJiM0MzsJZHN0LSZndDtuZl9kdXBsaWNhdGVkID0gc3JjLSZndDtuZl9kdXBsaWNhdGVkOwomIzQzOyNlbmRpZgogCV9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKaW5kZXggOWE3NzM1MDJmMTBhYy4uOGZlMzFhMGRiMDYzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKQEAgLTU0LDcgJiM0Mzs1NCw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlKQomIzQzOwlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlIHx8IHNrYi0mZ3Q7bmZfZHVwbGljYXRlZCkKIAkJZ290byBvdXQ7CiAJLyoKIAkgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvcgpAQCAtODYsNiAmIzQzOzg2LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQktLWlwaC0mZ3Q7dHRsOwogCiAJaWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkgewomIzQzOwkJc2tiLSZndDtuZl9kdXBsaWNhdGVkID0gMTsKIAkJY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlID0gdHJ1ZTsKIAkJaXBfbG9jYWxfb3V0KG5ldCwgc2tiLSZndDtzaywgc2tiKTsKIAkJY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlID0gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jCmluZGV4IDZkYTMxMDJiN2MxYjMuLmUwZmRiNDNkN2QzZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jCkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKQogewogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlKQomIzQzOwlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlIHx8IHNrYi0mZ3Q7bmZfZHVwbGljYXRlZCkKIAkJZ290byBvdXQ7CiAJc2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQpAQCAtNjQsNiAmIzQzOzY0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQktLWlwaC0mZ3Q7aG9wX2xpbWl0OwogCX0KIAlpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7CiYjNDM7CQlza2ItJmd0O25mX2R1cGxpY2F0ZWQgPSAxOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSB0cnVlOwogCQlpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLSZndDtzaywgc2tiKTsKIAkJY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOIGNvbmNlcm5zIHdpdGggdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB3ZSYjMzk7cmUgYWRkaW5nIHRoZSBgbmZfZHVwbGljYXRlZDoxYCBiaXRmaWVsZCB0byB0aGUgYHN0cnVjdCBza19idWZmYCBhbmQgdGhlbiBjb3B5aW5nIGl0cyB2YWx1ZSBpbiBgbmZfY29weWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGggdGhpcz8KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBza19idWZmYCBpcyAqYWN0dWFsbHkqIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgdGhlIGtleS4gQXJlIHdlIHVzaW5nIGBrbWVtX2NhY2hlYCwgYXJlIHdlIHJlbHlpbmcgb24gYG1lbXNldGAgYXQgYW55IHBvaW50LCBvciBpcyB0aGVyZSBhbm90aGVyIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbSBhdCBwbGF5PyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGJpdGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgYWxsb2NhdGlvbi4KClRvIGRvIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBodW50IGRvd24gdGhlIGFsbG9jYXRvcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgX19hbGxvY19za2JgLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGFsbG9jYXRpb24gcGF0aHMgb3IgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFsbG9jYXRpb24gY29kZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemluZyB0aGlzIG5ldyBiaXRmaWVsZCwgb3IgaWYgaXQgbWlnaHQgYmUgbGVmdCBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLiBXZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgbWV0aG9kcywgc3VjaCBhcyBga21lbV9jYWNoZWAgYW5kIGBtZW1zZXRgLgoKSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSBjb21iIHRocm91Z2ggdGhlIGNvZGUuIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIGBzdHJ1Y3Qgc2tfYnVmZmAsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBsYWNlIHdoZXJlIHdlIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIEtNU0FOIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NTctLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcdF9fYWxsb2Nfc2tiXHQtXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXG5uZXQvY29yZS9za2J1ZmYuYy02NTktICpcdEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjczLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njc0OnN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzQ1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTc0Ny1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTc3Ni1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Nzc3Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlgsIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9za2J1ZmYuYy03NzgtXHRcdGlmICghc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTg1NC1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6ODU1Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlggfCBTS0JfQUxMT0NfTkFQSSxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1Ni1cdFx0XHRcdCAgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMTgwPXN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMTkzLVx0c2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWRhdGFfbGVuO1xubmV0L2NvcmUvc2tidWZmLmM6MjE5NDpcdG4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzayxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTUtXHRcdFx0c2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSwgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI4PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzItXHRpbnQgZmxhZ3MgPSBza2JfYWxsb2NfcnhfZmxhZyhza2IpIHwgKGZjbG9uZSA/IFNLQl9BTExPQ19GQ0xPTkUgOiAwKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMzM6XHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjUwNT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUyMi1cdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYzoyNTIzOlx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgbmV3dGFpbHJvb20sXG5uZXQvY29yZS9za2J1ZmYuYy0yNTI0LVx0XHRcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00OTU4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk1OTpcdFx0XHRuc2tiID0gX19hbGxvY19za2IoaHNpemUgJiM0MzsgZG9mZnNldCAmIzQzOyBoZWFkcm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjAtXHRcdFx0XHRcdCAgIEdGUF9BVE9NSUMsIHNrYl9hbGxvY19yeF9mbGFnKGhlYWRfc2tiKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU0tCIEFsbG9jYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIHNvY2tldCBidWZmZXJzIGFyZSBhY3R1YWxseSBhbGxvY2F0ZWQuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYF9fYWxsb2Nfc2tiYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIHdhbnQgdG8gc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSBzZXR1cC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscyB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCwgbWF5YmUgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHNsYWIgYWxsb2NhdG9yIG9yIHNwZWNpZmljIE5VTUEgY29uc2lkZXJhdGlvbnMuIFRoZW4sIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBgc2tfYnVmZmAgZGVmaW5pdGlvbiBpdHNlbGYsIGZvdW5kIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHRpZSB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIHRvIHRoZSBidWZmZXIgc3RydWN0dXJlIGl0c2VsZiDigJMgd2hhdCBhcmUgdGhlIGNvcmUgZmllbGRzIHRoYXQgYXJlIGluaXRpYWxpemVkLCB3aGF0JiMzOTtzIHRoZSBtZW1vcnkgbGF5b3V0LCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgbWFwIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIHRoZSBzdHJ1Y3R1cmU/IEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIOKAkyB0aGUgbWVjaGFuaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGNvbWJpbmVkIHdpdGggdGhlIHN0cnVjdHVyZSYjMzk7cyBkZXNpZ24g4oCTIHRvIHBpbnBvaW50IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gbmV0d29yayBwZXJmb3JtYW5jZSBvciBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHJlbGF0ZWQgdG8gU0tCcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0ICpcbiA2NzE6XHQgKlx0QnVmZmVycyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgZnJvbSBpbnRlcnJ1cHRzIHVzaW5nIGEgQGdmcF9tYXNrIG9mXG4gNjcyOlx0ICpcdCVHRlBfQVRPTUlDLlxuIDY3MzpcdCAqL1xuIDY3NDpcdHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gNjc1Olx0XHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4gNjc2Olx0e1xuIDY3NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gNjc4Olx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGU7XG4gNjc5Olx0XHR1OCAqZGF0YTtcbiA2ODA6XHRcbiA2ODE6XHRcdGlmIChza19tZW1hbGxvY19zb2NrcygpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IFNLQl9BTExPQ19SWCkpXG4gNjgyOlx0XHRcdGdmcF9tYXNrIHw9IF9fR0ZQX01FTUFMTE9DO1xuIDY4MzpcdFxuIDY4NDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfRkNMT05FKSB7XG4gNjg1Olx0XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcbiA2ODY6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2ODc6XHRcdH1cbiA2ODg6XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlO1xuIDY4OTpcdFx0aWYgKHVubGlrZWx5KG5vZGUgIT0gTlVNQV9OT19OT0RFIFx1MDAyNlx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxuIDY5MDpcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDY5MTpcdFxuIDY5MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfTkFQSSkge1xuIDY5MzpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQodHJ1ZSk7XG4gNjk0Olx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA2OTU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2OTY6XHRcdH0gZWxzZSBpZiAoIWluX2hhcmRpcnEoKSBcdTAwMjZcdTAwMjYgIWlycXNfZGlzYWJsZWQoKSkge1xuIDY5NzpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNjk4Olx0XHRcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XG4gNjk5Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIDcwMDpcdFx0fVxuIDcwMTpcdFxuIDcwMjpcdFx0aWYgKCFza2IpIHtcbiA3MDM6XHRmYWxsYmFjazpcbiA3MDQ6XHRcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcdTAwMjYgfkdGUF9ETUEsIG5vZGUpO1xuIDcwNTpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNzA2Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XHRza2J1ZmZfY2xlYXIoc2tiKTtcbiA3MDk6XHRcbiA3MTA6XHRcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXG4gNzExOlx0XHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFx1MDAzZSBTTVBfQ0FDSEVfQllURVMpIGdpdmVzXG4gNzEyOlx0XHQgKiBhbGlnbmVkIG1lbW9yeSBibG9ja3MsIHVubGVzcyBTTFVCL1NMQUIgZGVidWcgaXMgZW5hYmxlZC5cbiA3MTM6XHRcdCAqIEJvdGggc2tiLVx1MDAzZWhlYWQgYW5kIHNrYl9zaGFyZWRfaW5mbyBhcmUgY2FjaGUgbGluZSBhbGlnbmVkLlxuIDcxNDpcdFx0ICovXG4gNzE1Olx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xuIDcxNjpcdFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcbiA3MTc6XHRcdFx0Z290byBub2RhdGE7XG4gNzE4Olx0XHQvKiBrbWFsbG9jX3NpemVfcm91bmR1cCgpIG1pZ2h0IGdpdmUgdXMgbW9yZSByb29tIHRoYW4gcmVxdWVzdGVkLlxuIDcxOTpcdFx0ICogUHV0IHNrYl9zaGFyZWRfaW5mbyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIHpvbmUsXG4gNzIwOlx0XHQgKiB0byBhbGxvdyBtYXggcG9zc2libGUgZmlsbGluZyBiZWZvcmUgcmVhbGxvY2F0aW9uLlxuIDcyMTpcdFx0ICovXG4gNzIyOlx0XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbiA3MjM6XHRcbiA3MjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xuIDcyNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZl9mY2xvbmVzICpmY2xvbmVzO1xuIDcyNjpcdFxuIDcyNzpcdFx0XHRmY2xvbmVzID0gY29udGFpbmVyX29mKHNrYiwgc3RydWN0IHNrX2J1ZmZfZmNsb25lcywgc2tiMSk7XG4gNzI4Olx0XG4gNzI5Olx0XHRcdC8qIHNrYi1cdTAwM2VmY2xvbmUgaXMgYSAyYml0cyBmaWVsZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBza2J1ZmZfY2xlYXJgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIHByb2JsZW0gbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBTS0JzIChTb2NrZXQgQnVmZmVycyksIGFuZCBgc2tidWZmX2NsZWFyYCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZS4uLkkgdGhpbmsgSSByZW1lbWJlciBpdCBiZWluZyBkZWZpbmVkIGVpdGhlciBpbiB0aGUgbWFpbiBgc2tidWZmLmhgIGhlYWRlciBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGZvdW5kIHVuZGVyIGBpbmNsdWRlL2xpbnV4YCwgb3IgcGVyaGFwcyBpbiB0aGUgY29yZSBuZXR3b3JrIGNvZGUsIGxpa2VseSB1bmRlciBgbmV0L2NvcmVgIHdpdGhpbiBgc2tidWZmLmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgZGVjbGFyZWQgKmFuZCogZGVmaW5lZCBpbiBvbmUgb2YgdGhvc2UgdHdvIGxvY2F0aW9ucy4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGUgc291cmNlIGZpbGUuIExldCBtZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiBpdHMgdXNhZ2UgYWxzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmZfY2xlYXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkZpbmRpbmcgYHNrYnVmZl9jbGVhcmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGZ1bmN0aW9uIGBza2J1ZmZfY2xlYXJgLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIGEgcHJldHR5IGZ1bmRhbWVudGFsIG9wZXJhdGlvbiByZWxhdGVkIHRvIGBza19idWZmc2AsIHNvIGl0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gbG9jYXRlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29yZSBuZXR3b3JraW5nIGhlYWRlcnMsIHByb2JhYmx5IHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIGBza2J1ZmYuaGAgb3IsIHBvdGVudGlhbGx5LCBsb3dlci1sZXZlbCBidWZmZXIgbWFuYWdlbWVudC4gSSBrbm93IGtlcm5lbCBkb2N1bWVudGF0aW9uLCB3aGlsZSBub3QgYWx3YXlzIGV4aGF1c3RpdmUsIG9mdGVuIGluY2x1ZGVzIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucywgc28gSSYjMzk7bGwgYWxzbyBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaWYgSSBoYXZlIHF1aWNrIGFjY2VzcyB0byBpdCAoZS5nLiB0aHJvdWdoIGEgYnVpbHQgaW4gaGVscCBzeXN0ZW0pLiBJZiBJJiMzOTttIGx1Y2t5LCBJIG1pZ2h0IGV2ZW4gYmUgYWJsZSB0byBncmVwIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBkaXJlY3RseS4gS25vd2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgbmFtZSBjYW4gb2Z0ZW4gZ3VpZGUgbWUgcHJldHR5IGVmZmljaWVudGx5LCBlc3BlY2lhbGx5IGlmIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIGNvbnNpc3RlbnQsIHdoaWNoIGlzIHR5cGljYWwgaW4ga2VybmVsIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJZiBpdCYjMzk7cyB1c2VkIGluIGFueSBvYnZpb3VzIHBsYWNlcywgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgc2hvdWxkIHRlbGwgbWUgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYnVmZl9jbGVhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVx0XHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzozODA6XHRcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcdTAwMjZzaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk5Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NTktXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XHRza2J1ZmZfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2MS1cdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVx0fVxubmV0L2NvcmUvc2tidWZmLmM6NzA4Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBza2J1ZmZfY2xlYXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIHRoZSBgbmV0L2NvcmUvc2tidWZmLmNgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGBza2J1ZmZfY2xlYXJgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGUgc29ja2V0IGJ1ZmZlciBpcyBjbGVhbmVkIHVwLiBXZeKAmXJlIGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiBoZXJlLCBhbmQgSSBuZWVkIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIHBhY2tldCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gY292ZXIgdGhlIGtleSBhc3BlY3RzOiBmcmVlaW5nIHRoZSBkYXRhLCBwb3RlbnRpYWxseSByZWxlYXNpbmcgcmVmZXJlbmNlcywgYW5kIHBlcmhhcHMgc29tZSB6ZXJvaW5nIG9yIHNjcnViYmluZyBvZiBzZW5zaXRpdmUgYXJlYXMsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYXMgaXQgc2l0cyBpbiB0aGUgYnJvYWRlciBlY29zeXN0ZW0gdG8gZ2FpbiBhIGZ1bGwgcGVyc3BlY3RpdmUuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBlZGdlIGNhc2VzIG9yIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMDpcdFxuIDMxMTpcdC8qXG4gMzEyOlx0ICogT25seSBjbGVhciB0aG9zZSBmaWVsZHMgd2UgbmVlZCB0byBjbGVhciwgbm90IHRob3NlIHRoYXQgd2Ugd2lsbFxuIDMxMzpcdCAqIGFjdHVhbGx5IGluaXRpYWxpc2UgbGF0ZXIuIEhlbmNlLCBkb24mIzM5O3QgcHV0IGFueSBtb3JlIGZpZWxkcyBhZnRlclxuIDMxNDpcdCAqIHRoZSB0YWlsIHBvaW50ZXIgaW4gc3RydWN0IHNrX2J1ZmYhXG4gMzE1Olx0ICovXG4gMzE2Olx0c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMxNzpcdHtcbiAzMTg6XHRcdC8qIFJlcGxhY2UgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKVxuIDMxOTpcdFx0ICogd2l0aCB0d28gc21hbGxlciBtZW1zZXQoKSwgd2l0aCBhIGJhcnJpZXIoKSBiZXR3ZWVuIHRoZW0uXG4gMzIwOlx0XHQgKiBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gaW5saW5lIGJvdGggY2FsbHMuXG4gMzIxOlx0XHQgKi9cbiAzMjI6XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgXHUwMDNjPSAxMjgpO1xuIDMyMzpcdFx0bWVtc2V0KHNrYiwgMCwgMTI4KTtcbiAzMjQ6XHRcdGJhcnJpZXIoKTtcbiAzMjU6XHRcdG1lbXNldCgodm9pZCAqKXNrYiAmIzQzOyAxMjgsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSAtIDEyOCk7XG4gMzI2Olx0fVxuIDMyNzpcdFxuIDMyODpcdC8qKlxuIDMyOTpcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcbiAzMzA6XHQgKiBAc2ticzogcG9pbnRlciB0byBhbiBhdCBsZWFzdCBAbi1zaXplZCBhcnJheSB0byBmaWxsIHdpdGggc2tiIHBvaW50ZXJzXG4gMzMxOlx0ICogQG46IG51bWJlciBvZiBlbnRyaWVzIHRvIHByb3ZpZGVcbiAzMzI6XHQgKlxuIDMzMzpcdCAqIFRyaWVzIHRvIG9idGFpbiBAbiBcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xuIDMzNDpcdCAqIHRoZSBwb2ludGVycyBpbnRvIHRoZSBwcm92aWRlZCBhcnJheSBAc2ticy4gSWYgdGhlcmUgYXJlIGxlc3MgZW50cmllc1xuIDMzNTpcdCAqIGF2YWlsYWJsZSwgdHJpZXMgdG8gcmVwbGVuaXNoIHRoZSBjYWNoZSBhbmQgYnVsay1hbGxvY2F0ZXMgdGhlIGRpZmYgZnJvbVxuIDMzNjpcdCAqIHRoZSBNTSBsYXllciBpZiBuZWVkZWQuXG4gMzM3Olx0ICogVGhlIGhlYWRzIGFyZSBiZWluZyB6ZXJvZWQgd2l0aCBlaXRoZXIgbWVtc2V0KCkgb3IgJV9fR0ZQX1pFUk8sIHNvIHRoZXkgYXJlXG4gMzM4Olx0ICogcmVhZHkgZm9yIHssX199YnVpbGRfc2tiX2Fyb3VuZCgpIGFuZCBkb24mIzM5O3QgaGF2ZSBhbnkgZGF0YSBidWZmZXJzIGF0dGFjaGVkLlxuIDMzOTpcdCAqIE11c3QgYmUgY2FsbGVkICpvbmx5KiBmcm9tIHRoZSBCSCBjb250ZXh0LlxuIDM0MDpcdCAqXG4gMzQxOlx0ICogUmV0dXJuOiBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBza2JzIChAbiBpZiBubyBhY3R1YWwgYWxsb2NhdGlvblxuIDM0MjpcdCAqXHQgICBuZWVkZWQgb3Iga21lbV9jYWNoZV9hbGxvY19idWxrKCkgZGlkbiYjMzk7dCBmYWlsKS5cbiAzNDM6XHQgKi9cbiAzNDQ6XHR1MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBza19idWZmIFN0cnVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGxheW91dCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGBuZl9kdXBsaWNhdGVkYCBmaWVsZCBpbiByZWxhdGlvbiB0byB0aGUgYHRhaWxgIHBvaW50ZXIuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgcmVsZXZhbnQgcmVhc29uIHJlbGF0ZWQgdG8gdGhlIHVzZXImIzM5O3MgZmllbGQsIGUuZy4sIG9wdGltaXppbmcgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljLCBkZWJ1Z2dpbmcgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgYW5hbHl6aW5nIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgZXRjLioqXS4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG9wZW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxMDIzLiBIb3BlZnVsbHksIHRoZSByZWxldmFudCBmaWVsZHMgYXJlIGRlZmluZWQgbmVhcmJ5LCBhbmQgSSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIG9mZnNldC4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyB3aWxsIFsqKmluc2VydCBleHBlY3RhdGlvbiByZWxhdGVkIHRvIHRoZSB1c2VyJiMzOTtzIGZpZWxkLCBlLmcuLCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCByZXZlYWwgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCB1bmNvdmVyIGEgc3VidGxlIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWUsIGV0Yy4qKl0uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxMDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9WUylcbjEwMTE6XHRcdF9fdThcdFx0XHRpcHZzX3Byb3BlcnR5OjE7XG4xMDEyOlx0I2VuZGlmXG4xMDEzOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFUylcbjEwMTQ6XHRcdF9fdThcdFx0XHRuZl90cmFjZToxO1xuMTAxNTpcdCNlbmRpZlxuMTAxNjpcdCNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxuMTAxNzpcdFx0X191OFx0XHRcdG9mZmxvYWRfZndkX21hcms6MTtcbjEwMTg6XHRcdF9fdThcdFx0XHRvZmZsb2FkX2wzX2Z3ZF9tYXJrOjE7XG4xMDE5Olx0I2VuZGlmXG4xMDIwOlx0XHRfX3U4XHRcdFx0cmVkaXJlY3RlZDoxO1xuMTAyMTpcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG4xMDIyOlx0XHRfX3U4XHRcdFx0ZnJvbV9pbmdyZXNzOjE7XG4xMDIzOlx0I2VuZGlmXG4xMDI0Olx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcbjEwMjU6XHRcdF9fdThcdFx0XHRuZl9za2lwX2VncmVzczoxO1xuMTAyNjpcdCNlbmRpZlxuMTAyNzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNCkgfHwgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjYpXG4xMDI4Olx0XHRfX3U4XHRcdFx0bmZfZHVwbGljYXRlZDoxO1xuMTAyOTpcdCNlbmRpZlxuMTAzMDpcdCNpZmRlZiBDT05GSUdfU0tCX0RFQ1JZUFRFRFxuMTAzMTpcdFx0X191OFx0XHRcdGRlY3J5cHRlZDoxO1xuMTAzMjpcdCNlbmRpZlxuMTAzMzpcdFx0X191OFx0XHRcdHNsb3dfZ3JvOjE7XG4xMDM0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1NDVFApXG4xMDM1Olx0XHRfX3U4XHRcdFx0Y3N1bV9ub3RfaW5ldDoxO1xuMTAzNjpcdCNlbmRpZlxuMTAzNzpcdFx0X191OFx0XHRcdHVucmVhZGFibGU6MTtcbjEwMzg6XHRcdF9fdThcdFx0XHR0Y19kZXB0aDoyO1xuMTAzOTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX05FVF9YR1JFU1MpXG4xMDQwOlx0XHRfX3UxNlx0XHRcdHRjX2luZGV4O1x0LyogdHJhZmZpYyBjb250cm9sIGluZGV4ICovXG4xMDQxOlx0I2VuZGlmXG4xMDQyOlx0XG4xMDQzOlx0XHR1MTZcdFx0XHRhbGxvY19jcHU7XG4xMDQ0Olx0XG4xMDQ1Olx0XHR1bmlvbiB7XG4xMDQ2Olx0XHRcdF9fd3N1bVx0XHRjc3VtO1xuMTA0NzpcdFx0XHRzdHJ1Y3Qge1xuMTA0ODpcdFx0XHRcdF9fdTE2XHRjc3VtX3N0YXJ0O1xuMTA0OTpcdFx0XHRcdF9fdTE2XHRjc3VtX29mZnNldDtcbjEwNTA6XHRcdFx0fTtcbjEwNTE6XHRcdH07XG4xMDUyOlx0XHRfX3UzMlx0XHRcdHByaW9yaXR5O1xuMTA1MzpcdFx0aW50XHRcdFx0c2tiX2lpZjtcbjEwNTQ6XHRcdF9fdTMyXHRcdFx0aGFzaDtcbjEwNTU6XHRcdHVuaW9uIHtcbjEwNTY6XHRcdFx0dTMyXHRcdHZsYW5fYWxsO1xuMTA1NzpcdFx0XHRzdHJ1Y3Qge1xuMTA1ODpcdFx0XHRcdF9fYmUxNlx0dmxhbl9wcm90bztcbjEwNTk6XHRcdFx0XHRfX3UxNlx0dmxhbl90Y2k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlIGlzIGFuIGV4cGVydDoKCioqRmluZGluZyB0aGUgVGFpbCBpbiB0aGUgc2tfYnVmZiBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGB0YWlsYCBtZW1iZXIgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIGhhbmRsZXMgcGFja2V0IGRhdGEuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgaXQmIzM5O3MgKnRoZXJlKiwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCBpdHMgZXhhY3QgbG9jYXRpb24gYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYHNrX2J1ZmZgIHNob3VsZCByZXNpZGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdFx0fTtcbjEwNjE6XHRcdH07XG4xMDYyOlx0I2lmIGRlZmluZWQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpIHx8IGRlZmluZWQoQ09ORklHX1hQUylcbjEwNjM6XHRcdHVuaW9uIHtcbjEwNjQ6XHRcdFx0dW5zaWduZWQgaW50XHRuYXBpX2lkO1xuMTA2NTpcdFx0XHR1bnNpZ25lZCBpbnRcdHNlbmRlcl9jcHU7XG4xMDY2Olx0XHR9O1xuMTA2NzpcdCNlbmRpZlxuMTA2ODpcdCNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLXG4xMDY5Olx0XHRfX3UzMlx0XHRzZWNtYXJrO1xuMTA3MDpcdCNlbmRpZlxuMTA3MTpcdFxuMTA3MjpcdFx0dW5pb24ge1xuMTA3MzpcdFx0XHRfX3UzMlx0XHRtYXJrO1xuMTA3NDpcdFx0XHRfX3UzMlx0XHRyZXNlcnZlZF90YWlscm9vbTtcbjEwNzU6XHRcdH07XG4xMDc2Olx0XG4xMDc3Olx0XHR1bmlvbiB7XG4xMDc4Olx0XHRcdF9fYmUxNlx0XHRpbm5lcl9wcm90b2NvbDtcbjEwNzk6XHRcdFx0X191OFx0XHRpbm5lcl9pcHByb3RvO1xuMTA4MDpcdFx0fTtcbjEwODE6XHRcbjEwODI6XHRcdF9fdTE2XHRcdFx0aW5uZXJfdHJhbnNwb3J0X2hlYWRlcjtcbjEwODM6XHRcdF9fdTE2XHRcdFx0aW5uZXJfbmV0d29ya19oZWFkZXI7XG4xMDg0Olx0XHRfX3UxNlx0XHRcdGlubmVyX21hY19oZWFkZXI7XG4xMDg1Olx0XG4xMDg2Olx0XHRfX2JlMTZcdFx0XHRwcm90b2NvbDtcbjEwODc6XHRcdF9fdTE2XHRcdFx0dHJhbnNwb3J0X2hlYWRlcjtcbjEwODg6XHRcdF9fdTE2XHRcdFx0bmV0d29ya19oZWFkZXI7XG4xMDg5Olx0XHRfX3UxNlx0XHRcdG1hY19oZWFkZXI7XG4xMDkwOlx0XG4xMDkxOlx0XHRzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfaGFuZGxlO1xuMTA5MjpcdFxuMTA5MzpcdFx0KTsgLyogZW5kIGhlYWRlcnMgZ3JvdXAgKi9cbjEwOTQ6XHRcbjEwOTU6XHRcdC8qIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgYXQgdGhlIGVuZCwgc2VlIGFsbG9jX3NrYigpIGZvciBkZXRhaWxzLiAgKi9cbjEwOTY6XHRcdHNrX2J1ZmZfZGF0YV90XHRcdHRhaWw7XG4xMDk3Olx0XHRza19idWZmX2RhdGFfdFx0XHRlbmQ7XG4xMDk4Olx0XHR1bnNpZ25lZCBjaGFyXHRcdCpoZWFkLFxuMTA5OTpcdFx0XHRcdFx0KmRhdGE7XG4xMTAwOlx0XHR1bnNpZ25lZCBpbnRcdFx0dHJ1ZXNpemU7XG4xMTAxOlx0XHRyZWZjb3VudF90XHRcdHVzZXJzO1xuMTEwMjpcdFxuMTEwMzpcdCNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcbjExMDQ6XHRcdC8qIG9ubHkgdXNhYmxlIGFmdGVyIGNoZWNraW5nIC1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyAhPSAwICovXG4xMTA1Olx0XHRzdHJ1Y3Qgc2tiX2V4dFx0XHQqZXh0ZW5zaW9ucztcbjExMDY6XHQjZW5kaWZcbjExMDc6XHR9O1xuMTEwODpcdFxuMTEwOTpcdC8qIGlmIHlvdSBtb3ZlIHBrdF90eXBlIGFyb3VuZCB5b3UgYWxzbyBtdXN0IGFkYXB0IHRob3NlIGNvbnN0YW50cyAqL1xuMTExMDpcdCNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcbjExMTE6XHQjZGVmaW5lIFBLVF9UWVBFX01BWFx0KDcgXHUwMDNjXHUwMDNjIDUpXG4xMTEyOlx0I2Vsc2VcbjExMTM6XHQjZGVmaW5lIFBLVF9UWVBFX01BWFx0N1xuMTExNDpcdCNlbmRpZlxuMTExNTpcdCNkZWZpbmUgUEtUX1RZUEVfT0ZGU0VUXHRcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX3BrdF90eXBlX29mZnNldClcbjExMTY6XHRcbjExMTc6XHQvKiBpZiB5b3UgbW92ZSB0Y19hdF9pbmdyZXNzIG9yIHRzdGFtcF90eXBlXG4xMTE4Olx0ICogYXJvdW5kLCB5b3UgYWxzbyBtdXN0IGFkYXB0IHRoZXNlIGNvbnN0YW50cy5cbjExMTk6XHQgKi9cbjExMjA6XHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG4xMTIxOlx0I2RlZmluZSBTS0JfVFNUQU1QX1RZUEVfTUFTS1x0XHQoMyBcdTAwM2NcdTAwM2MgNilcbjExMjI6XHQjZGVmaW5lIFNLQl9UU1RBTVBfVFlQRV9SU0hJRlRcdFx0KDYpXG4xMTIzOlx0I2RlZmluZSBUQ19BVF9JTkdSRVNTX01BU0tcdFx0KDEgXHUwMDNjXHUwMDNjIDUpXG4xMTI0Olx0I2Vsc2VcbjExMjU6XHQjZGVmaW5lIFNLQl9UU1RBTVBfVFlQRV9NQVNLXHRcdCgzKVxuMTEyNjpcdCNkZWZpbmUgVENfQVRfSU5HUkVTU19NQVNLXHRcdCgxIFx1MDAzY1x1MDAzYyAyKVxuMTEyNzpcdCNlbmRpZlxuMTEyODpcdCNkZWZpbmUgU0tCX0JGX01PTk9fVENfT0ZGU0VUXHRcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX21vbm9fdGNfb2Zmc2V0KVxuMTEyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgc2tiIEhlYWRlciBDb3B5aW5nIGFuZCBuZl9kdXBsaWNhdGVkKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbmZfZHVwbGljYXRlZGAgYmVoYXZlcyB3aXRoaW4gYHN0cnVjdCBza19idWZmYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBzaW5jZSBgbmZfZHVwbGljYXRlZGAgaXMgcG9zaXRpb25lZCBiZWZvcmUgYHRhaWxgIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0LCBpdHMgaW5pdGlhbCB2YWx1ZSBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8gd2hlbmV2ZXIgYW4gU0tCIGlzIGFsbG9jYXRlZC4gVGhpcyBpcyBiZWNhdXNlIGBza2J1ZmZfY2xlYXIoc2tiKWAgZWZmZWN0aXZlbHkgemVyb2VzIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGB0YWlsYCBvZmZzZXQgZHVyaW5nIGFsbG9jYXRpb24uCgpOb3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIGhvdyBgbmZfZHVwbGljYXRlZGAgaXMgaGFuZGxlZCBkdXJpbmcgU0tCIGhlYWRlciBjb3B5aW5nLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYF9fY29weV9za2JfaGVhZGVyYCwgYHBza2JfY29weWAsIGFuZCBgc2tiX2NvcHlgLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBgbmZfY29weWAgZnVuY3Rpb246CgpgYGBjCnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpCnsKI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKCW5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7CiNlbmRpZgoJZHN0LSZndDtzbG93X2dybyA9IHNyYy0mZ3Q7c2xvd19ncm87CiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNCkgfHwgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjYpCglkc3QtJmd0O25mX2R1cGxpY2F0ZWQgPSBzcmMtJmd0O25mX2R1cGxpY2F0ZWQ7CiNlbmRpZgoJX19uZl9jb3B5KGRzdCwgc3JjLCB0cnVlKTsKfQpgYGAKClRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYG5mX2NvcHlgIGlzIGNhbGxlZCBkdXJpbmcgU0tCIGNsb25pbmcgYW5kIGNvcHlpbmcgdGhyb3VnaCBgX19jb3B5X3NrYl9oZWFkZXJgLiBTbywgdGhlIGxpbmUgYGRzdC0mZ3Q7bmZfZHVwbGljYXRlZCA9IHNyYy0mZ3Q7bmZfZHVwbGljYXRlZDtgIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgYG5mX2R1cGxpY2F0ZWRgIGlzIGV4cGxpY2l0bHkgY29waWVkIGZyb20gdGhlIHNvdXJjZSBTS0IgdG8gdGhlIGRlc3RpbmF0aW9uIFNLQiBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9uIGlmIGVpdGhlciBgQ09ORklHX05GX0RVUF9JUFY0YCBvciBgQ09ORklHX05GX0RVUF9JUFY2YCBhcmUgZW5hYmxlZCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBfX2NvcHlfc2tiX2hlYWRlcmAgZG9lcyBub3cgdG8gbWFrZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NvcHlfc2tiX2hlYWRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nz1zdHJ1Y3Qgc2tfYnVmZiB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05NDAtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjk0MTpcdC8qIEZvbGxvd2luZyBmaWVsZHMgYXJlIF9ub3RfIGNvcGllZCBpbiBfX2NvcHlfc2tiX2hlYWRlcigpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk0Mi1cdCAqIE5vdGUgdGhhdCBxdWV1ZV9tYXBwaW5nIGlzIGhlcmUgbW9zdGx5IHRvIGZpbGwgYSBob2xlLlxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTY4LVx0LyogRmllbGRzIGVuY2xvc2VkIGluIGhlYWRlcnMgZ3JvdXAgYXJlIGNvcGllZFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5Njk6XHQgKiB1c2luZyBhIHNpbmdsZSBtZW1jcHkoKSBpbiBfX2NvcHlfc2tiX2hlYWRlcigpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk3MC1cdCAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE1NTI9RVhQT1JUX1NZTUJPTChuYXBpX2NvbnN1bWVfc2tiKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNTU4LVxubmV0L2NvcmUvc2tidWZmLmM6MTU1OTpzdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxubmV0L2NvcmUvc2tidWZmLmMtMTU2MC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTYwNy0gKiBZb3Ugc2hvdWxkIG5vdCBhZGQgYW55IG5ldyBjb2RlIHRvIHRoaXMgZnVuY3Rpb24uICBBZGQgaXQgdG9cbm5ldC9jb3JlL3NrYnVmZi5jOjE2MDg6ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cbm5ldC9jb3JlL3NrYnVmZi5jLTE2MDktICovXG5uZXQvY29yZS9za2J1ZmYuYz0xNjEwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTYxNS1cdG4tXHUwMDNlc2sgPSBOVUxMO1xubmV0L2NvcmUvc2tidWZmLmM6MTYxNjpcdF9fY29weV9za2JfaGVhZGVyKG4sIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0xNjE3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE2NDc9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mb3JfbXNnKHN0cnVjdCBza19idWZmICpmaXJzdClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjYwLVxubmV0L2NvcmUvc2tidWZmLmM6MTY2MTpcdF9fY29weV9za2JfaGVhZGVyKG4sIGZpcnN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjItXHRuLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNDY9dm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDcte1xubmV0L2NvcmUvc2tidWZmLmM6MjE0ODpcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDktXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDY4Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDUtXHRcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDY6XHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NzQ3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00OTc1LVxubmV0L2NvcmUvc2tidWZmLmM6NDk3NjpcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNDk3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFNLQiBIZWFkZXIgQ29weWluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFNLQiBoZWFkZXIgY29weWluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHNvdXJjZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2NvcHlfc2tiX2hlYWRlcmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCByaWdodD8gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgaGVhZGVyIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCwgd2hhdCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgdGFraW5nIHBsYWNlLCBhbmQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIHBpdGZhbGxzLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSB3b3JraG9yc2UuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBieSBsb29raW5nIGF0IHRoZSBkZXRhaWxzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU1OTpcdHN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4xNTYwOlx0e1xuMTU2MTpcdFx0bmV3LVx1MDAzZXRzdGFtcFx0XHQ9IG9sZC1cdTAwM2V0c3RhbXA7XG4xNTYyOlx0XHQvKiBXZSBkbyBub3QgY29weSBvbGQtXHUwMDNlc2sgKi9cbjE1NjM6XHRcdG5ldy1cdTAwM2VkZXZcdFx0PSBvbGQtXHUwMDNlZGV2O1xuMTU2NDpcdFx0bWVtY3B5KG5ldy1cdTAwM2VjYiwgb2xkLVx1MDAzZWNiLCBzaXplb2Yob2xkLVx1MDAzZWNiKSk7XG4xNTY1Olx0XHRza2JfZHN0X2NvcHkobmV3LCBvbGQpO1xuMTU2NjpcdFx0X19za2JfZXh0X2NvcHkobmV3LCBvbGQpO1xuMTU2NzpcdFx0X19uZl9jb3B5KG5ldywgb2xkLCBmYWxzZSk7XG4xNTY4Olx0XG4xNTY5Olx0XHQvKiBOb3RlIDogdGhpcyBmaWVsZCBjb3VsZCBiZSBpbiB0aGUgaGVhZGVycyBncm91cC5cbjE1NzA6XHRcdCAqIEl0IGlzIG5vdCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIGEgMTYgYml0IGhvbGVcbjE1NzE6XHRcdCAqL1xuMTU3MjpcdFx0bmV3LVx1MDAzZXF1ZXVlX21hcHBpbmcgPSBvbGQtXHUwMDNlcXVldWVfbWFwcGluZztcbjE1NzM6XHRcbjE1NzQ6XHRcdG1lbWNweShcdTAwMjZuZXctXHUwMDNlaGVhZGVycywgXHUwMDI2b2xkLVx1MDAzZWhlYWRlcnMsIHNpemVvZihuZXctXHUwMDNlaGVhZGVycykpO1xuMTU3NTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHByb3RvY29sKTtcbjE1NzY6XHRcdENIRUNLX1NLQl9GSUVMRChjc3VtKTtcbjE1Nzc6XHRcdENIRUNLX1NLQl9GSUVMRChoYXNoKTtcbjE1Nzg6XHRcdENIRUNLX1NLQl9GSUVMRChwcmlvcml0eSk7XG4xNTc5Olx0XHRDSEVDS19TS0JfRklFTEQoc2tiX2lpZik7XG4xNTgwOlx0XHRDSEVDS19TS0JfRklFTEQodmxhbl9wcm90byk7XG4xNTgxOlx0XHRDSEVDS19TS0JfRklFTEQodmxhbl90Y2kpO1xuMTU4MjpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHRyYW5zcG9ydF9oZWFkZXIpO1xuMTU4MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG5ldHdvcmtfaGVhZGVyKTtcbjE1ODQ6XHRcdENIRUNLX1NLQl9GSUVMRChtYWNfaGVhZGVyKTtcbjE1ODU6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9wcm90b2NvbCk7XG4xNTg2Olx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfdHJhbnNwb3J0X2hlYWRlcik7XG4xNTg3Olx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbmV0d29ya19oZWFkZXIpO1xuMTU4ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX21hY19oZWFkZXIpO1xuMTU4OTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hcmspO1xuMTU5MDpcdCNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLXG4xNTkxOlx0XHRDSEVDS19TS0JfRklFTEQoc2VjbWFyayk7XG4xNTkyOlx0I2VuZGlmXG4xNTkzOlx0I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG4xNTk0Olx0XHRDSEVDS19TS0JfRklFTEQobmFwaV9pZCk7XG4xNTk1Olx0I2VuZGlmXG4xNTk2Olx0XHRDSEVDS19TS0JfRklFTEQoYWxsb2NfY3B1KTtcbjE1OTc6XHQjaWZkZWYgQ09ORklHX1hQU1xuMTU5ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHNlbmRlcl9jcHUpO1xuMTU5OTpcdCNlbmRpZlxuMTYwMDpcdCNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG4xNjAxOlx0XHRDSEVDS19TS0JfRklFTEQodGNfaW5kZXgpO1xuMTYwMjpcdCNlbmRpZlxuMTYwMzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0tCIEhlYWRlciBEdXBsaWNhdGlvbiBhbmQgTmV0ZmlsdGVyIER1cGxpY2F0aW9uIEZsYWdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbiBpbnZvbHZpbmcgYHNrX2J1ZmZgIGhlYWRlcnMsIHNwZWNpZmljYWxseSBgbWVtY3B5KCZhbXA7bmV3LSZndDtoZWFkZXJzLCAmYW1wO29sZC0mZ3Q7aGVhZGVycywgc2l6ZW9mKG5ldy0mZ3Q7aGVhZGVycykpO2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGNvcGllZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLiYjMzQ7IEZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoZSBgaGVhZGVyc2AgZ3JvdXAgaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUgaXMgYSBzdWJzdGFudGlhbCBzZWN0aW9uOyBsZXQgbWUgY29uZmlybSBpdHMgc3Bhbi4gQWhhLCB5ZXMsIEkgc2VlIHRoYXQgdGhlIGBuZl9kdXBsaWNhdGVkYCBmbGFnIHJlc2lkZXMgd2l0aGluIHRoZSBkZWZpbmVkIGBoZWFkZXJzYCBncm91cC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYSBzaW1wbGUgYG1lbWNweWAgd291bGQgZHVwbGljYXRlIGl0IGFsb25nIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIGBoZWFkZXJzYC4KCkkgYWxzbyByZW1lbWJlciB0aGF0IGBuZl9jb3B5YCBjb250YWlucyBhIGRpcmVjdCBjb3B5IG9mIHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyB3aXRoIGBkc3QtJmd0O25mX2R1cGxpY2F0ZWQgPSBzcmMtJmd0O25mX2R1cGxpY2F0ZWQ7YCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgdXNlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgb2YgYG5mX2NvcHlgLiBUaGVyZWZvcmUsIGlmIGJvdGggdGhlIGBtZW1jcHlgIGFuZCBgbmZfY29weWAgZXhpc3Qgb24gdGhlIHNhbWUgbGluZSwgdGhlcmUgd2lsbCBiZSB0aGUgc2FtZSBvdXRjb21lLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIGNvbnRleHRzLCBiZWNhdXNlIHRoaXMgc2VlbXMgbGlrZSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBpc3N1ZXMgY291bGQgYXJpc2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGV4cGxpY2l0bHkgaGFwcGVuaW5nIGF0IHRoZSBOZXRmaWx0ZXIgbGV2ZWwuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUgZm9yIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAuIEkmIzM5O2xsIG9wZW4gdXAgYG5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYCB0byBsb29rIGF0IGhvdyB0aGlzIGZsYWcgaXMgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aGVuKiBhbmQgKndoeSogaXQmIzM5O3Mgc2V0IG9yIGNsZWFyZWQuIFRoaXMgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBoZWFkZXIgZHVwbGljYXRpb24gaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0aWYgKElTX0VSUihydCkpXG4gIDQxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDI6XHRcbiAgNDM6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuICA0NDpcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuICA0NTpcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gcnQtXHUwMDNlZHN0LmRldjtcbiAgNDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiAgNDc6XHRcbiAgNDg6XHRcdHJldHVybiB0cnVlO1xuICA0OTpcdH1cbiAgNTA6XHRcbiAgNTE6XHR2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDUyOlx0XHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4gIDUzOlx0e1xuICA1NDpcdFx0c3RydWN0IGlwaGRyICppcGg7XG4gIDU1Olx0XG4gIDU2Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDU3Olx0XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gIDU4Olx0XHRcdGdvdG8gb3V0O1xuICA1OTpcdFx0LypcbiAgNjA6XHRcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXG4gIDYxOlx0XHQgKiB0aGUgb3JpZ2luYWwgc2tiLCB3aGljaCBzaG91bGQgY29udGludWUgb24gaXRzIHdheSBhcyBpZiBub3RoaW5nIGhhc1xuICA2MjpcdFx0ICogaGFwcGVuZWQuIFRoZSBjb3B5IHNob3VsZCBiZSBpbmRlcGVuZGVudGx5IGRlbGl2ZXJlZCB0byB0aGUgZ2F0ZXdheS5cbiAgNjM6XHRcdCAqL1xuICA2NDpcdFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gIDY1Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gIDY2Olx0XHRcdGdvdG8gb3V0O1xuICA2NzpcdFxuICA2ODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDY5Olx0XHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xuICA3MDpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiAgNzE6XHRcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XG4gIDcyOlx0I2VuZGlmXG4gIDczOlx0XHQvKlxuICA3NDpcdFx0ICogSWYgd2UgYXJlIGluIFBSRVJPVVRJTkcvSU5QVVQsIGRlY3JlYXNlIHRoZSBUVEwgdG8gbWl0aWdhdGUgcG90ZW50aWFsXG4gIDc1Olx0XHQgKiBsb29wcyBiZXR3ZWVuIHR3byBob3N0cy5cbiAgNzY6XHRcdCAqXG4gIDc3Olx0XHQgKiBTZXQgJUlQX0RGIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBub3RpZmllZCBvZiBhIHBvdGVudGlhbGx5XG4gIDc4Olx0XHQgKiBkZWNyZWFzZWQgTVRVIG9uIHRoZSBjbG9uZSByb3V0ZS4gSVB2NiBkb2VzIHRoaXMgdG9vLlxuICA3OTpcdFx0ICpcbiAgODA6XHRcdCAqIElQIGhlYWRlciBjaGVja3N1bSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCBpcF9sb2NhbF9vdXQuXG4gIDgxOlx0XHQgKi9cbiAgODI6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuICA4MzpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcbiAgODQ6XHRcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcbiAgODU6XHRcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXG4gIDg2Olx0XHRcdC0taXBoLVx1MDAzZXR0bDtcbiAgODc6XHRcbiAgODg6XHRcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbiAgODk6XHRcdFx0c2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xuICA5MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDkxOlx0XHRcdGlwX2xvY2FsX291dChuZXQsIHNrYi1cdTAwM2Vzaywgc2tiKTtcbiAgOTI6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTtcbiAgOTM6XHRcdH0gZWxzZSB7XG4gIDk0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICA5NTpcdFx0fVxuICA5NjpcdG91dDpcbiAgOTc6XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuICA5ODpcdH1cbiAgOTk6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIElQdjYgTmV0ZmlsdGVyIER1cGxpY2F0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgZmlsdGVyaW5nLCBhbmQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIG91ciBiYXNlcy4gVGhlIGNvcmUgYXJjaGl0ZWN0dXJlIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQgaW4gbW9zdCBjYXNlcywgYnV0IElQdjYgaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgYSBsaXR0bGUuLi4gbnVhbmNlZC4gTGV0JiMzOTtzIG5vdCBza2lwIGFueSBzdGVwcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBJUHY2IGR1cGxpY2F0ZSBwYWNrZXQgaGFuZGxpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBjcnVjaWFsIHN1YnRsZXRpZXMgcmVsYXRlZCB0byBob3cgSVB2NiBleHRlbnNpb24gaGVhZGVycyBhcmUgaGFuZGxlZCwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIElQdjYtcmVsYXRlZCBmcmFnbWVudGF0aW9uIGNvbnNpZGVyYXRpb25zIHRoYXQgd2FycmFudCBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gZW5zdXJlIHdlIGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbmNlcyBpbiBob3cgSVB2NiBoYW5kbGVzIGNlcnRhaW4gZnVuY3Rpb25zIGluIGNvbXBhcmlzb24gdG8gSVB2NC4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcbiAgNDE6XHRcdHNrYi1cdTAwM2VkZXYgICAgICA9IGRzdF9kZXYoZHN0KTtcbiAgNDI6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuICA0MzpcdFxuICA0NDpcdFx0cmV0dXJuIHRydWU7XG4gIDQ1Olx0fVxuICA0NjpcdFxuICA0NzpcdHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiAgNDg6XHRcdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4gIDQ5Olx0e1xuICA1MDpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuICA1MTpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuICA1MjpcdFx0XHRnb3RvIG91dDtcbiAgNTM6XHRcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuICA1NDpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuICA1NTpcdFx0XHRnb3RvIG91dDtcbiAgNTY6XHRcbiAgNTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICA1ODpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiAgNTk6XHRcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XG4gIDYwOlx0I2VuZGlmXG4gIDYxOlx0XHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XG4gIDYyOlx0XHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKSB7XG4gIDYzOlx0XHRcdHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xuICA2NDpcdFx0XHQtLWlwaC1cdTAwM2Vob3BfbGltaXQ7XG4gIDY1Olx0XHR9XG4gIDY2Olx0XHRpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4gIDY3Olx0XHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiAgNjg6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuICA2OTpcdFx0XHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuICA3MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuICA3MTpcdFx0fSBlbHNlIHtcbiAgNzI6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDczOlx0XHR9XG4gIDc0Olx0b3V0OlxuICA3NTpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gIDc2Olx0fVxuICA3NzpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcbiAgNzg6XHRcbiAgNzk6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1NlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzNAoJCQkJCQkJb3V0cHV0OiAyNDcKCQkJCQkJCXRob3VnaHRzOiA2NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmxlbSB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgZmxhdyBpbiB0aGUgb3JpZ2luYWwgbG9naWMuIFRoZSBwZXItdGFzayBmbGFnLCBgY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlYCwgd2FzbiYjMzk7dCByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gcGFja2V0cyBnb3QgcXVldWVkLCBkZWxheWVkLCBvciBtb3ZlZCBiZXR3ZWVuIGNvbnRleHRzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5maW5pdGUgZHVwbGljYXRpb24gbG9vcHMsIGEgdmVyeSBuYXN0eSBidWchCgpUaGUgc29sdXRpb24sIHdoaWNoIEkgZmluZCBlbGVnYW50LCBpcyB0byBpbnRyb2R1Y2UgYSBuZXcgZmxhZyBkaXJlY3RseSBvbiB0aGUgYHNrX2J1ZmZgLCB0aGUgcGFja2V0JiMzOTtzIGRhdGEgc3RydWN0dXJlIGl0c2VsZjogYHNrYi0mZ3Q7bmZfZHVwbGljYXRlZGAuIE5vdywgYW55IHBhY2tldCBkdXBsaWNhdGVkIGJ5IG5ldGZpbHRlciBnZXRzIHRoaXMgZmxhZyBzZXQuIFRoZSBjaGVjayBpcyBtb2RpZmllZCB0byBgY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlIHx8IHNrYi0mZ3Q7bmZfZHVwbGljYXRlZGAsIGFuZCB0aGlzIGd1YXJhbnRlZXMgdGhhdCB3ZSBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIHByZXZlbnQgYW55IHBhY2tldHMgZ2VuZXJhdGVkIHZpYSBuZXRmaWx0ZXIgZHVwbGljYXRpb24gZnJvbSBiZWluZywgd2VsbCwgZHVwbGljYXRlZCBhZ2Fpbi4gTmljZS4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBLTVNBTiB2ZXJzdXMgS0FTQU4gY29uc2lkZXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudCBoZXJlLCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhlc2UgYXJlYXMuCgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8uIGBzdHJ1Y3Qgc2tfYnVmZmAgaXMgaW50ZXJuYWwuIFdoaWxlIGl04oCZcyB0cnVlIHRoYXQgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgY291bGQgYmUgYW4gaXNzdWUgd2hlbiBtb3ZpbmcgZGF0YSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSwgdGhpcyBwYXRjaCAqYWRkcyogYW4gaW50ZXJuYWwgMS1iaXQgZmllbGQuIFNpbmNlIHRoZSBlbnRpcmUgaGVhZGVyIGFyZWEgdXAgdG8gdGhlIGB0YWlsYCBpcyB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gYnkgYHNrYnVmZl9jbGVhcmAsIHRoZSBhZGRlZCBiaXQgZG9lc24mIzM5O3QgcG9zZSBhbnkgcmlzayBpbiB0aGlzIGNhdGVnb3J5LiBObyBkaXJlY3QgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQuCgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogVGhlIGBza2ItJmd0O25mX2R1cGxpY2F0ZWRgIGJpdCBpdHNlbGYgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBJdCBpcyBjb3BpZWQgY29ycmVjdGx5IGJ5IGFsbCBpbnZvbHZlZCBmdW5jdGlvbnMsIGxpa2UgYG5mX2NvcHlgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgaXQgaXMgZXhwbGljaXRseSBzZXQgdG8gMSBpbiB0aGUgZHVwbGljYXRpb24gZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMganVzdCBub3QgcG9zc2libGUgaW4gdGhpcyBzY2VuYXJpby4KCjMuICAqKk5ldyBjb21wbGV4IHN0cnVjdHVyZXMgYW5kIGluaXRpYWxpemF0aW9uPyoqIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldywgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGdvb2QuIFRoZSBleGlzdGluZyBgc3RydWN0IHNrX2J1ZmZgIGJpdGZpZWxkIGlzIGFscmVhZHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLgoKNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObyBpbXBhY3QuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgcGF5bG9hZCBsZW5ndGhzLCBidWZmZXIgc2l6ZXMsIG9yIGFueSBib3VuZHMgY2hlY2tpbmcgbG9naWMuCgpJbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGNsZWFuLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHJlY3Vyc2lvbi9sb29wIHByZXZlbnRpb24gZml4IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIHBhdGguIEkgc2VlIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLiBUaGVyZSBpcyBubyBuZWVkIGZvciBkZWRpY2F0ZWQgS01TQU4gYW5hbHlzaXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXIsIGFuZCBpdCBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIDEtYml0IGZsYWcgYG5mX2R1cGxpY2F0ZWRgIHRvIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIHNldHMvY2hlY2tzIGl0IGluIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgdG8gcHJldmVudCBpbmZpbml0ZSBwYWNrZXQgZHVwbGljYXRpb24gbG9vcHMuXG5cbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cbjIuIE5vIEluZm8tTGVha3M6IGBuZl9kdXBsaWNhdGVkYCBpcyBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIHN0YXRlIGZsYWcgd2l0aGluIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIGlzIG5ldmVyIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIHBhY2tldCBkYXRhIGxlbmd0aHMsIHBheWxvYWQgYm91bmRzLCBvciBhY2Nlc3MgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgMS1iaXQgZmxhZyBgbmZfZHVwbGljYXRlZGAgdG8gYHN0cnVjdCBza19idWZmYCBhbmQgc2V0cy9jaGVja3MgaXQgaW4gYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCB0byBwcmV2ZW50IGluZmluaXRlIHBhY2tldCBkdXBsaWNhdGlvbiBsb29wcy5cblxuMS4gSW5pdGlhbGl6YXRpb246IEFsbCBgc2tfYnVmZmAgaW5zdGFuY2VzIGFyZSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uIHZpYSBgc2tidWZmX2NsZWFyKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5IGZyb20gdGhlIHN0YXJ0IG9mIGBzdHJ1Y3Qgc2tfYnVmZmAgdXAgdG8gYHRhaWxgKSwgZW5zdXJpbmcgYG5mX2R1cGxpY2F0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAuIEl0IGlzIHByb3Blcmx5IHByZXNlcnZlZCBpbiBgbmZfY29weSgpYCBhbmQgYF9fY29weV9za2JfaGVhZGVyKClgLlxuMi4gTm8gSW5mby1MZWFrczogYG5mX2R1cGxpY2F0ZWRgIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgZmxhZyB3aXRoaW4gYHN0cnVjdCBza19idWZmYCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MDYuMzMzMTc5OTIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NTcwNjg2NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgMS1iaXQgZmxhZyBgbmZfZHVwbGljYXRlZGAgdG8gYHN0cnVjdCBza19idWZmYCBhbmQgc2V0cy9jaGVja3MgaXQgaW4gYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCB0byBwcmV2ZW50IGluZmluaXRlIHBhY2tldCBkdXBsaWNhdGlvbiBsb29wcy5cXG5cXG4xLiBJbml0aWFsaXphdGlvbjogQWxsIGBza19idWZmYCBpbnN0YW5jZXMgYXJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24gdmlhIGBza2J1ZmZfY2xlYXIoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkgZnJvbSB0aGUgc3RhcnQgb2YgYHN0cnVjdCBza19idWZmYCB1cCB0byBgdGFpbGApLCBlbnN1cmluZyBgbmZfZHVwbGljYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSXQgaXMgcHJvcGVybHkgcHJlc2VydmVkIGluIGBuZl9jb3B5KClgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXIoKWAuXFxuMi4gTm8gSW5mby1MZWFrczogYG5mX2R1cGxpY2F0ZWRgIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgZmxhZyB3aXRoaW4gYHN0cnVjdCBza19idWZmYCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIHBhY2tldCBkYXRhIGxlbmd0aHMsIHBheWxvYWQgYm91bmRzLCBvciBhY2Nlc3MgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICduZl9kdXBsaWNhdGVkJyBiaXQgaW4gc3RydWN0IHNrX2J1ZmYgdG8gdHJhY2sgY2xvbmVkIHBhY2tldHMgYWNyb3NzIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBob29rcyAoZS5nLiBuZnRfZHVwIGFuZCB4dF9URUUpLCBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzLiBUaGlzIGRpcmVjdGx5IGNoYW5nZXMgcGFja2V0IGNsb25pbmcgYW5kIHJvdXRpbmcgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyIElQdjQgYW5kIElQdjYgZHVwbGljYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjA2LjMzMzE4NjE3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NDM0MjA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4OTI0Mzk4ZDI0Yzg5ZmZkYzVkMDg2Y2NkOGE3NDhhYjNlZDcwYWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDc6MDI6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5pbmRleCA1NTIyNzE2ZGY4ZmZmLi5mNWM3YjdiMWNlZGVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuQEAgLTgxMiw2ICs4MTIsNyBAQCBlbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuICAqXFx0QHJlZGlyZWN0ZWQ6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBieSBwYWNrZXQgY2xhc3NpZmllclxcbiAgKlxcdEBmcm9tX2luZ3Jlc3M6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBmcm9tIHRoZSBpbmdyZXNzIHBhdGhcXG4gICpcXHRAbmZfc2tpcF9lZ3Jlc3M6IHBhY2tldCBzaGFsbCBza2lwIG5mIGVncmVzcyAtIHNlZSBuZXRmaWx0ZXJfbmV0ZGV2LmhcXG4rICpcXHRAbmZfZHVwbGljYXRlZDogcGFja2V0IHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXRmaWx0ZXIgZHVwbGljYXRpb24gYWN0aW9uXFxuICAqXFx0QHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW5cXG4gICpcXHRcXHRkb25lIGZvciBpdCwgZG9uJ3QgZG8gdGhlbSBhZ2FpblxcbiAgKlxcdEBuZl90cmFjZTogbmV0ZmlsdGVyIHBhY2tldCB0cmFjZSBmbGFnXFxuQEAgLTEwMjMsNiArMTAyNCw5IEBAIHN0cnVjdCBza19idWZmIHtcXG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4gXFx0X191OFxcdFxcdFxcdG5mX3NraXBfZWdyZXNzOjE7XFxuICNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxcbitcXHRfX3U4XFx0XFx0XFx0bmZfZHVwbGljYXRlZDoxO1xcbisjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVEXFxuIFxcdF9fdThcXHRcXHRcXHRkZWNyeXB0ZWQ6MTtcXG4gI2VuZGlmXFxuQEAgLTUyMDAsNiArNTIwNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXFxuIFxcdG5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7XFxuICNlbmRpZlxcbiBcXHRkc3QtXFx1MDAzZXNsb3dfZ3JvID0gc3JjLVxcdTAwM2VzbG93X2dybztcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcXG4rXFx0ZHN0LVxcdTAwM2VuZl9kdXBsaWNhdGVkID0gc3JjLVxcdTAwM2VuZl9kdXBsaWNhdGVkO1xcbisjZW5kaWZcXG4gXFx0X19uZl9jb3B5KGRzdCwgc3JjLCB0cnVlKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xcbmluZGV4IDlhNzczNTAyZjEwYWMuLjhmZTMxYTBkYjA2M2IgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xcbkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4gXFx0c3RydWN0IGlwaGRyICppcGg7XFxuIFxcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuK1xcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0LypcXG4gXFx0ICogQ29weSB0aGUgc2tiLCBhbmQgcm91dGUgdGhlIGNvcHkuIFdpbGwgbGF0ZXIgcmV0dXJuICVYVF9DT05USU5VRSBmb3JcXG5AQCAtODYsNiArODYsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuIFxcdFxcdC0taXBoLVxcdTAwM2V0dGw7XFxuIFxcbiBcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxuK1xcdFxcdHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XFxuIFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuIFxcdFxcdGlwX2xvY2FsX291dChuZXQsIHNrYi1cXHUwMDNlc2ssIHNrYik7XFxuIFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuaW5kZXggNmRhMzEwMmI3YzFiMy4uZTBmZGI0M2Q3ZDNkZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiBcXHRcXHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcXG4ge1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuK1xcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmIChza2IgPT0gTlVMTClcXG5AQCAtNjQsNiArNjQsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuIFxcdFxcdC0taXBoLVxcdTAwM2Vob3BfbGltaXQ7XFxuIFxcdH1cXG4gXFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbitcXHRcXHRza2ItXFx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xcbiBcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiBcXHRcXHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gXFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjA3Ljg4OTA0NDgyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI2NDY3NTY3MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAnbmZfZHVwbGljYXRlZCcgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODkyNDM5OGQyNGM4OWZmZGM1ZDA4NmNjZDhhNzQ4YWIzZWQ3MGFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDc6MDI6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggNTUyMjcxNmRmOGZmZi4uZjVjN2I3YjFjZWRlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC04MTIsNiArODEyLDcgQEAgZW51bSBza2JfdHN0YW1wX3R5cGUge1xuICAqXHRAcmVkaXJlY3RlZDogcGFja2V0IHdhcyByZWRpcmVjdGVkIGJ5IHBhY2tldCBjbGFzc2lmaWVyXG4gICpcdEBmcm9tX2luZ3Jlc3M6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBmcm9tIHRoZSBpbmdyZXNzIHBhdGhcbiAgKlx0QG5mX3NraXBfZWdyZXNzOiBwYWNrZXQgc2hhbGwgc2tpcCBuZiBlZ3Jlc3MgLSBzZWUgbmV0ZmlsdGVyX25ldGRldi5oXG4rICpcdEBuZl9kdXBsaWNhdGVkOiBwYWNrZXQgd2FzIGdlbmVyYXRlZCBieSBhIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBhY3Rpb25cbiAgKlx0QHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW5cbiAgKlx0XHRkb25lIGZvciBpdCwgZG9uJ3QgZG8gdGhlbSBhZ2FpblxuICAqXHRAbmZfdHJhY2U6IG5ldGZpbHRlciBwYWNrZXQgdHJhY2UgZmxhZ1xuQEAgLTEwMjMsNiArMTAyNCw5IEBAIHN0cnVjdCBza19idWZmIHtcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9TS0lQX0VHUkVTU1xuIFx0X191OFx0XHRcdG5mX3NraXBfZWdyZXNzOjE7XG4gI2VuZGlmXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcbitcdF9fdThcdFx0XHRuZl9kdXBsaWNhdGVkOjE7XG4rI2VuZGlmXG4gI2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVEXG4gXHRfX3U4XHRcdFx0ZGVjcnlwdGVkOjE7XG4gI2VuZGlmXG5AQCAtNTIwMCw2ICs1MjA0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG5mX2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcbiBcdG5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7XG4gI2VuZGlmXG4gXHRkc3QtXHUwMDNlc2xvd19ncm8gPSBzcmMtXHUwMDNlc2xvd19ncm87XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcbitcdGRzdC1cdTAwM2VuZl9kdXBsaWNhdGVkID0gc3JjLVx1MDAzZW5mX2R1cGxpY2F0ZWQ7XG4rI2VuZGlmXG4gXHRfX25mX2NvcHkoZHN0LCBzcmMsIHRydWUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG5pbmRleCA5YTc3MzUwMmYxMGFjLi44ZmUzMWEwZGIwNjNiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG5AQCAtNTQsNyArNTQsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbitcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSB8fCBza2ItXHUwMDNlbmZfZHVwbGljYXRlZClcbiBcdFx0Z290byBvdXQ7XG4gXHQvKlxuIFx0ICogQ29weSB0aGUgc2tiLCBhbmQgcm91dGUgdGhlIGNvcHkuIFdpbGwgbGF0ZXIgcmV0dXJuICVYVF9DT05USU5VRSBmb3JcbkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiBcdFx0LS1pcGgtXHUwMDNldHRsO1xuIFxuIFx0aWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xuK1x0XHRza2ItXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiBcdFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbmluZGV4IDZkYTMxMDJiN2MxYjMuLmUwZmRiNDNkN2QzZGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiBcdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4ge1xuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuK1x0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuIFx0XHRnb3RvIG91dDtcbiBcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHNrYiA9PSBOVUxMKVxuQEAgLTY0LDYgKzY0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2Vob3BfbGltaXQ7XG4gXHR9XG4gXHRpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4rXHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiBcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuIFx0XHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MDcuODg5MDQ3NzU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwMDQxMTEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGFja2V0IER1cGxpY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHRoZSBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljIOKAkyB0aGluZ3MgbGlrZSBgbmZ0X2R1cF9pcHY0YCwgYG5mdF9kdXBfaXB2NmAsIGFuZCBwb3RlbnRpYWxseSBldmVuIGB4dF9URUVgLCBhbGwgb2Ygd2hpY2ggbGV2ZXJhZ2UgdGhlIGNvcmUgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBmdW5jdGlvbnMuIFRoZSBjb3JlIGNvbmNlcHQgaGVyZSBpcyBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzIG9yIHJlY3Vyc2lvbiB3aGVuIGEgZHVwbGljYXRlZCBwYWNrZXQgaGl0cyBuZXRmaWx0ZXIgaG9va3MgYWdhaW4uIFNtYXJ0LlxuXG5UaGUgbW9kaWZpY2F0aW9ucyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCB0aGV5J3JlIGFkZGluZyBhIGBuZl9kdXBsaWNhdGVkOjFgIGJpdCB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gVGhpcyBiaXQgaXMgY29uZGl0aW9uYWwsIG9ubHkgYXBwZWFyaW5nIHdoZW4gZWl0aGVyIGBDT05GSUdfTkZfRFVQX0lQVjRgIG9yIGBDT05GSUdfTkZfRFVQX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kLCBrZWVwcyB0aGUgc3RydWN0IGxlYW4gd2hlbiBpdCdzIG5vdCBuZWVkZWQuIFRoZXkncmUgYWxzbyBtYWtpbmcgc3VyZSBgbmZfZHVwbGljYXRlZGAgZ2V0cyBjb3BpZWQgb3ZlciBpbiBgbmZfY29weSgpYC4gTWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gcmV0YWluIHRoYXQgZHVwbGljYXRlZCBzdGF0dXMuXG5cbk5vdywgaW4gYG5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYCwgaXQncyBhbGwgYWJvdXQgc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhpcyBuZXcgYml0LiBCb3RoIGBuZl9kdXBfaXB2NCgpYCBhbmQgYG5mX2R1cF9pcHY2KClgIGFyZSBjaGVja2luZyBpZiBgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWRgIGlzIGFscmVhZHkgc2V0LCBhbmQgKnRoZW4qIHNldHRpbmcgaXQgaWYgaXQgaXNuJ3QuIFRoaXMgcHJldmVudHMgdGhlIHNhbWUgcGFja2V0IGZyb20gYmVpbmcgbWFya2VkIGFzIGR1cGxpY2F0ZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgZHVwbGljYXRpb24gcGF0aC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB2ZXJpZnkgaG93IHRoZSBLY29uZmlnIHNldHRpbmdzIGFyZSBiZWluZyB1c2VkLiBMZXQncyBzZWUgaG93IHRob3NlIGBDT05GSUdfTkZfRFVQX0lQVjRgIGFuZCBgQ09ORklHX05GX0RVUF9JUFY2YCBmbGFncyBhcmUgY29uZmlndXJlZC4gSSdsbCBwcm9iYWJseSBydW4gYSBgZ3JlcHBlcmAgYWNyb3NzIHRoZSBLY29uZmlnIGZpbGVzLCBvciBqdXN0IGRpZyB0aHJvdWdoIHRoZW0gaWYgSSBuZWVkIHRvLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUsIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjI0Ljg5MzE2MTgwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODIzODk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRFVQX0lQVls0Nl1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MjQuOTkxNDA0NzAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMjQ4OTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIElQdjQgYW5kIElQdjYgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGFydGljdWxhcmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGNvbXBvbmVudHMgYXJlIHN0cnVjdHVyZWQuIExldCBtZSBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNzIsIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgSVB2NCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIFRoZW4sIEknbGwgbmVlZCB0byBsb29rIGludG8gYG5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnYCBhcm91bmQgbGluZSA2MSB0byBzZWUgaG93IHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiBUaGlzIHdpbGwgbGV0IG1lIHNlZSBpZiB0aGUgSVB2NiBjb25maWd1cmF0aW9uIGlzIHNpbWlsYXIgb3IgaGFzIGl0cyBvd24gc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIGJlIGF3YXJlIG9mLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBhbmQgdGhlIElQdjQvSVB2NiBzcGVjaWZpYyBvcHRpb25zLiBIb3BlZnVsbHksIHRoZXNlIEtjb25maWcgZmlsZXMgd2lsbCBjbGVhcmx5IG91dGxpbmUgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcywgYWxsb3dpbmcgbWUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjI3Ljc5Mzg5NTk1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgTkZfVEFCTEVTX0FSUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiQVJQIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiAgNjY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICA2NzpcXHRcXHRoZWxwXFxuICA2ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFSUCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXFxuICA2OTpcXHRcXG4gIDcwOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuICA3MTpcXHRcXG4gIDcyOlxcdGNvbmZpZyBORl9EVVBfSVBWNFxcbiAgNzM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cXFwiXFxuICA3NDpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxuICA3NTpcXHRcXHRoZWxwXFxuICA3NjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxcbiAgNzc6XFx0XFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnIE5GX0xPR19BUlBcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJBUlAgcGFja2V0IGxvZ2dpbmdcXFwiXFxuICA4MTpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDgyOlxcdFxcdHNlbGVjdCBORl9MT0dfU1lTTE9HXFxuICA4MzpcXHRcXHRoZWxwXFxuICA4NDpcXHRcXHRUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2VcXG4gIDg1OlxcdFxcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxcbiAgODY6XFx0XFxuICA4NzpcXHRjb25maWcgTkZfTE9HX0lQVjRcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY0IHBhY2tldCBsb2dnaW5nXFxcIlxcbiAgODk6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA5MDpcXHRcXHRzZWxlY3QgTkZfTE9HX1NZU0xPR1xcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0VGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlXFxuICA5MzpcXHRcXHQoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cyBDT05GSUdfTkZfTE9HX1NZU0xPRy5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0Y29uZmlnIE5GX1JFSkVDVF9JUFY0XFxuICA5NjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NCBwYWNrZXQgcmVqZWN0aW9uXFxcIlxcbiAgOTc6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA5ODpcXHRcXG4gIDk5OlxcdGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMjoyNy43OTM5Njg3ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUwNDc2MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBORl9EVVBfSVBWNC9JUFY2IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoZSBgTkZfRFVQX0lQVjRgIGFuZCBgTkZfRFVQX0lQVjZgIG9wdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZXlvbmQgdGhlaXIgYmFzaWMgZnVuY3Rpb24sIGxldCdzIGV4cGxvcmUgdGhlaXIgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGVjb3N5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBtb2R1bGVzLCBvciBjb25maWd1cmF0aW9ucyAqc2VsZWN0KiB0aGVzZSBvcHRpb25zIOKAkyB3aGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gQ29udmVyc2VseSwgSSdtIGVxdWFsbHkgaW50ZXJlc3RlZCBpbiB3aGF0ICpkZXBlbmRzKiBvbiB0aGVtLiBXaGljaCBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjayByZWx5IG9uIHRoZXNlIHNldHRpbmdzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlbSwgYW5kIHBhcnRpY3VsYXJseSB3aGVuIGNvbnNpZGVyaW5nIGNvbXBhdGliaWxpdHkgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy4gV2UgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY29ubmVjdGlvbnMgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MzAuMDQ0NDQ5Mjc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDAwMDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9EVVBfSVBWWzQ2XVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcXHRzZWxlY3QgTkZfRFVQX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICs9IG5mX3JlamVjdF9pcHY2Lm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYyOlxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlxcdHNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjMwLjE3NDQ1NDE0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODE1MjY4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEdXBsaWNhdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgaG93IElQdjQgYW5kIElQdjYgcGFja2V0cyBnZXQgZHVwbGljYXRlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIGR1cGxpY2F0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIFRoYXQnbGwgYmUgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMjozMi4yNTU5ODU0OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogKEMpIDIwMDcgYnkgU2ViYXN0aWFuIENsYcOfZW4gXFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcXHUwMDNlXFxuICAgNDpcXHQgKiAoQykgMjAwNy0yMDEwIGJ5IEphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxuICAgNTpcXHQgKlxcbiAgIDY6XFx0ICogRXh0cmFjdGVkIGZyb20geHRfVEVFLmNcXG4gICA3OlxcdCAqL1xcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcm91dGUuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvY2hlY2tzdW0uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZmxvdy5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcXHUwMDNlXFxuICAyMDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICAyMjpcXHQjZW5kaWZcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMjU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgMjY6XFx0e1xcbiAgMjc6XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcXG4gIDI4OlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbiAgMjk6XFx0XFx0c3RydWN0IGZsb3dpNCBmbDQ7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdG1lbXNldChcXHUwMDI2Zmw0LCAwLCBzaXplb2YoZmw0KSk7XFxuICAzMjpcXHRcXHRpZiAob2lmICE9IC0xKVxcbiAgMzM6XFx0XFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSBvaWY7XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdGZsNC5kYWRkciA9IGd3LVxcdTAwM2VzX2FkZHI7XFxuICAzNjpcXHRcXHRmbDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBoKTtcXG4gIDM3OlxcdFxcdGZsNC5mbG93aTRfc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRTtcXG4gIDM4OlxcdFxcdGZsNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xcbiAgMzk6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxuICA0MDpcXHRcXHRpZiAoSVNfRVJSKHJ0KSlcXG4gIDQxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuICA0NDpcXHRcXHRza2JfZHN0X3NldChza2IsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4gIDQ1OlxcdFxcdHNrYi1cXHUwMDNlZGV2ICAgICAgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4gIDQ2OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNDk6XFx0fVxcbiAgNTA6XFx0XFxuICA1MTpcXHR2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuICA1MjpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgNTM6XFx0e1xcbiAgNTQ6XFx0XFx0c3RydWN0IGlwaGRyICppcGg7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDU3OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiAgNTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1OTpcXHRcXHQvKlxcbiAgNjA6XFx0XFx0ICogQ29weSB0aGUgc2tiLCBhbmQgcm91dGUgdGhlIGNvcHkuIFdpbGwgbGF0ZXIgcmV0dXJuICVYVF9DT05USU5VRSBmb3JcXG4gIDYxOlxcdFxcdCAqIHRoZSBvcmlnaW5hbCBza2IsIHdoaWNoIHNob3VsZCBjb250aW51ZSBvbiBpdHMgd2F5IGFzIGlmIG5vdGhpbmcgaGFzXFxuICA2MjpcXHRcXHQgKiBoYXBwZW5lZC4gVGhlIGNvcHkgc2hvdWxkIGJlIGluZGVwZW5kZW50bHkgZGVsaXZlcmVkIHRvIHRoZSBnYXRld2F5LlxcbiAgNjM6XFx0XFx0ICovXFxuICA2NDpcXHRcXHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcXG4gIDY1OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4gIDY2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNjc6XFx0XFxuICA2ODpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgNjk6XFx0XFx0LyogQXZvaWQgY291bnRpbmcgY2xvbmVkIHBhY2tldHMgdG93YXJkcyB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4gKi9cXG4gIDcwOlxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuICA3MTpcXHRcXHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xcbiAgNzI6XFx0I2VuZGlmXFxuICA3MzpcXHRcXHQvKlxcbiAgNzQ6XFx0XFx0ICogSWYgd2UgYXJlIGluIFBSRVJPVVRJTkcvSU5QVVQsIGRlY3JlYXNlIHRoZSBUVEwgdG8gbWl0aWdhdGUgcG90ZW50aWFsXFxuICA3NTpcXHRcXHQgKiBsb29wcyBiZXR3ZWVuIHR3byBob3N0cy5cXG4gIDc2OlxcdFxcdCAqXFxuICA3NzpcXHRcXHQgKiBTZXQgJUlQX0RGIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBub3RpZmllZCBvZiBhIHBvdGVudGlhbGx5XFxuICA3ODpcXHRcXHQgKiBkZWNyZWFzZWQgTVRVIG9uIHRoZSBjbG9uZSByb3V0ZS4gSVB2NiBkb2VzIHRoaXMgdG9vLlxcbiAgNzk6XFx0XFx0ICpcXG4gIDgwOlxcdFxcdCAqIElQIGhlYWRlciBjaGVja3N1bSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCBpcF9sb2NhbF9vdXQuXFxuICA4MTpcXHRcXHQgKi9cXG4gIDgyOlxcdFxcdGlwaCA9IGlwX2hkcihza2IpO1xcbiAgODM6XFx0XFx0aXBoLVxcdTAwM2VmcmFnX29mZiB8PSBodG9ucyhJUF9ERik7XFxuICA4NDpcXHRcXHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XFxuICA4NTpcXHRcXHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKVxcbiAgODY6XFx0XFx0XFx0LS1pcGgtXFx1MDAzZXR0bDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0aWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgODk6XFx0XFx0XFx0c2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcXG4gIDkwOlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuICA5MTpcXHRcXHRcXHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXFx1MDAzZXNrLCBza2IpO1xcbiAgOTI6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuICA5MzpcXHRcXHR9IGVsc2Uge1xcbiAgOTQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA5NTpcXHRcXHR9XFxuICA5NjpcXHRvdXQ6XFxuICA5NzpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDk4OlxcdH1cXG4gIDk5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY0KTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMjozMi4yNTYxODU5MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0MzIzNDA5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IER1cGxpY2F0ZSBQYWNrZXQgUHJldmVudGlvbiBNb2R1bGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIEknbSBndWVzc2luZyB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBob3cgZHVwbGljYXRlIElQdjYgcGFja2V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIGZvY3VzaW5nIG9uIHRoZSBsb2dpYyB0aGF0IHByZXZlbnRzIHJlZHVuZGFudCBwcm9jZXNzaW5nIG9yIHRyYW5zbWlzc2lvbiBvZiBwYWNrZXRzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhleSBpZGVudGlmeSBhbmQgZGlzY2FyZCB0aGVzZSBkdXBsaWNhdGVzIHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LCB3aGljaCBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIHNlcXVlbmNlIG51bWJlcnMsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHNwZWNpZmljIHRvIElQdjYncyBkZXNpZ24uIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgYXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHJlbGF0ZWQgdG8gcGFja2V0IGNsYXNzaWZpY2F0aW9uIGFuZCBkZWR1cGxpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzowOC42ODg1Mjg4ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcbiAgIDQ6XFx0ICogKEMpIDIwMDctMjAxMCBieSBKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcbiAgIDU6XFx0ICpcXG4gICA2OlxcdCAqIEV4dHJhY3RlZCBmcm9tIHh0X1RFRS5jXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFxcdTAwM2VcXG4gIDE1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gIDE3OlxcdCNlbmRpZlxcbiAgMTg6XFx0XFxuICAxOTpcXHRzdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAyMDpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgMjE6XFx0e1xcbiAgMjI6XFx0XFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICAyMzpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuICAyNDpcXHRcXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0bWVtc2V0KFxcdTAwMjZmbDYsIDAsIHNpemVvZihmbDYpKTtcXG4gIDI3OlxcdFxcdGlmIChvaWYgIT0gLTEpXFxuICAyODpcXHRcXHRcXHRmbDYuZmxvd2k2X29pZiA9IG9pZjtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0Zmw2LmRhZGRyID0gKmd3O1xcbiAgMzE6XFx0XFx0Zmw2LmZsb3dsYWJlbCA9IChfX2ZvcmNlIF9fYmUzMikoKChpcGgtXFx1MDAzZWZsb3dfbGJsWzBdIFxcdTAwMjYgMHhGKSBcXHUwMDNjXFx1MDAzYyAxNikgfFxcbiAgMzI6XFx0XFx0XFx0XFx0KGlwaC1cXHUwMDNlZmxvd19sYmxbMV0gXFx1MDAzY1xcdTAwM2MgOCkgfCBpcGgtXFx1MDAzZWZsb3dfbGJsWzJdKTtcXG4gIDMzOlxcdFxcdGZsNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xcbiAgMzQ6XFx0XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIFxcdTAwMjZmbDYpO1xcbiAgMzU6XFx0XFx0aWYgKGRzdC1cXHUwMDNlZXJyb3IpIHtcXG4gIDM2OlxcdFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuICAzNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICAzODpcXHRcXHR9XFxuICAzOTpcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4gIDQwOlxcdFxcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcXG4gIDQxOlxcdFxcdHNrYi1cXHUwMDNlZGV2ICAgICAgPSBkc3RfZGV2KGRzdCk7XFxuICA0MjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNDU6XFx0fVxcbiAgNDY6XFx0XFxuICA0NzpcXHR2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuICA0ODpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcXG4gIDQ5OlxcdHtcXG4gIDUwOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDUxOlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiAgNTI6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1MzpcXHRcXHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcXG4gIDU0OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4gIDU1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNTY6XFx0XFxuICA1NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgNTg6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gIDU5OlxcdFxcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XFxuICA2MDpcXHQjZW5kaWZcXG4gIDYxOlxcdFxcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcXG4gIDYyOlxcdFxcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pIHtcXG4gIDYzOlxcdFxcdFxcdHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xcbiAgNjQ6XFx0XFx0XFx0LS1pcGgtXFx1MDAzZWhvcF9saW1pdDtcXG4gIDY1OlxcdFxcdH1cXG4gIDY2OlxcdFxcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcXG4gIDY3OlxcdFxcdFxcdHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XFxuICA2ODpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgNjk6XFx0XFx0XFx0aXA2X2xvY2FsX291dChuZXQsIHNrYi1cXHUwMDNlc2ssIHNrYik7XFxuICA3MDpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTtcXG4gIDcxOlxcdFxcdH0gZWxzZSB7XFxuICA3MjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDczOlxcdFxcdH1cXG4gIDc0OlxcdG91dDpcXG4gIDc1OlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRNT0RVTEVfQVVUSE9SKFxcXCJTZWJhc3RpYW4gQ2xhw59lbiBcXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1xcdTAwM2VcXFwiKTtcXG4gIDgwOlxcdE1PRFVMRV9BVVRIT1IoXFxcIkphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjA4LjY4ODYwNDM4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc1ODQ2Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljLCB3aGljaCBpcyBvYnZpb3VzbHkgaW1wb3J0YW50IGZvciB0aGluZ3MgbGlrZSBtaXJyb3JpbmcsIGxvYWQgYmFsYW5jaW5nLCBvciBldmVuIGp1c3QgZGVidWdnaW5nIG5ldHdvcmsgdHJhZmZpYy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkLCBob3cgdGhleSdyZSBiZWluZyB1c2VkIHdpdGhpbiB0aG9zZSBjb250ZXh0cywgYW5kIHRoZSBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgYXJndW1lbnRzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uIOKAkyB3aGF0IHNrYiBjb250ZXh0IGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gSG93IGFyZSB0aGUgSVAgaGVhZGVycyBtb2RpZmllZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjYWxsIHNpdGVzLCBtYXliZSBpZGVudGlmeSBhbnkgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYnVncywgb3IganVzdCBnZW5lcmFsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBkdXBsaWNhdGVkIHBhY2tldHMgdGhyb3VnaCB0aGUgTmV0ZmlsdGVyIHN0YWNrLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgbGFyZ2VyIGFzcGVjdCBvZiBuZXR3b3JrIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBvciB0cmFmZmljIHNoYXBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjExLjI2NDQ1MzU4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MTc3NjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9kdXBfaXB2WzQ2XVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtNy1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oOjg6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtOS1cXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmgtNi1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oOjc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmgtOC1cXHRcXHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZik7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYz0yND1zdGF0aWMgYm9vbCBuZl9kdXBfaXB2NF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy01MC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzo1MTp2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTItXFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYz0yMD1zdGF0aWMgdm9pZCBuZnRfZHVwX2lwdjRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjMwOlxcdG5mX2R1cF9pcHY0KG5mdF9uZXQocGt0KSwgcGt0LVxcdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFxcdTAwMjZndywgb2lmKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMzEtfVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM9MTk9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6NDc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTQ4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2Nl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0yNy1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM6Mjg6XFx0bmZfZHVwX2lwdjYobmZ0X25ldChwa3QpLCBwa3QtXFx1MDAzZXNrYiwgbmZ0X2hvb2socGt0KSwgZ3csIG9pZik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jLTI5LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM9Mzc9dGVlX3RnNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQxLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6NDI6XFx0bmZfZHVwX2lwdjQoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcXHUwMDI2aW5mby1cXHUwMDNlZ3cuaW4sIG9pZik7XFxubmV0L25ldGZpbHRlci94dF9URUUuYy00My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM9NDk9dGVlX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTUzLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6NTQ6XFx0bmZfZHVwX2lwdjYoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcXHUwMDI2aW5mby1cXHUwMDNlZ3cuaW42LCBvaWYpO1xcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjEzLjcxNjIzNTM0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTA0NTU1OTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9uZSBhdCB0aGF0LiBJdCBsb29rcyBsaWtlIHdlJ3JlIGVuYWJsaW5nIGZ1enppbmcgZm9yIHNvbWV0aGluZyB0aGF0ICpkaXJlY3RseSogbW9kaWZpZXMgY29yZSBrZXJuZWwgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGxvZ2ljLiBTcGVjaWZpY2FsbHksIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYHNrX2J1ZmZgLCBgbmZfZHVwX2lwdjRgLCBgbmZfZHVwX2lwdjZgLCBhbmQgYG5mX2NvcHlgLiBUaGVzZSBhcmUgY3JpdGljYWwgcGllY2VzOyBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEuXG5cbk15IHByaW1hcnkgZm9jdXMgcG9pbnRzIGhlcmUgYXJlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAsIGFzIHRob3NlIGFyZSBleHBsaWNpdGx5IGNhbGxlZCBvdXQuIFRoYXQgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBjb25jZW50cmF0ZSBpdHMgZWZmb3J0cywgb3IgYXQgbGVhc3Qgd2hlcmUgaW5pdGlhbCB0YXJnZXRzIHdpbGwgYmUuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBjb3JyZWN0IG1vZHVsZXMgZW5hYmxlZC4gSSBrbm93IHdlJ2xsIG5lZWQgYE5GX0RVUF9JUFY0YCBhbmQgYE5GX0RVUF9JUFY2YC4gQnV0IGl0J3MgYWxzbyB3b3J0aCBjaGVja2luZyB3aGV0aGVyIGBuZnRfZHVwYCwgYHh0X1RFRWAsIG9yIGJhc2ljIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBhcmUgZW5hYmxlZCwgYmVjYXVzZSB0aGV5IGNvdWxkIGJlIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIGZlYXR1cmVzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFsc28gaGF2ZSBgTkVURklMVEVSYCwgYE5GVF9EVVBfSVBWNGAsIGBORlRfRFVQX0lQVjZgLCBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgLCBgSU5FVGAsIGFuZCBgSVBWNmAgY29uZmlndXJlZC4gQmVzdCBwcmFjdGljZSBpcyB0byBjb3ZlciB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZW5zdXJlIHRoZSBmZWF0dXJlIHdpbGwgd29yayBhcyBpbnRlbmRlZCB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cblxuTmV4dCBzdGVwOiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgdGhlc2UgcmVseSBvbiB0byB3b3JrIGNvcnJlY3RseSwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZW5hYmxlZC4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBlc3NlbnRpYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzoyOC43NjE3OTc1MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQxNjMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0RVUF9JUFZbNDZdXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDI9Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDYtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDc6Y29uZmlnIE5GVF9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ4LVxcdHRyaXN0YXRlIFxcXCJJUHY0IG5mX3RhYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTM4PWNvbmZpZyBORlRfUkVKRUNUX0lQVjZcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTQyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjQzOmNvbmZpZyBORlRfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiSVB2NiBuZl90YWJsZXMgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjI4Ljg5NDIyNDc4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTUxMDMwNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZCBhcm91bmQgbGluZSA0Ny4gU29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZSwgYW5kIEkgc3VzcGVjdCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBjaGFzaW5nLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhhdCBzZWN0aW9uIGFuZCBqb2cgbXkgbWVtb3J5IG9mIHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGNvbnRleHQgYW5kIG1pZ2h0IHJlbWluZCBtZSBvZiBhIGNyaXRpY2FsIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzozMS40NDUyNTc2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRpZiBORl9UQUJMRVNfSVBWNFxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XFxuICA0MzpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbiAgNDU6XFx0XFx0dHJpc3RhdGVcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIE5GVF9EVVBfSVBWNFxcbiAgNDg6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xcbiAgNTA6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY0XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkZUX0ZJQl9JUFY0XFxuICA1NTpcXHRcXHRzZWxlY3QgTkZUX0ZJQlxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFxcXCJcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IEZJQiBsb29rdXBzLCBlLmcuIGZvciByZXZlcnNlIHBhdGggZmlsdGVyaW5nLlxcbiAgNTk6XFx0XFx0ICBJdCBhbHNvIGFsbG93cyBxdWVyeSBvZiB0aGUgRklCIGZvciB0aGUgcm91dGUgdHlwZSwgZS5nLiBsb2NhbCwgdW5pY2FzdCxcXG4gIDYwOlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgTkZfVEFCTEVTX0FSUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzozMS40NDUzNTQzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc5MDAzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIElQdjYgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgYXJvdW5kIGxpbmUgNDMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gaXMgc3RydWN0dXJlZC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBkZXBlbmRlbmN5LiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJ20gbGlrZWx5IHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZmVhdHVyZSdzIGF2YWlsYWJpbGl0eSBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9ucywgb3IgSSBtaWdodCBiZSBkZWJ1Z2dpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBJUHY2IGZpbHRlcmluZy4gUGVyaGFwcyBJIGFtIGludmVzdGlnYXRpbmcgYSByZWNlbnQgcGF0Y2ggYW5kIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgY29ycmVjdGx5IGxpbmtlZCB1cCB0byB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjMzLjkyNDM2MDE5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFxuICAzNjpcXHRpZiBORl9UQUJMRVNfSVBWNlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY2XFxuICAzOTpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjZcXG4gIDQwOlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbiAgNDE6XFx0XFx0dHJpc3RhdGVcXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIE5GVF9EVVBfSVBWNlxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xcbiAgNDY6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgTkZUX0ZJQl9JUFY2XFxuICA1MTpcXHRcXHR0cmlzdGF0ZSBcXFwibmZfdGFibGVzIGZpYiAvIGlwdjYgcm91dGUgbG9va3VwIHN1cHBvcnRcXFwiXFxuICA1MjpcXHRcXHRzZWxlY3QgTkZUX0ZJQlxcbiAgNTM6XFx0XFx0aGVscFxcbiAgNTQ6XFx0XFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjYgRklCIGxvb2t1cHMsIGUuZy4gZm9yIHJldmVyc2UgcGF0aCBmaWx0ZXJpbmcuXFxuICA1NTpcXHRcXHQgIEl0IGFsc28gYWxsb3dzIHF1ZXJ5IG9mIHRoZSBGSUIgZm9yIHRoZSByb3V0ZSB0eXBlLCBlLmcuIGxvY2FsLCB1bmljYXN0LFxcbiAgNTY6XFx0XFx0ICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRlbmRpZiAjIE5GX1RBQkxFU19JUFY2XFxuICA1OTpcXHRlbmRpZiAjIE5GX1RBQkxFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzozMy45MjQ0NzIzNDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0MzkwNjg4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyB0aGUgYEtjb25maWdgIGZvciBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgKipcblxuT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAgdGFyZ2V0IGluIG5ldGZpbHRlci4gQmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBzbyBsZXQgbWUgcHVsbCB1cCBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBuZWFyIHRoZSBlbmQgb2YgdGhlIG5ldGZpbHRlciB0YXJnZXQgZGVmaW5pdGlvbnMuIEknbGwganVtcCB0byBhcm91bmQgbGluZSAxMDU3IG9yIHNvIOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgdGhleSBncm91cCBzaW1pbGFyIGZlYXR1cmVzLiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyIHRoZXJlLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBvYnZpb3VzIGlzc3VlIG9yIGZ1cnRoZXIgY29udGV4dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEknbSBsb29raW5nIGZvciB0aGUgdXN1YWw6IHRoZSBkZXBlbmRlbmN5IHRyZWUsIGFueSBkZWZhdWx0IG9wdGlvbnMsIGFuZCBhIGNsZWFyIGRlc2NyaXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDM6NTcuMzYzNTQzODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDU1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDU1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuMTA1NjpcXHRcXG4xMDU3OlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbjEwNTg6XFx0XFx0dHJpc3RhdGUgJ1xcXCJURUVcXFwiIC0gcGFja2V0IGNsb25pbmcgdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uJ1xcbjEwNTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4xMDYwOlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG4xMDYxOlxcdFxcdGRlcGVuZHMgb24gSVA2X05GX0lQVEFCTEVTIHx8ICFJUDZfTkZfSVBUQUJMRVNcXG4xMDYyOlxcdFxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbjEwNjM6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xcbjEwNjQ6XFx0XFx0aGVscFxcbjEwNjU6XFx0XFx0VGhpcyBvcHRpb24gYWRkcyBhIFxcXCJURUVcXFwiIHRhcmdldCB3aXRoIHdoaWNoIGEgcGFja2V0IGNhbiBiZSBjbG9uZWQgYW5kXFxuMTA2NjpcXHRcXHR0aGlzIGNsb25lIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgbmV4dGhvcC5cXG4xMDY3OlxcdFxcbjEwNjg6XFx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZXFxuMTA2OTpcXHRcXHR0cmlzdGF0ZSAnXFxcIlRQUk9YWVxcXCIgdGFyZ2V0IHRyYW5zcGFyZW50IHByb3h5aW5nIHN1cHBvcnQnXFxuMTA3MDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuMTA3MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbjEwNzI6XFx0XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgSVA2X05GX0lQVEFCTEVTPW5cXG4xMDczOlxcdFxcdGRlcGVuZHMgb24gSVBfTkZfTUFOR0xFIHx8IE5GVF9DT01QQVRcXG4xMDc0OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbjEwNzU6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQNl9ORl9JUFRBQkxFUyAhPSBuXFxuMTA3NjpcXHRcXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcXG4xMDc3OlxcdFxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG4xMDc4OlxcdFxcdGhlbHBcXG4xMDc5OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBhIGBUUFJPWFknIHRhcmdldCwgd2hpY2ggaXMgc29tZXdoYXQgc2ltaWxhciB0b1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzo1Ny4zNjM2NTQ3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg0NTIzOTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIER1cGxpY2F0aW9uIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHJlbGF0ZWQgdG8gSVBWNCBhbmQgSVBWNiBkdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIuIEknbGwgc3RhcnQgYnkgY29uZmlybWluZyB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE5GX0RVUF9JUFY0YCBhbmQgYE5GX0RVUF9JUFY2YC4gSSBzZWUgdGhhdCBgTkZfRFVQX0lQVjRgIGNhbiBiZSBlbmFibGVkIGRpcmVjdGx5LCBvciB0aHJvdWdoIHRoZSBOZXRmaWx0ZXIgdGFibGUgZXh0ZW5zaW9ucywgYE5GVF9EVVBfSVBWNGAsIG9yIGV2ZW4gdmlhIHRoZSBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgIG9wdGlvbiwgd2hpY2ggaW1wbGllcyBzb21lIGxldmVsIG9mIFRFRSBzdXBwb3J0IGlzIGJlaW5nIGxldmVyYWdlZC4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBJUHY2IGFuZCBgTkZfRFVQX0lQVjZgLCB3aGljaCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseSBvciB2aWEgYE5GVF9EVVBfSVBWNmAgb3IgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYm90aCBgTkZfRFVQX0lQVjRgIGFuZCBgTkZfRFVQX0lQVjZgIGhhdmUgYSByYXRoZXIgcmVsYXhlZCBkZXBlbmRlbmN5IG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHNwZWNpZmljYWxseSB0aGF0IHRoZXkgY2FuIGV4aXN0IHdpdGggKm9yKiB3aXRob3V0IGl0OiBgIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tgLiBUaGF0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIGd1YXJkaW5nIHRoZSBgc2tiYCBmaWVsZCB3aXRoIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgYmFzZWQgb24gd2hldGhlciBgTkZfRFVQX0lQVjRgIG9yIGBORl9EVVBfSVBWNmAgYXJlIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci5cblxuU28sIHRvIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlncywgSSdsbCBuZWVkIHRvIGNvbnNpZGVyOiBgTkZfRFVQX0lQVjRgLCBgTkZfRFVQX0lQVjZgLCBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCB0aGUgY29tbW9uIGRlbm9taW5hdG9yIG9mIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuXG5cblRoZSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcjogYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHRvb2wncyBwYXJhbWV0ZXJzIGFuZCByZXF1aXJlbWVudHMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zLiBJIHNlZTpcbi0gYFdvcnRoRnV6emluZ2A6IFRydWUsIHdoaWNoIGlzIGV4cGVjdGVkLlxuLSBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBUaGV5IGFyZSBwcmVjaXNlbHkgd2hhdCBJIGFudGljaXBhdGVkLlxuLSBgRW5hYmxlQ29uZmlnc2A6IExvb2tzIHNwb3Qgb247IGFsbCBuZWNlc3NhcnkgY29uZmlncyBhcmUgbGlzdGVkLlxuLSBgUmVhc29uaW5nYDogU2VlbXMgY29uY2lzZS5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTMzLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjE0LjIwODkzMzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NzQxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAnbmZfZHVwbGljYXRlZCcgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAnbmZfZHVwbGljYXRlZCcgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDoxNC4zNTY2MTc0MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTQ3MjM3MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MTQuMzU3NDU3MjQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Nzc1NDYzOTI4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxcblxcbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4OTI0Mzk4ZDI0Yzg5ZmZkYzVkMDg2Y2NkOGE3NDhhYjNlZDcwYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwNzowMjowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCA1NTIyNzE2ZGY4ZmZmLi5mNWM3YjdiMWNlZGVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTgxMiw2ICs4MTIsNyBAQCBlbnVtIHNrYl90c3RhbXBfdHlwZSB7XG4gICpcdEByZWRpcmVjdGVkOiBwYWNrZXQgd2FzIHJlZGlyZWN0ZWQgYnkgcGFja2V0IGNsYXNzaWZpZXJcbiAgKlx0QGZyb21faW5ncmVzczogcGFja2V0IHdhcyByZWRpcmVjdGVkIGZyb20gdGhlIGluZ3Jlc3MgcGF0aFxuICAqXHRAbmZfc2tpcF9lZ3Jlc3M6IHBhY2tldCBzaGFsbCBza2lwIG5mIGVncmVzcyAtIHNlZSBuZXRmaWx0ZXJfbmV0ZGV2LmhcbisgKlx0QG5mX2R1cGxpY2F0ZWQ6IHBhY2tldCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGFjdGlvblxuICAqXHRAcGVla2VkOiB0aGlzIHBhY2tldCBoYXMgYmVlbiBzZWVuIGFscmVhZHksIHNvIHN0YXRzIGhhdmUgYmVlblxuICAqXHRcdGRvbmUgZm9yIGl0LCBkb24ndCBkbyB0aGVtIGFnYWluXG4gICpcdEBuZl90cmFjZTogbmV0ZmlsdGVyIHBhY2tldCB0cmFjZSBmbGFnXG5AQCAtMTAyMyw2ICsxMDI0LDkgQEAgc3RydWN0IHNrX2J1ZmYge1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1NLSVBfRUdSRVNTXG4gXHRfX3U4XHRcdFx0bmZfc2tpcF9lZ3Jlc3M6MTtcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuK1x0X191OFx0XHRcdG5mX2R1cGxpY2F0ZWQ6MTtcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1NLQl9ERUNSWVBURURcbiBcdF9fdThcdFx0XHRkZWNyeXB0ZWQ6MTtcbiAjZW5kaWZcbkBAIC01MjAwLDYgKzUyMDQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuIFx0bmZfY29ubnRyYWNrX3B1dChza2JfbmZjdChkc3QpKTtcbiAjZW5kaWZcbiBcdGRzdC1cdTAwM2VzbG93X2dybyA9IHNyYy1cdTAwM2VzbG93X2dybztcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuK1x0ZHN0LVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSBzcmMtXHUwMDNlbmZfZHVwbGljYXRlZDtcbisjZW5kaWZcbiBcdF9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbmluZGV4IDlhNzczNTAyZjEwYWMuLjhmZTMxYTBkYjA2M2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiBcdHN0cnVjdCBpcGhkciAqaXBoO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuK1x0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuIFx0XHRnb3RvIG91dDtcbiBcdC8qXG4gXHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxuQEAgLTg2LDYgKzg2LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gXG4gXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4rXHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiBcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuIFx0XHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuaW5kZXggNmRhMzEwMmI3YzFiMy4uZTBmZGI0M2Q3ZDNkZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiB7XG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4rXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoc2tiID09IE5VTEwpXG5AQCAtNjQsNiArNjQsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRcdC0taXBoLVx1MDAzZWhvcF9saW1pdDtcbiBcdH1cbiBcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbitcdFx0c2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gXHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDoxNC4zNTc0NTk0NDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc2NzkwMzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgS01TQU4gY29uY2VybnMgd2l0aCB0aGVzZSBjaGFuZ2VzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHdlJ3JlIGFkZGluZyB0aGUgYG5mX2R1cGxpY2F0ZWQ6MWAgYml0ZmllbGQgdG8gdGhlIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIHRoZW4gY29weWluZyBpdHMgdmFsdWUgaW4gYG5mX2NvcHlgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoIHRoaXM/XG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBza19idWZmYCBpcyAqYWN0dWFsbHkqIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgdGhlIGtleS4gQXJlIHdlIHVzaW5nIGBrbWVtX2NhY2hlYCwgYXJlIHdlIHJlbHlpbmcgb24gYG1lbXNldGAgYXQgYW55IHBvaW50LCBvciBpcyB0aGVyZSBhbm90aGVyIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbSBhdCBwbGF5PyBUaGF0J3Mgd2hhdCBJJ20gbG9va2luZyBmb3IuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyB0aGVzZSBiaXRmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIGFsbG9jYXRpb24uXG5cblRvIGRvIHRoaXMsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIGh1bnQgZG93biB0aGUgYWxsb2NhdG9ycywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX2FsbG9jX3NrYmAuIExldCdzIHNlZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhbGxvY2F0aW9uIHBhdGhzIG9yIG1vZGlmaWVzIGV4aXN0aW5nIG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBhbGxvY2F0aW9uIGNvZGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXppbmcgdGhpcyBuZXcgYml0ZmllbGQsIG9yIGlmIGl0IG1pZ2h0IGJlIGxlZnQgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gV2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIG90aGVyIG1ldGhvZHMsIHN1Y2ggYXMgYGttZW1fY2FjaGVgIGFuZCBgbWVtc2V0YC5cblxuSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IGNvbWIgdGhyb3VnaCB0aGUgY29kZS4gSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgYHN0cnVjdCBza19idWZmYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcGxhY2Ugd2hlcmUgd2UgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MjMuMTI1MzY3MDIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDY2MDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcXHRfX2FsbG9jX3NrYlxcdC1cXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXFx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cXHRcXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtODU0LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVxcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxODA9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5My1cXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlZGF0YV9sZW47XFxubmV0L2NvcmUvc2tidWZmLmM6MjE5NDpcXHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5NS1cXHRcXHRcXHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyOD1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzItXFx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjIzMzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjM0LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjUwNT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIyLVxcdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6MjUyMzpcXHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gKyBza2ItXFx1MDAzZWxlbiArIG5ld3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjQtXFx0XFx0XFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00NzkwPXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTU4LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NTk6XFx0XFx0XFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjAtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDoyMy4xOTAwMzE5MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ2OTQzMDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNLQiBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIHNvY2tldCBidWZmZXJzIGFyZSBhY3R1YWxseSBhbGxvY2F0ZWQuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgX19hbGxvY19za2JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEkgd2FudCB0byBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIHNldHVwLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIGhvdyByZXNvdXJjZXMgYXJlIG1hbmFnZWQsIG1heWJlIGV4YW1pbmluZyBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBzbGFiIGFsbG9jYXRvciBvciBzcGVjaWZpYyBOVU1BIGNvbnNpZGVyYXRpb25zLiBUaGVuLCBJ4oCZbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYHNrX2J1ZmZgIGRlZmluaXRpb24gaXRzZWxmLCBmb3VuZCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB0aWUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyB0byB0aGUgYnVmZmVyIHN0cnVjdHVyZSBpdHNlbGYg4oCTIHdoYXQgYXJlIHRoZSBjb3JlIGZpZWxkcyB0aGF0IGFyZSBpbml0aWFsaXplZCwgd2hhdCdzIHRoZSBtZW1vcnkgbGF5b3V0LCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgbWFwIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIHRoZSBzdHJ1Y3R1cmU/IEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIOKAkyB0aGUgbWVjaGFuaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGNvbWJpbmVkIHdpdGggdGhlIHN0cnVjdHVyZSdzIGRlc2lnbiDigJMgdG8gcGlucG9pbnQgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24gaW50byBuZXR3b3JrIHBlcmZvcm1hbmNlIG9yIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0byBTS0JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MjcuNjU5NDY2MTc3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0ICpcXG4gNjcxOlxcdCAqXFx0QnVmZmVycyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgZnJvbSBpbnRlcnJ1cHRzIHVzaW5nIGEgQGdmcF9tYXNrIG9mXFxuIDY3MjpcXHQgKlxcdCVHRlBfQVRPTUlDLlxcbiA2NzM6XFx0ICovXFxuIDY3NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbiA2NzU6XFx0XFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuIDY3NjpcXHR7XFxuIDY3NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gNjc4OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTtcXG4gNjc5OlxcdFxcdHU4ICpkYXRhO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxcbiA2ODI6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNjg1OlxcdFxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcXG4gNjg2OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDY4NzpcXHRcXHR9XFxuIDY4ODpcXHRcXHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcXG4gNjg5OlxcdFxcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxcbiA2OTA6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcXG4gNjkzOlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldCh0cnVlKTtcXG4gNjk0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNjk1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTY6XFx0XFx0fSBlbHNlIGlmICghaW5faGFyZGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcXG4gNjk3OlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjk4OlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XFxuIDY5OTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAwOlxcdFxcdH1cXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFza2IpIHtcXG4gNzAzOlxcdGZhbGxiYWNrOlxcbiA3MDQ6XFx0XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcXG4gNzA1OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNzA2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDc6XFx0XFx0fVxcbiA3MDg6XFx0XFx0c2tidWZmX2NsZWFyKHNrYik7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXFxuIDcxMTpcXHRcXHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFxcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xcbiA3MTI6XFx0XFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXFxuIDcxMzpcXHRcXHQgKiBCb3RoIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiX3NoYXJlZF9pbmZvIGFyZSBjYWNoZSBsaW5lIGFsaWduZWQuXFxuIDcxNDpcXHRcXHQgKi9cXG4gNzE1OlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xcbiA3MTY6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcXG4gNzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbiA3MTg6XFx0XFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cXG4gNzE5OlxcdFxcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxcbiA3MjA6XFx0XFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNzI1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2ZjbG9uZXMgKmZjbG9uZXM7XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdFxcdGZjbG9uZXMgPSBjb250YWluZXJfb2Yoc2tiLCBzdHJ1Y3Qgc2tfYnVmZl9mY2xvbmVzLCBza2IxKTtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0XFx0Lyogc2tiLVxcdTAwM2VmY2xvbmUgaXMgYSAyYml0cyBmaWVsZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MjcuNjYwMjk3MDk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTIyODA3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHNrYnVmZl9jbGVhcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRoZSBwcm9ibGVtIGxpa2VseSByZWxhdGVzIHRvIHRoZSBrZXJuZWwncyBoYW5kbGluZyBvZiBTS0JzIChTb2NrZXQgQnVmZmVycyksIGFuZCBgc2tidWZmX2NsZWFyYCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc2VlLi4uSSB0aGluayBJIHJlbWVtYmVyIGl0IGJlaW5nIGRlZmluZWQgZWl0aGVyIGluIHRoZSBtYWluIGBza2J1ZmYuaGAgaGVhZGVyIGZpbGUsIHdoaWNoIGlzIHVzdWFsbHkgZm91bmQgdW5kZXIgYGluY2x1ZGUvbGludXhgLCBvciBwZXJoYXBzIGluIHRoZSBjb3JlIG5ldHdvcmsgY29kZSwgbGlrZWx5IHVuZGVyIGBuZXQvY29yZWAgd2l0aGluIGBza2J1ZmYuY2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24sIHNvIGl0J3MgcHJvYmFibHkgZGVjbGFyZWQgKmFuZCogZGVmaW5lZCBpbiBvbmUgb2YgdGhvc2UgdHdvIGxvY2F0aW9ucy4gSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBzb3VyY2UgZmlsZS4gTGV0IG1lIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIG9uIGl0cyB1c2FnZSBhbHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDozMi4wNTI1ODAzNzRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE2MDIyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tidWZmX2NsZWFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjMyLjE2Mzc0ODkwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjEwODM5NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipGaW5kaW5nIGBza2J1ZmZfY2xlYXJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGZ1bmN0aW9uIGBza2J1ZmZfY2xlYXJgLiBJJ20gZ3Vlc3NpbmcgaXQncyBhIHByZXR0eSBmdW5kYW1lbnRhbCBvcGVyYXRpb24gcmVsYXRlZCB0byBgc2tfYnVmZnNgLCBzbyBpdCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGxvY2F0ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvcmUgbmV0d29ya2luZyBoZWFkZXJzLCBwcm9iYWJseSB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBgc2tidWZmLmhgIG9yLCBwb3RlbnRpYWxseSwgbG93ZXItbGV2ZWwgYnVmZmVyIG1hbmFnZW1lbnQuIEkga25vdyBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgd2hpbGUgbm90IGFsd2F5cyBleGhhdXN0aXZlLCBvZnRlbiBpbmNsdWRlcyBmdW5jdGlvbiBkZXNjcmlwdGlvbnMsIHNvIEknbGwgYWxzbyBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaWYgSSBoYXZlIHF1aWNrIGFjY2VzcyB0byBpdCAoZS5nLiB0aHJvdWdoIGEgYnVpbHQgaW4gaGVscCBzeXN0ZW0pLiBJZiBJJ20gbHVja3ksIEkgbWlnaHQgZXZlbiBiZSBhYmxlIHRvIGdyZXAgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBLbm93aW5nIHRoZSBmdW5jdGlvbidzIG5hbWUgY2FuIG9mdGVuIGd1aWRlIG1lIHByZXR0eSBlZmZpY2llbnRseSwgZXNwZWNpYWxseSBpZiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBjb25zaXN0ZW50LCB3aGljaCBpcyB0eXBpY2FsIGluIGtlcm5lbCBjb2RlLiBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJZiBpdCdzIHVzZWQgaW4gYW55IG9idmlvdXMgcGxhY2VzLCB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBzaG91bGQgdGVsbCBtZSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjM0OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjM1LjM3NDU5MDYwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNTU3OTMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2J1ZmZfY2xlYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMzE3LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVxcdFxcdGthc2FuX21lbXBvb2xfdW5wb2lzb25fb2JqZWN0KHNrYnNbaV0sIHNrYnVmZl9jYWNoZV9zaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzozODA6XFx0XFx0c2tidWZmX2NsZWFyKHNrYnNbaV0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0OC1cXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcXHUwMDI2c2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTgtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk5OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMC1cXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MDpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDg6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDozNy4zODAxNzYxMTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNTUyNzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2tidWZmX2NsZWFyYCoqXG5cbkFscmlnaHQsIGxldCdzIGNyYWNrIG9wZW4gdGhlIGBuZXQvY29yZS9za2J1ZmYuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgYHNrYnVmZl9jbGVhcmAgZnVuY3Rpb24uIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgaG93IHRoZSBzb2NrZXQgYnVmZmVyIGlzIGNsZWFuZWQgdXAuIFdl4oCZcmUgZGVhbGluZyB3aXRoIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uIGhlcmUsIGFuZCBJIG5lZWQgYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgcGFja2V0IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGNvdmVyIHRoZSBrZXkgYXNwZWN0czogZnJlZWluZyB0aGUgZGF0YSwgcG90ZW50aWFsbHkgcmVsZWFzaW5nIHJlZmVyZW5jZXMsIGFuZCBwZXJoYXBzIHNvbWUgemVyb2luZyBvciBzY3J1YmJpbmcgb2Ygc2Vuc2l0aXZlIGFyZWFzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYXMgaXQgc2l0cyBpbiB0aGUgYnJvYWRlciBlY29zeXN0ZW0gdG8gZ2FpbiBhIGZ1bGwgcGVyc3BlY3RpdmUuIEknbSBrZWVuIHRvIHNwb3QgYW55IGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NDEuNTg1NzA1ODU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0XFxuIDMxMTpcXHQvKlxcbiAzMTI6XFx0ICogT25seSBjbGVhciB0aG9zZSBmaWVsZHMgd2UgbmVlZCB0byBjbGVhciwgbm90IHRob3NlIHRoYXQgd2Ugd2lsbFxcbiAzMTM6XFx0ICogYWN0dWFsbHkgaW5pdGlhbGlzZSBsYXRlci4gSGVuY2UsIGRvbid0IHB1dCBhbnkgbW9yZSBmaWVsZHMgYWZ0ZXJcXG4gMzE0OlxcdCAqIHRoZSB0YWlsIHBvaW50ZXIgaW4gc3RydWN0IHNrX2J1ZmYhXFxuIDMxNTpcXHQgKi9cXG4gMzE2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzE3OlxcdHtcXG4gMzE4OlxcdFxcdC8qIFJlcGxhY2UgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKVxcbiAzMTk6XFx0XFx0ICogd2l0aCB0d28gc21hbGxlciBtZW1zZXQoKSwgd2l0aCBhIGJhcnJpZXIoKSBiZXR3ZWVuIHRoZW0uXFxuIDMyMDpcXHRcXHQgKiBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gaW5saW5lIGJvdGggY2FsbHMuXFxuIDMyMTpcXHRcXHQgKi9cXG4gMzIyOlxcdFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgXFx1MDAzYz0gMTI4KTtcXG4gMzIzOlxcdFxcdG1lbXNldChza2IsIDAsIDEyOCk7XFxuIDMyNDpcXHRcXHRiYXJyaWVyKCk7XFxuIDMyNTpcXHRcXHRtZW1zZXQoKHZvaWQgKilza2IgKyAxMjgsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSAtIDEyOCk7XFxuIDMyNjpcXHR9XFxuIDMyNzpcXHRcXG4gMzI4OlxcdC8qKlxcbiAzMjk6XFx0ICogbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsgLSBvYnRhaW4gYSBudW1iZXIgb2YgemVyb2VkIHNrYiBoZWFkcyBmcm9tIHRoZSBjYWNoZVxcbiAzMzA6XFx0ICogQHNrYnM6IHBvaW50ZXIgdG8gYW4gYXQgbGVhc3QgQG4tc2l6ZWQgYXJyYXkgdG8gZmlsbCB3aXRoIHNrYiBwb2ludGVyc1xcbiAzMzE6XFx0ICogQG46IG51bWJlciBvZiBlbnRyaWVzIHRvIHByb3ZpZGVcXG4gMzMyOlxcdCAqXFxuIDMzMzpcXHQgKiBUcmllcyB0byBvYnRhaW4gQG4gXFx1MDAyNnNrX2J1ZmYgZW50cmllcyBmcm9tIHRoZSBOQVBJIHBlcmNwdSBjYWNoZSBhbmQgd3JpdGVzXFxuIDMzNDpcXHQgKiB0aGUgcG9pbnRlcnMgaW50byB0aGUgcHJvdmlkZWQgYXJyYXkgQHNrYnMuIElmIHRoZXJlIGFyZSBsZXNzIGVudHJpZXNcXG4gMzM1OlxcdCAqIGF2YWlsYWJsZSwgdHJpZXMgdG8gcmVwbGVuaXNoIHRoZSBjYWNoZSBhbmQgYnVsay1hbGxvY2F0ZXMgdGhlIGRpZmYgZnJvbVxcbiAzMzY6XFx0ICogdGhlIE1NIGxheWVyIGlmIG5lZWRlZC5cXG4gMzM3OlxcdCAqIFRoZSBoZWFkcyBhcmUgYmVpbmcgemVyb2VkIHdpdGggZWl0aGVyIG1lbXNldCgpIG9yICVfX0dGUF9aRVJPLCBzbyB0aGV5IGFyZVxcbiAzMzg6XFx0ICogcmVhZHkgZm9yIHssX199YnVpbGRfc2tiX2Fyb3VuZCgpIGFuZCBkb24ndCBoYXZlIGFueSBkYXRhIGJ1ZmZlcnMgYXR0YWNoZWQuXFxuIDMzOTpcXHQgKiBNdXN0IGJlIGNhbGxlZCAqb25seSogZnJvbSB0aGUgQkggY29udGV4dC5cXG4gMzQwOlxcdCAqXFxuIDM0MTpcXHQgKiBSZXR1cm46IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIHNrYnMgKEBuIGlmIG5vIGFjdHVhbCBhbGxvY2F0aW9uXFxuIDM0MjpcXHQgKlxcdCAgIG5lZWRlZCBvciBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoKSBkaWRuJ3QgZmFpbCkuXFxuIDM0MzpcXHQgKi9cXG4gMzQ0OlxcdHUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjQxLjU4NTk0MzA2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDcyNjcyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgc2tfYnVmZiBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGxheW91dCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBwb3NpdGlvbmluZyBvZiB0aGUgYG5mX2R1cGxpY2F0ZWRgIGZpZWxkIGluIHJlbGF0aW9uIHRvIHRoZSBgdGFpbGAgcG9pbnRlci4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGNydWNpYWwgZm9yIFsqKmluc2VydCByZWxldmFudCByZWFzb24gcmVsYXRlZCB0byB0aGUgdXNlcidzIGZpZWxkLCBlLmcuLCBvcHRpbWl6aW5nIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYywgZGVidWdnaW5nIGEgcGVyZm9ybWFuY2UgaXNzdWUsIGFuYWx5emluZyBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXRpZXMsIGV0Yy4qKl0uXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBvcGVuIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMTAyMy4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgZmllbGRzIGFyZSBkZWZpbmVkIG5lYXJieSwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBvZmZzZXQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgd2lsbCBbKippbnNlcnQgZXhwZWN0YXRpb24gcmVsYXRlZCB0byB0aGUgdXNlcidzIGZpZWxkLCBlLmcuLCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCByZXZlYWwgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCB1bmNvdmVyIGEgc3VidGxlIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWUsIGV0Yy4qKl0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NDguNjU4NjIwMjA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMTA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1ZTKVxcbjEwMTE6XFx0XFx0X191OFxcdFxcdFxcdGlwdnNfcHJvcGVydHk6MTtcXG4xMDEyOlxcdCNlbmRpZlxcbjEwMTM6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFUylcXG4xMDE0OlxcdFxcdF9fdThcXHRcXHRcXHRuZl90cmFjZToxO1xcbjEwMTU6XFx0I2VuZGlmXFxuMTAxNjpcXHQjaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG4xMDE3OlxcdFxcdF9fdThcXHRcXHRcXHRvZmZsb2FkX2Z3ZF9tYXJrOjE7XFxuMTAxODpcXHRcXHRfX3U4XFx0XFx0XFx0b2ZmbG9hZF9sM19md2RfbWFyazoxO1xcbjEwMTk6XFx0I2VuZGlmXFxuMTAyMDpcXHRcXHRfX3U4XFx0XFx0XFx0cmVkaXJlY3RlZDoxO1xcbjEwMjE6XFx0I2lmZGVmIENPTkZJR19ORVRfUkVESVJFQ1RcXG4xMDIyOlxcdFxcdF9fdThcXHRcXHRcXHRmcm9tX2luZ3Jlc3M6MTtcXG4xMDIzOlxcdCNlbmRpZlxcbjEwMjQ6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4xMDI1OlxcdFxcdF9fdThcXHRcXHRcXHRuZl9za2lwX2VncmVzczoxO1xcbjEwMjY6XFx0I2VuZGlmXFxuMTAyNzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxcbjEwMjg6XFx0XFx0X191OFxcdFxcdFxcdG5mX2R1cGxpY2F0ZWQ6MTtcXG4xMDI5OlxcdCNlbmRpZlxcbjEwMzA6XFx0I2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVEXFxuMTAzMTpcXHRcXHRfX3U4XFx0XFx0XFx0ZGVjcnlwdGVkOjE7XFxuMTAzMjpcXHQjZW5kaWZcXG4xMDMzOlxcdFxcdF9fdThcXHRcXHRcXHRzbG93X2dybzoxO1xcbjEwMzQ6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1NDVFApXFxuMTAzNTpcXHRcXHRfX3U4XFx0XFx0XFx0Y3N1bV9ub3RfaW5ldDoxO1xcbjEwMzY6XFx0I2VuZGlmXFxuMTAzNzpcXHRcXHRfX3U4XFx0XFx0XFx0dW5yZWFkYWJsZToxO1xcbjEwMzg6XFx0XFx0X191OFxcdFxcdFxcdHRjX2RlcHRoOjI7XFxuMTAzOTpcXHQjaWYgZGVmaW5lZChDT05GSUdfTkVUX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfWEdSRVNTKVxcbjEwNDA6XFx0XFx0X191MTZcXHRcXHRcXHR0Y19pbmRleDtcXHQvKiB0cmFmZmljIGNvbnRyb2wgaW5kZXggKi9cXG4xMDQxOlxcdCNlbmRpZlxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHR1MTZcXHRcXHRcXHRhbGxvY19jcHU7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdHVuaW9uIHtcXG4xMDQ2OlxcdFxcdFxcdF9fd3N1bVxcdFxcdGNzdW07XFxuMTA0NzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbjEwNDg6XFx0XFx0XFx0XFx0X191MTZcXHRjc3VtX3N0YXJ0O1xcbjEwNDk6XFx0XFx0XFx0XFx0X191MTZcXHRjc3VtX29mZnNldDtcXG4xMDUwOlxcdFxcdFxcdH07XFxuMTA1MTpcXHRcXHR9O1xcbjEwNTI6XFx0XFx0X191MzJcXHRcXHRcXHRwcmlvcml0eTtcXG4xMDUzOlxcdFxcdGludFxcdFxcdFxcdHNrYl9paWY7XFxuMTA1NDpcXHRcXHRfX3UzMlxcdFxcdFxcdGhhc2g7XFxuMTA1NTpcXHRcXHR1bmlvbiB7XFxuMTA1NjpcXHRcXHRcXHR1MzJcXHRcXHR2bGFuX2FsbDtcXG4xMDU3OlxcdFxcdFxcdHN0cnVjdCB7XFxuMTA1ODpcXHRcXHRcXHRcXHRfX2JlMTZcXHR2bGFuX3Byb3RvO1xcbjEwNTk6XFx0XFx0XFx0XFx0X191MTZcXHR2bGFuX3RjaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NDguNjU4ODg4NDc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTQ3MzUxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlIGlzIGFuIGV4cGVydDpcblxuKipGaW5kaW5nIHRoZSBUYWlsIGluIHRoZSBza19idWZmIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBgdGFpbGAgbWVtYmVyIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIGhhbmRsZXMgcGFja2V0IGRhdGEuIEknbSByZWFzb25hYmx5IGNvbmZpZGVudCBpdCdzICp0aGVyZSosIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGxvY2F0aW9uIGFuZCBob3cgaXQncyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBgc2tfYnVmZmAgc2hvdWxkIHJlc2lkZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NTAuODEzNjI3OTEyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0XFx0fTtcXG4xMDYxOlxcdFxcdH07XFxuMTA2MjpcXHQjaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCkgfHwgZGVmaW5lZChDT05GSUdfWFBTKVxcbjEwNjM6XFx0XFx0dW5pb24ge1xcbjEwNjQ6XFx0XFx0XFx0dW5zaWduZWQgaW50XFx0bmFwaV9pZDtcXG4xMDY1OlxcdFxcdFxcdHVuc2lnbmVkIGludFxcdHNlbmRlcl9jcHU7XFxuMTA2NjpcXHRcXHR9O1xcbjEwNjc6XFx0I2VuZGlmXFxuMTA2ODpcXHQjaWZkZWYgQ09ORklHX05FVFdPUktfU0VDTUFSS1xcbjEwNjk6XFx0XFx0X191MzJcXHRcXHRzZWNtYXJrO1xcbjEwNzA6XFx0I2VuZGlmXFxuMTA3MTpcXHRcXG4xMDcyOlxcdFxcdHVuaW9uIHtcXG4xMDczOlxcdFxcdFxcdF9fdTMyXFx0XFx0bWFyaztcXG4xMDc0OlxcdFxcdFxcdF9fdTMyXFx0XFx0cmVzZXJ2ZWRfdGFpbHJvb207XFxuMTA3NTpcXHRcXHR9O1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHR1bmlvbiB7XFxuMTA3ODpcXHRcXHRcXHRfX2JlMTZcXHRcXHRpbm5lcl9wcm90b2NvbDtcXG4xMDc5OlxcdFxcdFxcdF9fdThcXHRcXHRpbm5lcl9pcHByb3RvO1xcbjEwODA6XFx0XFx0fTtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0X191MTZcXHRcXHRcXHRpbm5lcl90cmFuc3BvcnRfaGVhZGVyO1xcbjEwODM6XFx0XFx0X191MTZcXHRcXHRcXHRpbm5lcl9uZXR3b3JrX2hlYWRlcjtcXG4xMDg0OlxcdFxcdF9fdTE2XFx0XFx0XFx0aW5uZXJfbWFjX2hlYWRlcjtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0X19iZTE2XFx0XFx0XFx0cHJvdG9jb2w7XFxuMTA4NzpcXHRcXHRfX3UxNlxcdFxcdFxcdHRyYW5zcG9ydF9oZWFkZXI7XFxuMTA4ODpcXHRcXHRfX3UxNlxcdFxcdFxcdG5ldHdvcmtfaGVhZGVyO1xcbjEwODk6XFx0XFx0X191MTZcXHRcXHRcXHRtYWNfaGVhZGVyO1xcbjEwOTA6XFx0XFxuMTA5MTpcXHRcXHRzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfaGFuZGxlO1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHQpOyAvKiBlbmQgaGVhZGVycyBncm91cCAqL1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHQvKiBUaGVzZSBlbGVtZW50cyBtdXN0IGJlIGF0IHRoZSBlbmQsIHNlZSBhbGxvY19za2IoKSBmb3IgZGV0YWlscy4gICovXFxuMTA5NjpcXHRcXHRza19idWZmX2RhdGFfdFxcdFxcdHRhaWw7XFxuMTA5NzpcXHRcXHRza19idWZmX2RhdGFfdFxcdFxcdGVuZDtcXG4xMDk4OlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHQqaGVhZCxcXG4xMDk5OlxcdFxcdFxcdFxcdFxcdCpkYXRhO1xcbjExMDA6XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0dHJ1ZXNpemU7XFxuMTEwMTpcXHRcXHRyZWZjb3VudF90XFx0XFx0dXNlcnM7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdCNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcXG4xMTA0OlxcdFxcdC8qIG9ubHkgdXNhYmxlIGFmdGVyIGNoZWNraW5nIC1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgIT0gMCAqL1xcbjExMDU6XFx0XFx0c3RydWN0IHNrYl9leHRcXHRcXHQqZXh0ZW5zaW9ucztcXG4xMTA2OlxcdCNlbmRpZlxcbjExMDc6XFx0fTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0LyogaWYgeW91IG1vdmUgcGt0X3R5cGUgYXJvdW5kIHlvdSBhbHNvIG11c3QgYWRhcHQgdGhvc2UgY29uc3RhbnRzICovXFxuMTExMDpcXHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxuMTExMTpcXHQjZGVmaW5lIFBLVF9UWVBFX01BWFxcdCg3IFxcdTAwM2NcXHUwMDNjIDUpXFxuMTExMjpcXHQjZWxzZVxcbjExMTM6XFx0I2RlZmluZSBQS1RfVFlQRV9NQVhcXHQ3XFxuMTExNDpcXHQjZW5kaWZcXG4xMTE1OlxcdCNkZWZpbmUgUEtUX1RZUEVfT0ZGU0VUXFx0XFx0b2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIF9fcGt0X3R5cGVfb2Zmc2V0KVxcbjExMTY6XFx0XFxuMTExNzpcXHQvKiBpZiB5b3UgbW92ZSB0Y19hdF9pbmdyZXNzIG9yIHRzdGFtcF90eXBlXFxuMTExODpcXHQgKiBhcm91bmQsIHlvdSBhbHNvIG11c3QgYWRhcHQgdGhlc2UgY29uc3RhbnRzLlxcbjExMTk6XFx0ICovXFxuMTEyMDpcXHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxuMTEyMTpcXHQjZGVmaW5lIFNLQl9UU1RBTVBfVFlQRV9NQVNLXFx0XFx0KDMgXFx1MDAzY1xcdTAwM2MgNilcXG4xMTIyOlxcdCNkZWZpbmUgU0tCX1RTVEFNUF9UWVBFX1JTSElGVFxcdFxcdCg2KVxcbjExMjM6XFx0I2RlZmluZSBUQ19BVF9JTkdSRVNTX01BU0tcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyA1KVxcbjExMjQ6XFx0I2Vsc2VcXG4xMTI1OlxcdCNkZWZpbmUgU0tCX1RTVEFNUF9UWVBFX01BU0tcXHRcXHQoMylcXG4xMTI2OlxcdCNkZWZpbmUgVENfQVRfSU5HUkVTU19NQVNLXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMilcXG4xMTI3OlxcdCNlbmRpZlxcbjExMjg6XFx0I2RlZmluZSBTS0JfQkZfTU9OT19UQ19PRkZTRVRcXHRcXHRvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgX19tb25vX3RjX29mZnNldClcXG4xMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDo1MC44MTM5MTMwMDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0MTE2MzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgc2tiIEhlYWRlciBDb3B5aW5nIGFuZCBuZl9kdXBsaWNhdGVkKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYG5mX2R1cGxpY2F0ZWRgIGJlaGF2ZXMgd2l0aGluIGBzdHJ1Y3Qgc2tfYnVmZmAuIFRoZSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgc2luY2UgYG5mX2R1cGxpY2F0ZWRgIGlzIHBvc2l0aW9uZWQgYmVmb3JlIGB0YWlsYCBpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdCwgaXRzIGluaXRpYWwgdmFsdWUgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIHdoZW5ldmVyIGFuIFNLQiBpcyBhbGxvY2F0ZWQuIFRoaXMgaXMgYmVjYXVzZSBgc2tidWZmX2NsZWFyKHNrYilgIGVmZmVjdGl2ZWx5IHplcm9lcyBldmVyeXRoaW5nIHVwIHRvIHRoZSBgdGFpbGAgb2Zmc2V0IGR1cmluZyBhbGxvY2F0aW9uLlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIGhvdyBgbmZfZHVwbGljYXRlZGAgaXMgaGFuZGxlZCBkdXJpbmcgU0tCIGhlYWRlciBjb3B5aW5nLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYF9fY29weV9za2JfaGVhZGVyYCwgYHBza2JfY29weWAsIGFuZCBgc2tiX2NvcHlgLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgYG5mX2NvcHlgIGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxue1xuI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcblx0bmZfY29ubnRyYWNrX3B1dChza2JfbmZjdChkc3QpKTtcbiNlbmRpZlxuXHRkc3QtXHUwMDNlc2xvd19ncm8gPSBzcmMtXHUwMDNlc2xvd19ncm87XG4jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuXHRkc3QtXHUwMDNlbmZfZHVwbGljYXRlZCA9IHNyYy1cdTAwM2VuZl9kdXBsaWNhdGVkO1xuI2VuZGlmXG5cdF9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7XG59XG5gYGBcblxuVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgbmZfY29weWAgaXMgY2FsbGVkIGR1cmluZyBTS0IgY2xvbmluZyBhbmQgY29weWluZyB0aHJvdWdoIGBfX2NvcHlfc2tiX2hlYWRlcmAuIFNvLCB0aGUgbGluZSBgZHN0LVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSBzcmMtXHUwMDNlbmZfZHVwbGljYXRlZDtgIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgYG5mX2R1cGxpY2F0ZWRgIGlzIGV4cGxpY2l0bHkgY29waWVkIGZyb20gdGhlIHNvdXJjZSBTS0IgdG8gdGhlIGRlc3RpbmF0aW9uIFNLQiBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9uIGlmIGVpdGhlciBgQ09ORklHX05GX0RVUF9JUFY0YCBvciBgQ09ORklHX05GX0RVUF9JUFY2YCBhcmUgZW5hYmxlZCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBfX2NvcHlfc2tiX2hlYWRlcmAgZG9lcyBub3cgdG8gbWFrZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjU0Ljc1NTA3ODk4N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTA0MDE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NvcHlfc2tiX2hlYWRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nz1zdHJ1Y3Qgc2tfYnVmZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk0MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjk0MTpcXHQvKiBGb2xsb3dpbmcgZmllbGRzIGFyZSBfbm90XyBjb3BpZWQgaW4gX19jb3B5X3NrYl9oZWFkZXIoKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTQyLVxcdCAqIE5vdGUgdGhhdCBxdWV1ZV9tYXBwaW5nIGlzIGhlcmUgbW9zdGx5IHRvIGZpbGwgYSBob2xlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05NjgtXFx0LyogRmllbGRzIGVuY2xvc2VkIGluIGhlYWRlcnMgZ3JvdXAgYXJlIGNvcGllZFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6OTY5OlxcdCAqIHVzaW5nIGEgc2luZ2xlIG1lbWNweSgpIGluIF9fY29weV9za2JfaGVhZGVyKClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk3MC1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE1NTI9RVhQT1JUX1NZTUJPTChuYXBpX2NvbnN1bWVfc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1NTgtXFxubmV0L2NvcmUvc2tidWZmLmM6MTU1OTpzdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1NjAte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTYwNy0gKiBZb3Ugc2hvdWxkIG5vdCBhZGQgYW55IG5ldyBjb2RlIHRvIHRoaXMgZnVuY3Rpb24uICBBZGQgaXQgdG9cXG5uZXQvY29yZS9za2J1ZmYuYzoxNjA4OiAqIF9fY29weV9za2JfaGVhZGVyIGFib3ZlIGluc3RlYWQuXFxubmV0L2NvcmUvc2tidWZmLmMtMTYwOS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYz0xNjEwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjE1LVxcdG4tXFx1MDAzZXNrID0gTlVMTDtcXG5uZXQvY29yZS9za2J1ZmYuYzoxNjE2OlxcdF9fY29weV9za2JfaGVhZGVyKG4sIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMTYxNy1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE2NDc9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mb3JfbXNnKHN0cnVjdCBza19idWZmICpmaXJzdClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjAtXFxubmV0L2NvcmUvc2tidWZmLmM6MTY2MTpcXHRfX2NvcHlfc2tiX2hlYWRlcihuLCBmaXJzdCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTY2Mi1cXHRuLVxcdTAwM2VkZXN0cnVjdG9yID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNDY9dm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTQ3LXtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMTQ4OlxcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTQ5LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDY4Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDc0NS1cXHRcXHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6NDc0NjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00NzkwPXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTc1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NzY6XFx0XFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjU2Ljk3NDEyNTUzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDA1NDYyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gU0tCIEhlYWRlciBDb3B5aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIFNLQiBoZWFkZXIgY29weWluZy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc291cmNlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fY29weV9za2JfaGVhZGVyYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcywgcmlnaHQ/IEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGhlYWRlciBkYXRhIGlzIGJlaW5nIGhhbmRsZWQsIHdoYXQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIHRha2luZyBwbGFjZSwgYW5kIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBwaXRmYWxscy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgd29ya2hvcnNlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBieSBsb29raW5nIGF0IHRoZSBkZXRhaWxzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNTowMS43MTQ2NzQ4NTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NTksXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NTk6XFx0c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4xNTYwOlxcdHtcXG4xNTYxOlxcdFxcdG5ldy1cXHUwMDNldHN0YW1wXFx0XFx0PSBvbGQtXFx1MDAzZXRzdGFtcDtcXG4xNTYyOlxcdFxcdC8qIFdlIGRvIG5vdCBjb3B5IG9sZC1cXHUwMDNlc2sgKi9cXG4xNTYzOlxcdFxcdG5ldy1cXHUwMDNlZGV2XFx0XFx0PSBvbGQtXFx1MDAzZWRldjtcXG4xNTY0OlxcdFxcdG1lbWNweShuZXctXFx1MDAzZWNiLCBvbGQtXFx1MDAzZWNiLCBzaXplb2Yob2xkLVxcdTAwM2VjYikpO1xcbjE1NjU6XFx0XFx0c2tiX2RzdF9jb3B5KG5ldywgb2xkKTtcXG4xNTY2OlxcdFxcdF9fc2tiX2V4dF9jb3B5KG5ldywgb2xkKTtcXG4xNTY3OlxcdFxcdF9fbmZfY29weShuZXcsIG9sZCwgZmFsc2UpO1xcbjE1Njg6XFx0XFxuMTU2OTpcXHRcXHQvKiBOb3RlIDogdGhpcyBmaWVsZCBjb3VsZCBiZSBpbiB0aGUgaGVhZGVycyBncm91cC5cXG4xNTcwOlxcdFxcdCAqIEl0IGlzIG5vdCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIGEgMTYgYml0IGhvbGVcXG4xNTcxOlxcdFxcdCAqL1xcbjE1NzI6XFx0XFx0bmV3LVxcdTAwM2VxdWV1ZV9tYXBwaW5nID0gb2xkLVxcdTAwM2VxdWV1ZV9tYXBwaW5nO1xcbjE1NzM6XFx0XFxuMTU3NDpcXHRcXHRtZW1jcHkoXFx1MDAyNm5ldy1cXHUwMDNlaGVhZGVycywgXFx1MDAyNm9sZC1cXHUwMDNlaGVhZGVycywgc2l6ZW9mKG5ldy1cXHUwMDNlaGVhZGVycykpO1xcbjE1NzU6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHByb3RvY29sKTtcXG4xNTc2OlxcdFxcdENIRUNLX1NLQl9GSUVMRChjc3VtKTtcXG4xNTc3OlxcdFxcdENIRUNLX1NLQl9GSUVMRChoYXNoKTtcXG4xNTc4OlxcdFxcdENIRUNLX1NLQl9GSUVMRChwcmlvcml0eSk7XFxuMTU3OTpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2tiX2lpZik7XFxuMTU4MDpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl9wcm90byk7XFxuMTU4MTpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl90Y2kpO1xcbjE1ODI6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHRyYW5zcG9ydF9oZWFkZXIpO1xcbjE1ODM6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG5ldHdvcmtfaGVhZGVyKTtcXG4xNTg0OlxcdFxcdENIRUNLX1NLQl9GSUVMRChtYWNfaGVhZGVyKTtcXG4xNTg1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9wcm90b2NvbCk7XFxuMTU4NjpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfdHJhbnNwb3J0X2hlYWRlcik7XFxuMTU4NzpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbmV0d29ya19oZWFkZXIpO1xcbjE1ODg6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX21hY19oZWFkZXIpO1xcbjE1ODk6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hcmspO1xcbjE1OTA6XFx0I2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUktcXG4xNTkxOlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZWNtYXJrKTtcXG4xNTkyOlxcdCNlbmRpZlxcbjE1OTM6XFx0I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuMTU5NDpcXHRcXHRDSEVDS19TS0JfRklFTEQobmFwaV9pZCk7XFxuMTU5NTpcXHQjZW5kaWZcXG4xNTk2OlxcdFxcdENIRUNLX1NLQl9GSUVMRChhbGxvY19jcHUpO1xcbjE1OTc6XFx0I2lmZGVmIENPTkZJR19YUFNcXG4xNTk4OlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZW5kZXJfY3B1KTtcXG4xNTk5OlxcdCNlbmRpZlxcbjE2MDA6XFx0I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG4xNjAxOlxcdFxcdENIRUNLX1NLQl9GSUVMRCh0Y19pbmRleCk7XFxuMTYwMjpcXHQjZW5kaWZcXG4xNjAzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNTowMS43MTQ5ODE5NDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQyNjUwMzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0tCIEhlYWRlciBEdXBsaWNhdGlvbiBhbmQgTmV0ZmlsdGVyIER1cGxpY2F0aW9uIEZsYWdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBvcGVyYXRpb24gaW52b2x2aW5nIGBza19idWZmYCBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgYG1lbWNweShcdTAwMjZuZXctXHUwMDNlaGVhZGVycywgXHUwMDI2b2xkLVx1MDAzZWhlYWRlcnMsIHNpemVvZihuZXctXHUwMDNlaGVhZGVycykpO2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB0cmFjZSBleGFjdGx5IHdoYXQncyBiZWluZyBjb3BpZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy5cIiBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGUgYGhlYWRlcnNgIGdyb3VwIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGlzIGEgc3Vic3RhbnRpYWwgc2VjdGlvbjsgbGV0IG1lIGNvbmZpcm0gaXRzIHNwYW4uIEFoYSwgeWVzLCBJIHNlZSB0aGF0IHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyByZXNpZGVzIHdpdGhpbiB0aGUgZGVmaW5lZCBgaGVhZGVyc2AgZ3JvdXAuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGEgc2ltcGxlIGBtZW1jcHlgIHdvdWxkIGR1cGxpY2F0ZSBpdCBhbG9uZyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBpbiBgaGVhZGVyc2AuXG5cbkkgYWxzbyByZW1lbWJlciB0aGF0IGBuZl9jb3B5YCBjb250YWlucyBhIGRpcmVjdCBjb3B5IG9mIHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyB3aXRoIGBkc3QtXHUwMDNlbmZfZHVwbGljYXRlZCA9IHNyYy1cdTAwM2VuZl9kdXBsaWNhdGVkO2AsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHVzZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9mIGBuZl9jb3B5YC4gVGhlcmVmb3JlLCBpZiBib3RoIHRoZSBgbWVtY3B5YCBhbmQgYG5mX2NvcHlgIGV4aXN0IG9uIHRoZSBzYW1lIGxpbmUsIHRoZXJlIHdpbGwgYmUgdGhlIHNhbWUgb3V0Y29tZS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIGNvbnRleHRzLCBiZWNhdXNlIHRoaXMgc2VlbXMgbGlrZSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBpc3N1ZXMgY291bGQgYXJpc2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgZXhwbGljaXRseSBoYXBwZW5pbmcgYXQgdGhlIE5ldGZpbHRlciBsZXZlbC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgY29kZSBmb3IgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YC4gSSdsbCBvcGVuIHVwIGBuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AgdG8gbG9vayBhdCBob3cgdGhpcyBmbGFnIGlzIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2hlbiogYW5kICp3aHkqIGl0J3Mgc2V0IG9yIGNsZWFyZWQuIFRoaXMgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBoZWFkZXIgZHVwbGljYXRpb24gaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA1OjA3LjE0MTQ4OTMyMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0aWYgKElTX0VSUihydCkpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiAgNDQ6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuICA0NTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuICA0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNTI6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuICA1NzpcXHRcXHRpZiAoY3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZClcXG4gIDU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNTk6XFx0XFx0LypcXG4gIDYwOlxcdFxcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXFxuICA2MTpcXHRcXHQgKiB0aGUgb3JpZ2luYWwgc2tiLCB3aGljaCBzaG91bGQgY29udGludWUgb24gaXRzIHdheSBhcyBpZiBub3RoaW5nIGhhc1xcbiAgNjI6XFx0XFx0ICogaGFwcGVuZWQuIFRoZSBjb3B5IHNob3VsZCBiZSBpbmRlcGVuZGVudGx5IGRlbGl2ZXJlZCB0byB0aGUgZ2F0ZXdheS5cXG4gIDYzOlxcdFxcdCAqL1xcbiAgNjQ6XFx0XFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XFxuICA2NTpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuICA2NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4gIDY5OlxcdFxcdC8qIEF2b2lkIGNvdW50aW5nIGNsb25lZCBwYWNrZXRzIHRvd2FyZHMgdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24uICovXFxuICA3MDpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNzE6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDcyOlxcdCNlbmRpZlxcbiAgNzM6XFx0XFx0LypcXG4gIDc0OlxcdFxcdCAqIElmIHdlIGFyZSBpbiBQUkVST1VUSU5HL0lOUFVULCBkZWNyZWFzZSB0aGUgVFRMIHRvIG1pdGlnYXRlIHBvdGVudGlhbFxcbiAgNzU6XFx0XFx0ICogbG9vcHMgYmV0d2VlbiB0d28gaG9zdHMuXFxuICA3NjpcXHRcXHQgKlxcbiAgNzc6XFx0XFx0ICogU2V0ICVJUF9ERiBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWxseVxcbiAgNzg6XFx0XFx0ICogZGVjcmVhc2VkIE1UVSBvbiB0aGUgY2xvbmUgcm91dGUuIElQdjYgZG9lcyB0aGlzIHRvby5cXG4gIDc5OlxcdFxcdCAqXFxuICA4MDpcXHRcXHQgKiBJUCBoZWFkZXIgY2hlY2tzdW0gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgaXBfbG9jYWxfb3V0LlxcbiAgODE6XFx0XFx0ICovXFxuICA4MjpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4gIDgzOlxcdFxcdGlwaC1cXHUwMDNlZnJhZ19vZmYgfD0gaHRvbnMoSVBfREYpO1xcbiAgODQ6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgODU6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTilcXG4gIDg2OlxcdFxcdFxcdC0taXBoLVxcdTAwM2V0dGw7XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcXG4gIDg5OlxcdFxcdFxcdHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XFxuICA5MDpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgOTE6XFx0XFx0XFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDkyOlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgOTM6XFx0XFx0fSBlbHNlIHtcXG4gIDk0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgOTU6XFx0XFx0fVxcbiAgOTY6XFx0b3V0OlxcbiAgOTc6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuICA5ODpcXHR9XFxuICA5OTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA1OjA3LjE0MTYzODIzMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ0MDczMzcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gSVB2NiBOZXRmaWx0ZXIgRHVwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgZmlsdGVyaW5nLCBhbmQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBUaGUgY29yZSBhcmNoaXRlY3R1cmUgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBpbiBtb3N0IGNhc2VzLCBidXQgSVB2NiBpcyB3aGVyZSB0aGluZ3MgY2FuIGdldCBhIGxpdHRsZS4uLiBudWFuY2VkLiBMZXQncyBub3Qgc2tpcCBhbnkgc3RlcHMuIEknbSBnb2luZyB0byBxdWlja2x5IHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBJUHY2IGR1cGxpY2F0ZSBwYWNrZXQgaGFuZGxpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGVyZSBtaWdodCBiZSBzb21lIGNydWNpYWwgc3VidGxldGllcyByZWxhdGVkIHRvIGhvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBoYW5kbGVkLCBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgSVB2Ni1yZWxhdGVkIGZyYWdtZW50YXRpb24gY29uc2lkZXJhdGlvbnMgdGhhdCB3YXJyYW50IGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBlbnN1cmUgd2UgYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2VzIGluIGhvdyBJUHY2IGhhbmRsZXMgY2VydGFpbiBmdW5jdGlvbnMgaW4gY29tcGFyaXNvbiB0byBJUHY0LiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgY291bGQgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNToxNy41ODIzNzM4OThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBkc3QpO1xcbiAgNDE6XFx0XFx0c2tiLVxcdTAwM2VkZXYgICAgICA9IGRzdF9kZXYoZHN0KTtcXG4gIDQyOlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA0NTpcXHR9XFxuICA0NjpcXHRcXG4gIDQ3OlxcdHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4gIDQ4OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgNDk6XFx0e1xcbiAgNTA6XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiAgNTE6XFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSB8fCBza2ItXFx1MDAzZW5mX2R1cGxpY2F0ZWQpXFxuICA1MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDUzOlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNTQ6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1NjpcXHRcXG4gIDU3OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA1ODpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNTk6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDYwOlxcdCNlbmRpZlxcbiAgNjE6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgNjI6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xcbiAgNjM6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICA2NDpcXHRcXHRcXHQtLWlwaC1cXHUwMDNlaG9wX2xpbWl0O1xcbiAgNjU6XFx0XFx0fVxcbiAgNjY6XFx0XFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgNjc6XFx0XFx0XFx0c2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcXG4gIDY4OlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuICA2OTpcXHRcXHRcXHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDcwOlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgNzE6XFx0XFx0fSBlbHNlIHtcXG4gIDcyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0b3V0OlxcbiAgNzU6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2Nik7XFxuICA3ODpcXHRcXG4gIDc5OlxcdE1PRFVMRV9BVVRIT1IoXFxcIlNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNToxNy41ODI0Mzc4NjhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzMjEzODUwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMuIEl0IHNlZW1zIHRoZXJlIHdhcyBhIGZsYXcgaW4gdGhlIG9yaWdpbmFsIGxvZ2ljLiBUaGUgcGVyLXRhc2sgZmxhZywgYGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlYCwgd2Fzbid0IHJvYnVzdCBlbm91Z2ggdG8gaGFuZGxlIHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBwYWNrZXRzIGdvdCBxdWV1ZWQsIGRlbGF5ZWQsIG9yIG1vdmVkIGJldHdlZW4gY29udGV4dHMuIFRoaXMgY291bGQgbGVhZCB0byBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcywgYSB2ZXJ5IG5hc3R5IGJ1ZyFcblxuVGhlIHNvbHV0aW9uLCB3aGljaCBJIGZpbmQgZWxlZ2FudCwgaXMgdG8gaW50cm9kdWNlIGEgbmV3IGZsYWcgZGlyZWN0bHkgb24gdGhlIGBza19idWZmYCwgdGhlIHBhY2tldCdzIGRhdGEgc3RydWN0dXJlIGl0c2VsZjogYHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkYC4gTm93LCBhbnkgcGFja2V0IGR1cGxpY2F0ZWQgYnkgbmV0ZmlsdGVyIGdldHMgdGhpcyBmbGFnIHNldC4gVGhlIGNoZWNrIGlzIG1vZGlmaWVkIHRvIGBjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSB8fCBza2ItXHUwMDNlbmZfZHVwbGljYXRlZGAsIGFuZCB0aGlzIGd1YXJhbnRlZXMgdGhhdCB3ZSBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIHByZXZlbnQgYW55IHBhY2tldHMgZ2VuZXJhdGVkIHZpYSBuZXRmaWx0ZXIgZHVwbGljYXRpb24gZnJvbSBiZWluZywgd2VsbCwgZHVwbGljYXRlZCBhZ2Fpbi4gTmljZS5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgS01TQU4gdmVyc3VzIEtBU0FOIGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBhIHNvbGlkIGFzc2Vzc21lbnQgaGVyZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoZXNlIGFyZWFzLlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8uIGBzdHJ1Y3Qgc2tfYnVmZmAgaXMgaW50ZXJuYWwuIFdoaWxlIGl04oCZcyB0cnVlIHRoYXQgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgY291bGQgYmUgYW4gaXNzdWUgd2hlbiBtb3ZpbmcgZGF0YSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSwgdGhpcyBwYXRjaCAqYWRkcyogYW4gaW50ZXJuYWwgMS1iaXQgZmllbGQuIFNpbmNlIHRoZSBlbnRpcmUgaGVhZGVyIGFyZWEgdXAgdG8gdGhlIGB0YWlsYCBpcyB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gYnkgYHNrYnVmZl9jbGVhcmAsIHRoZSBhZGRlZCBiaXQgZG9lc24ndCBwb3NlIGFueSByaXNrIGluIHRoaXMgY2F0ZWdvcnkuIE5vIGRpcmVjdCBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgZXhwb3NlZC5cblxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIFRoZSBgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWRgIGJpdCBpdHNlbGYgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBJdCBpcyBjb3BpZWQgY29ycmVjdGx5IGJ5IGFsbCBpbnZvbHZlZCBmdW5jdGlvbnMsIGxpa2UgYG5mX2NvcHlgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgaXQgaXMgZXhwbGljaXRseSBzZXQgdG8gMSBpbiB0aGUgZHVwbGljYXRpb24gZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMganVzdCBub3QgcG9zc2libGUgaW4gdGhpcyBzY2VuYXJpby5cblxuMy4gICoqTmV3IGNvbXBsZXggc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6YXRpb24/KiogVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBnb29kLiBUaGUgZXhpc3RpbmcgYHN0cnVjdCBza19idWZmYCBiaXRmaWVsZCBpcyBhbHJlYWR5IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi5cblxuNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObyBpbXBhY3QuIFRoaXMgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnl0aGluZyByZWxhdGVkIHRvIHBhY2tldCBwYXlsb2FkIGxlbmd0aHMsIGJ1ZmZlciBzaXplcywgb3IgYW55IGJvdW5kcyBjaGVja2luZyBsb2dpYy5cblxuSW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBjbGVhbi4gSXQncyBlc3NlbnRpYWxseSBhIHJlY3Vyc2lvbi9sb29wIHByZXZlbnRpb24gZml4IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIHBhdGguIEkgc2VlIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLiBUaGVyZSBpcyBubyBuZWVkIGZvciBkZWRpY2F0ZWQgS01TQU4gYW5hbHlzaXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXIsIGFuZCBpdCBtYWtlcyBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzQsIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDU6MzEuOTAzODI3MzhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxcblxcbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxcblxcbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 05:33:00 +0000 UTC FinishedAt: 2026-08-29 07:05:32 +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": "4a9d62a8774f130a5b8de26ca9f415e6050a9d51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf.git", "commit_hash": "4a9d62a8774f130a5b8de26ca9f415e6050a9d51", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_DUP_IPV4", "NF_DUP_IPV6", "NFT_DUP_IPV4", "NFT_DUP_IPV6", "NETFILTER_XT_TARGET_TEE" ], "series_id": "30c321fc-7f68-4f4d-b520-87ec58e418ef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_dup_ipv4", "nf_dup_ipv6" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX1hUX1RBUkdFVF9URUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl9kdXBfaXB2NCYjMzQ7LAogICAgJiMzNDtuZl9kdXBfaXB2NiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxuXG4xLiBJbml0aWFsaXphdGlvbjogQWxsIGBza19idWZmYCBpbnN0YW5jZXMgYXJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24gdmlhIGBza2J1ZmZfY2xlYXIoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkgZnJvbSB0aGUgc3RhcnQgb2YgYHN0cnVjdCBza19idWZmYCB1cCB0byBgdGFpbGApLCBlbnN1cmluZyBgbmZfZHVwbGljYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSXQgaXMgcHJvcGVybHkgcHJlc2VydmVkIGluIGBuZl9jb3B5KClgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXIoKWAuXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxuMy4gTm8gVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBhbHRlciBwYWNrZXQgZGF0YSBsZW5ndGhzLCBwYXlsb2FkIGJvdW5kcywgb3IgYWNjZXNzIGFueSB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5LlxuXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICYjMzk7bmZfZHVwbGljYXRlZCYjMzk7IGJpdCBpbiBzdHJ1Y3Qgc2tfYnVmZiB0byB0cmFjayBjbG9uZWQgcGFja2V0cyBhY3Jvc3MgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGhvb2tzIChlLmcuIG5mdF9kdXAgYW5kIHh0X1RFRSksIHByZXZlbnRpbmcgaW5maW5pdGUgZHVwbGljYXRpb24gbG9vcHMuIFRoaXMgZGlyZWN0bHkgY2hhbmdlcyBwYWNrZXQgY2xvbmluZyBhbmQgcm91dGluZyBiZWhhdmlvciBpbiBuZXRmaWx0ZXIgSVB2NCBhbmQgSVB2NiBkdXBsaWNhdGlvbiBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4OTI0Mzk4ZDI0Yzg5ZmZkYzVkMDg2Y2NkOGE3NDhhYjNlZDcwYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwNzowMjowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggNTUyMjcxNmRmOGZmZi4uZjVjN2I3YjFjZWRlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC04MTIsNiAmIzQzOzgxMiw3IEBAIGVudW0gc2tiX3RzdGFtcF90eXBlIHtcbiAgKlx0QHJlZGlyZWN0ZWQ6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBieSBwYWNrZXQgY2xhc3NpZmllclxuICAqXHRAZnJvbV9pbmdyZXNzOiBwYWNrZXQgd2FzIHJlZGlyZWN0ZWQgZnJvbSB0aGUgaW5ncmVzcyBwYXRoXG4gICpcdEBuZl9za2lwX2VncmVzczogcGFja2V0IHNoYWxsIHNraXAgbmYgZWdyZXNzIC0gc2VlIG5ldGZpbHRlcl9uZXRkZXYuaFxuJiM0MzsgKlx0QG5mX2R1cGxpY2F0ZWQ6IHBhY2tldCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGFjdGlvblxuICAqXHRAcGVla2VkOiB0aGlzIHBhY2tldCBoYXMgYmVlbiBzZWVuIGFscmVhZHksIHNvIHN0YXRzIGhhdmUgYmVlblxuICAqXHRcdGRvbmUgZm9yIGl0LCBkb24mIzM5O3QgZG8gdGhlbSBhZ2FpblxuICAqXHRAbmZfdHJhY2U6IG5ldGZpbHRlciBwYWNrZXQgdHJhY2UgZmxhZ1xuQEAgLTEwMjMsNiAmIzQzOzEwMjQsOSBAQCBzdHJ1Y3Qgc2tfYnVmZiB7XG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcbiBcdF9fdThcdFx0XHRuZl9za2lwX2VncmVzczoxO1xuICNlbmRpZlxuJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuJiM0MztcdF9fdThcdFx0XHRuZl9kdXBsaWNhdGVkOjE7XG4mIzQzOyNlbmRpZlxuICNpZmRlZiBDT05GSUdfU0tCX0RFQ1JZUFRFRFxuIFx0X191OFx0XHRcdGRlY3J5cHRlZDoxO1xuICNlbmRpZlxuQEAgLTUyMDAsNiAmIzQzOzUyMDQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuIFx0bmZfY29ubnRyYWNrX3B1dChza2JfbmZjdChkc3QpKTtcbiAjZW5kaWZcbiBcdGRzdC1cdTAwM2VzbG93X2dybyA9IHNyYy1cdTAwM2VzbG93X2dybztcbiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcbiYjNDM7XHRkc3QtXHUwMDNlbmZfZHVwbGljYXRlZCA9IHNyYy1cdTAwM2VuZl9kdXBsaWNhdGVkO1xuJiM0MzsjZW5kaWZcbiBcdF9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbmluZGV4IDlhNzczNTAyZjEwYWMuLjhmZTMxYTBkYjA2M2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbkBAIC01NCw3ICYjNDM7NTQsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0LypcbiBcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXG5AQCAtODYsNiAmIzQzOzg2LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gXG4gXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4mIzQzO1x0XHRza2ItXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiBcdFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbmluZGV4IDZkYTMxMDJiN2MxYjMuLmUwZmRiNDNkN2QzZGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuIHtcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbiYjNDM7XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoc2tiID09IE5VTEwpXG5AQCAtNjQsNiAmIzQzOzY0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2Vob3BfbGltaXQ7XG4gXHR9XG4gXHRpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4mIzQzO1x0XHRza2ItXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiBcdFx0aXA2X2xvY2FsX291dChuZXQsIHNrYi1cdTAwM2Vzaywgc2tiKTtcbiBcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZHVwX2lwdjQmIzM0OywKICAgICYjMzQ7bmZfZHVwX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAmIzM5O25mX2R1cGxpY2F0ZWQmIzM5OyBiaXQgaW4gc3RydWN0IHNrX2J1ZmYgdG8gdHJhY2sgY2xvbmVkIHBhY2tldHMgYWNyb3NzIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBob29rcyAoZS5nLiBuZnRfZHVwIGFuZCB4dF9URUUpLCBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzLiBUaGlzIGRpcmVjdGx5IGNoYW5nZXMgcGFja2V0IGNsb25pbmcgYW5kIHJvdXRpbmcgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyIElQdjQgYW5kIElQdjYgZHVwbGljYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODkyNDM5OGQyNGM4OWZmZGM1ZDA4NmNjZDhhNzQ4YWIzZWQ3MGFjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMDc6MDI6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCA1NTIyNzE2ZGY4ZmZmLi5mNWM3YjdiMWNlZGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTgxMiw2ICYjNDM7ODEyLDcgQEAgZW51bSBza2JfdHN0YW1wX3R5cGUgewogICoJQHJlZGlyZWN0ZWQ6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBieSBwYWNrZXQgY2xhc3NpZmllcgogICoJQGZyb21faW5ncmVzczogcGFja2V0IHdhcyByZWRpcmVjdGVkIGZyb20gdGhlIGluZ3Jlc3MgcGF0aAogICoJQG5mX3NraXBfZWdyZXNzOiBwYWNrZXQgc2hhbGwgc2tpcCBuZiBlZ3Jlc3MgLSBzZWUgbmV0ZmlsdGVyX25ldGRldi5oCiYjNDM7ICoJQG5mX2R1cGxpY2F0ZWQ6IHBhY2tldCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGFjdGlvbgogICoJQHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW4KICAqCQlkb25lIGZvciBpdCwgZG9uJiMzOTt0IGRvIHRoZW0gYWdhaW4KICAqCUBuZl90cmFjZTogbmV0ZmlsdGVyIHBhY2tldCB0cmFjZSBmbGFnCkBAIC0xMDIzLDYgJiM0MzsxMDI0LDkgQEAgc3RydWN0IHNrX2J1ZmYgewogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1MKIAlfX3U4CQkJbmZfc2tpcF9lZ3Jlc3M6MTsKICNlbmRpZgomIzQzOyNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNCkgfHwgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjYpCiYjNDM7CV9fdTgJCQluZl9kdXBsaWNhdGVkOjE7CiYjNDM7I2VuZGlmCiAjaWZkZWYgQ09ORklHX1NLQl9ERUNSWVBURUQKIAlfX3U4CQkJZGVjcnlwdGVkOjE7CiAjZW5kaWYKQEAgLTUyMDAsNiAmIzQzOzUyMDQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKQogCW5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7CiAjZW5kaWYKIAlkc3QtJmd0O3Nsb3dfZ3JvID0gc3JjLSZndDtzbG93X2dybzsKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KQomIzQzOwlkc3QtJmd0O25mX2R1cGxpY2F0ZWQgPSBzcmMtJmd0O25mX2R1cGxpY2F0ZWQ7CiYjNDM7I2VuZGlmCiAJX19uZl9jb3B5KGRzdCwgc3JjLCB0cnVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwppbmRleCA5YTc3MzUwMmYxMGFjLi44ZmUzMWEwZGIwNjNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYwpAQCAtNTQsNyAmIzQzOzU0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCXN0cnVjdCBpcGhkciAqaXBoOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiYjNDM7CWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLSZndDtuZl9kdXBsaWNhdGVkKQogCQlnb3RvIG91dDsKIAkvKgogCSAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yCkBAIC04Niw2ICYjNDM7ODYsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCS0taXBoLSZndDt0dGw7CiAKIAlpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7CiYjNDM7CQlza2ItJmd0O25mX2R1cGxpY2F0ZWQgPSAxOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSB0cnVlOwogCQlpcF9sb2NhbF9vdXQobmV0LCBza2ItJmd0O3NrLCBza2IpOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKaW5kZXggNmRhMzEwMmI3YzFiMy4uZTBmZGI0M2Q3ZDNkZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMKQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIAkJIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpCiB7CiAJbG9jYWxfYmhfZGlzYWJsZSgpOwotCWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUpCiYjNDM7CWlmIChjdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLSZndDtuZl9kdXBsaWNhdGVkKQogCQlnb3RvIG91dDsKIAlza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpCkBAIC02NCw2ICYjNDM7NjQsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCS0taXBoLSZndDtob3BfbGltaXQ7CiAJfQogCWlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHsKJiM0MzsJCXNrYi0mZ3Q7bmZfZHVwbGljYXRlZCA9IDE7CiAJCWN1cnJlbnQtJmd0O2luX25mX2R1cGxpY2F0ZSA9IHRydWU7CiAJCWlwNl9sb2NhbF9vdXQobmV0LCBza2ItJmd0O3NrLCBza2IpOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYWNrZXQgRHVwbGljYXRpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGluZyB0aGUgbmV0ZmlsdGVyIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYyDigJMgdGhpbmdzIGxpa2UgYG5mdF9kdXBfaXB2NGAsIGBuZnRfZHVwX2lwdjZgLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBgeHRfVEVFYCwgYWxsIG9mIHdoaWNoIGxldmVyYWdlIHRoZSBjb3JlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgZnVuY3Rpb25zLiBUaGUgY29yZSBjb25jZXB0IGhlcmUgaXMgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcyBvciByZWN1cnNpb24gd2hlbiBhIGR1cGxpY2F0ZWQgcGFja2V0IGhpdHMgbmV0ZmlsdGVyIGhvb2tzIGFnYWluLiBTbWFydC4KClRoZSBtb2RpZmljYXRpb25zIGFyZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIHRoZXkmIzM5O3JlIGFkZGluZyBhIGBuZl9kdXBsaWNhdGVkOjFgIGJpdCB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gVGhpcyBiaXQgaXMgY29uZGl0aW9uYWwsIG9ubHkgYXBwZWFyaW5nIHdoZW4gZWl0aGVyIGBDT05GSUdfTkZfRFVQX0lQVjRgIG9yIGBDT05GSUdfTkZfRFVQX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgZ29vZCwga2VlcHMgdGhlIHN0cnVjdCBsZWFuIHdoZW4gaXQmIzM5O3Mgbm90IG5lZWRlZC4gVGhleSYjMzk7cmUgYWxzbyBtYWtpbmcgc3VyZSBgbmZfZHVwbGljYXRlZGAgZ2V0cyBjb3BpZWQgb3ZlciBpbiBgbmZfY29weSgpYC4gTWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gcmV0YWluIHRoYXQgZHVwbGljYXRlZCBzdGF0dXMuCgpOb3csIGluIGBuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AsIGl0JiMzOTtzIGFsbCBhYm91dCBzZXR0aW5nIGFuZCBjaGVja2luZyB0aGlzIG5ldyBiaXQuIEJvdGggYG5mX2R1cF9pcHY0KClgIGFuZCBgbmZfZHVwX2lwdjYoKWAgYXJlIGNoZWNraW5nIGlmIGBza2ItJmd0O25mX2R1cGxpY2F0ZWRgIGlzIGFscmVhZHkgc2V0LCBhbmQgKnRoZW4qIHNldHRpbmcgaXQgaWYgaXQgaXNuJiMzOTt0LiBUaGlzIHByZXZlbnRzIHRoZSBzYW1lIHBhY2tldCBmcm9tIGJlaW5nIG1hcmtlZCBhcyBkdXBsaWNhdGVkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIGR1cGxpY2F0aW9uIHBhdGguCgpNeSBuZXh0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHZlcmlmeSBob3cgdGhlIEtjb25maWcgc2V0dGluZ3MgYXJlIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUgaG93IHRob3NlIGBDT05GSUdfTkZfRFVQX0lQVjRgIGFuZCBgQ09ORklHX05GX0RVUF9JUFY2YCBmbGFncyBhcmUgY29uZmlndXJlZC4gSSYjMzk7bGwgcHJvYmFibHkgcnVuIGEgYGdyZXBwZXJgIGFjcm9zcyB0aGUgS2NvbmZpZyBmaWxlcywgb3IganVzdCBkaWcgdGhyb3VnaCB0aGVtIGlmIEkgbmVlZCB0by4gVW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBvcHRpb25zIGlzIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVsbCBwaWN0dXJlLCBvZiBjb3Vyc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0RVUF9JUFZbNDZdJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzEtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo3Mjpjb25maWcgTkZfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIElQdjQgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTU5PWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjYxOmNvbmZpZyBORl9EVVBfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDEwNQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKktjb25maWcgSW5zcGVjdGlvbiBmb3IgSVB2NCBhbmQgSVB2NiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGFydGljdWxhcmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGNvbXBvbmVudHMgYXJlIHN0cnVjdHVyZWQuIExldCBtZSBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNzIsIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgSVB2NCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIFRoZW4sIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBpbnRvIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNjEgdG8gc2VlIGhvdyB0aGUgSVB2NiBjb25maWd1cmF0aW9uIGlzIHNldCB1cC4gVGhpcyB3aWxsIGxldCBtZSBzZWUgaWYgdGhlIElQdjYgY29uZmlndXJhdGlvbiBpcyBzaW1pbGFyIG9yIGhhcyBpdHMgb3duIHNwZWNpZmljIGRlcGVuZGVuY2llcyB0byBiZSBhd2FyZSBvZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBjb3JlIG5ldGZpbHRlciBjb25maWd1cmF0aW9uIGFuZCB0aGUgSVB2NC9JUHY2IHNwZWNpZmljIG9wdGlvbnMuIEhvcGVmdWxseSwgdGhlc2UgS2NvbmZpZyBmaWxlcyB3aWxsIGNsZWFybHkgb3V0bGluZSB0aGUgdmFyaW91cyBmZWF0dXJlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbGxvd2luZyBtZSB0byBmdWxseSBncmFzcCB0aGUgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHQgIG11bHRpY2FzdCBvciBibGFja2hvbGUuXG4gIDYxOlx0XG4gIDYyOlx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxuICA2MzpcdFxuICA2NDpcdGNvbmZpZyBORl9UQUJMRVNfQVJQXG4gIDY1Olx0XHRib29sIFwmIzM0O0FSUCBuZl90YWJsZXMgc3VwcG9ydFwmIzM0O1xuICA2NjpcdFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXG4gIDY3Olx0XHRoZWxwXG4gIDY4Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFSUCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDY5Olx0XG4gIDcwOlx0ZW5kaWYgIyBORl9UQUJMRVNcbiAgNzE6XHRcbiAgNzI6XHRjb25maWcgTkZfRFVQX0lQVjRcbiAgNzM6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cJiMzNDtcbiAgNzQ6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcbiAgNzU6XHRcdGhlbHBcbiAgNzY6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbmZfZHVwX2lwdjQgY29yZSwgd2hpY2ggZHVwbGljYXRlcyBhbiBJUHY0XG4gIDc3Olx0XHQgIHBhY2tldCB0byBiZSByZXJvdXRlZCB0byBhbm90aGVyIGRlc3RpbmF0aW9uLlxuICA3ODpcdFxuICA3OTpcdGNvbmZpZyBORl9MT0dfQVJQXG4gIDgwOlx0XHR0cmlzdGF0ZSBcJiMzNDtBUlAgcGFja2V0IGxvZ2dpbmdcJiMzNDtcbiAgODE6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA4MjpcdFx0c2VsZWN0IE5GX0xPR19TWVNMT0dcbiAgODM6XHRcdGhlbHBcbiAgODQ6XHRcdFRoaXMgaXMgYSBiYWNrd2FyZHMtY29tcGF0IG9wdGlvbiBmb3IgdGhlIHVzZXImIzM5O3MgY29udmVuaWVuY2VcbiAgODU6XHRcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxuICA4NjpcdFxuICA4NzpcdGNvbmZpZyBORl9MT0dfSVBWNFxuICA4ODpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBwYWNrZXQgbG9nZ2luZ1wmIzM0O1xuICA4OTpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gIDkwOlx0XHRzZWxlY3QgTkZfTE9HX1NZU0xPR1xuICA5MTpcdFx0aGVscFxuICA5MjpcdFx0VGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlciYjMzk7cyBjb252ZW5pZW5jZVxuICA5MzpcdFx0KGUuZy4gd2hlbiBydW5uaW5nIG9sZGNvbmZpZykuIEl0IHNlbGVjdHMgQ09ORklHX05GX0xPR19TWVNMT0cuXG4gIDk0Olx0XG4gIDk1Olx0Y29uZmlnIE5GX1JFSkVDVF9JUFY0XG4gIDk2Olx0XHR0cmlzdGF0ZSBcJiMzNDtJUHY0IHBhY2tldCByZWplY3Rpb25cJiMzNDtcbiAgOTc6XHRcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxuICA5ODpcdFxuICA5OTpcdGlmIE5GX05BVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NDcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBORl9EVVBfSVBWNC9JUFY2IERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAgb3B0aW9ucy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGJleW9uZCB0aGVpciBiYXNpYyBmdW5jdGlvbiwgbGV0JiMzOTtzIGV4cGxvcmUgdGhlaXIgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGVjb3N5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBtb2R1bGVzLCBvciBjb25maWd1cmF0aW9ucyAqc2VsZWN0KiB0aGVzZSBvcHRpb25zIOKAkyB3aGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gQ29udmVyc2VseSwgSSYjMzk7bSBlcXVhbGx5IGludGVyZXN0ZWQgaW4gd2hhdCAqZGVwZW5kcyogb24gdGhlbS4gV2hpY2ggcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2sgcmVseSBvbiB0aGVzZSBzZXR0aW5ncyB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoZW0sIGFuZCBwYXJ0aWN1bGFybHkgd2hlbiBjb25zaWRlcmluZyBjb21wYXRpYmlsaXR5IGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuIFdlIG5lZWQgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZWlyIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIGNvbm5lY3Rpb25zIGluIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfRFVQX0lQVls0Nl0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy00OS1cdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjUwOlx0c2VsZWN0IE5GX0RVUF9JUFY0XG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cdGhlbHBcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNzEtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo3Mjpjb25maWcgTkZfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIElQdjQgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblwmIzM0O1xuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT01MT1vYmotJChDT05GSUdfSVBfTkZfQVJQRklMVEVSKSAmIzQzOz0gYXJwdGFibGVfZmlsdGVyLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS01Mi1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICYjNDM7PSBuZl9kdXBfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NDM9Y29uZmlnIE5GVF9EVVBfSVBWNlxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTQ1LVx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XHRzZWxlY3QgTkZfRFVQX0lQVjZcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTQ3LVx0aGVscFxuLS1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTU5PWVuZGlmICMgTkZfVEFCTEVTXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjYxOmNvbmZpZyBORl9EVVBfSVBWNlxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNjItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXCYjMzQ7XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNikgJiM0Mzs9IG5mX3JlamVjdF9pcHY2Lm9cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yMy1cbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkZfRFVQX0lQVjYpICYjNDM7PSBuZl9kdXBfaXB2Ni5vXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjUtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTEwNTc9Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUyB8fCAhSVA2X05GX0lQVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTA2MjpcdHNlbGVjdCBORl9EVVBfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjEwNjM6XHRzZWxlY3QgTkZfRFVQX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODk1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIER1cGxpY2F0aW9uIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgaG93IElQdjQgYW5kIElQdjYgcGFja2V0cyBnZXQgZHVwbGljYXRlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGUgZHVwbGljYXRpb24gbG9naWMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYC4gVGhhdCYjMzk7bGwgYmUgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgd2l0aGluIHRob3NlIGZpbGVzIHRvIGdldCB0aGUgaW5mb3JtYXRpb24gSSByZXF1aXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiAoQykgMjAwNyBieSBTZWJhc3RpYW4gQ2xhw59lbiBcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXHUwMDNlXG4gICA0Olx0ICogKEMpIDIwMDctMjAxMCBieSBKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcbiAgIDU6XHQgKlxuICAgNjpcdCAqIEV4dHJhY3RlZCBmcm9tIHh0X1RFRS5jXG4gICA3Olx0ICovXG4gICA4Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvaXAuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGVyY3B1LmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yb3V0ZS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY25ldC9jaGVja3N1bS5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2Zsb3cuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiAgMTc6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaXAuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4gIDE5Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcdTAwM2VcbiAgMjA6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICAyMTpcdCNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcdTAwM2VcbiAgMjI6XHQjZW5kaWZcbiAgMjM6XHRcbiAgMjQ6XHRzdGF0aWMgYm9vbCBuZl9kdXBfaXB2NF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4gIDI1Olx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuICAyNjpcdHtcbiAgMjc6XHRcdGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7XG4gIDI4Olx0XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiAgMjk6XHRcdHN0cnVjdCBmbG93aTQgZmw0O1xuICAzMDpcdFxuICAzMTpcdFx0bWVtc2V0KFx1MDAyNmZsNCwgMCwgc2l6ZW9mKGZsNCkpO1xuICAzMjpcdFx0aWYgKG9pZiAhPSAtMSlcbiAgMzM6XHRcdFx0Zmw0LmZsb3dpNF9vaWYgPSBvaWY7XG4gIDM0Olx0XG4gIDM1Olx0XHRmbDQuZGFkZHIgPSBndy1cdTAwM2VzX2FkZHI7XG4gIDM2Olx0XHRmbDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBoKTtcbiAgMzc6XHRcdGZsNC5mbG93aTRfc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRTtcbiAgMzg6XHRcdGZsNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xuICAzOTpcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXHUwMDI2Zmw0KTtcbiAgNDA6XHRcdGlmIChJU19FUlIocnQpKVxuICA0MTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gIDQyOlx0XG4gIDQzOlx0XHRza2JfZHN0X2Ryb3Aoc2tiKTtcbiAgNDQ6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgXHUwMDI2cnQtXHUwMDNlZHN0KTtcbiAgNDU6XHRcdHNrYi1cdTAwM2VkZXYgICAgICA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4gIDQ2Olx0XHRza2ItXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XG4gIDQ3Olx0XG4gIDQ4Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNDk6XHR9XG4gIDUwOlx0XG4gIDUxOlx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuICA1MjpcdFx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxuICA1MzpcdHtcbiAgNTQ6XHRcdHN0cnVjdCBpcGhkciAqaXBoO1xuICA1NTpcdFxuICA1NjpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuICA1NzpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuICA1ODpcdFx0XHRnb3RvIG91dDtcbiAgNTk6XHRcdC8qXG4gIDYwOlx0XHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxuICA2MTpcdFx0ICogdGhlIG9yaWdpbmFsIHNrYiwgd2hpY2ggc2hvdWxkIGNvbnRpbnVlIG9uIGl0cyB3YXkgYXMgaWYgbm90aGluZyBoYXNcbiAgNjI6XHRcdCAqIGhhcHBlbmVkLiBUaGUgY29weSBzaG91bGQgYmUgaW5kZXBlbmRlbnRseSBkZWxpdmVyZWQgdG8gdGhlIGdhdGV3YXkuXG4gIDYzOlx0XHQgKi9cbiAgNjQ6XHRcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuICA2NTpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuICA2NjpcdFx0XHRnb3RvIG91dDtcbiAgNjc6XHRcbiAgNjg6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICA2OTpcdFx0LyogQXZvaWQgY291bnRpbmcgY2xvbmVkIHBhY2tldHMgdG93YXJkcyB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4gKi9cbiAgNzA6XHRcdG5mX3Jlc2V0X2N0KHNrYik7XG4gIDcxOlx0XHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xuICA3MjpcdCNlbmRpZlxuICA3MzpcdFx0LypcbiAgNzQ6XHRcdCAqIElmIHdlIGFyZSBpbiBQUkVST1VUSU5HL0lOUFVULCBkZWNyZWFzZSB0aGUgVFRMIHRvIG1pdGlnYXRlIHBvdGVudGlhbFxuICA3NTpcdFx0ICogbG9vcHMgYmV0d2VlbiB0d28gaG9zdHMuXG4gIDc2Olx0XHQgKlxuICA3NzpcdFx0ICogU2V0ICVJUF9ERiBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWxseVxuICA3ODpcdFx0ICogZGVjcmVhc2VkIE1UVSBvbiB0aGUgY2xvbmUgcm91dGUuIElQdjYgZG9lcyB0aGlzIHRvby5cbiAgNzk6XHRcdCAqXG4gIDgwOlx0XHQgKiBJUCBoZWFkZXIgY2hlY2tzdW0gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgaXBfbG9jYWxfb3V0LlxuICA4MTpcdFx0ICovXG4gIDgyOlx0XHRpcGggPSBpcF9oZHIoc2tiKTtcbiAgODM6XHRcdGlwaC1cdTAwM2VmcmFnX29mZiB8PSBodG9ucyhJUF9ERik7XG4gIDg0Olx0XHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XG4gIDg1Olx0XHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKVxuICA4NjpcdFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gIDg3Olx0XG4gIDg4Olx0XHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4gIDg5Olx0XHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiAgOTA6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuICA5MTpcdFx0XHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDkyOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDkzOlx0XHR9IGVsc2Uge1xuICA5NDpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgOTU6XHRcdH1cbiAgOTY6XHRvdXQ6XG4gIDk3Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgOTg6XHR9XG4gIDk5Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjQpO1xuIDEwMDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIElQdjYgRHVwbGljYXRlIFBhY2tldCBQcmV2ZW50aW9uIE1vZHVsZSoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIEkmIzM5O20gZ3Vlc3Npbmcgd2UmIzM5O3JlIGxpa2VseSBsb29raW5nIGF0IGhvdyBkdXBsaWNhdGUgSVB2NiBwYWNrZXRzIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yay4gVGhpcyBtZWFucyBJJiMzOTttIHByb2JhYmx5IGdvaW5nIHRvIGJlIGZvY3VzaW5nIG9uIHRoZSBsb2dpYyB0aGF0IHByZXZlbnRzIHJlZHVuZGFudCBwcm9jZXNzaW5nIG9yIHRyYW5zbWlzc2lvbiBvZiBwYWNrZXRzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhleSBpZGVudGlmeSBhbmQgZGlzY2FyZCB0aGVzZSBkdXBsaWNhdGVzIHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LCB3aGljaCBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIHNlcXVlbmNlIG51bWJlcnMsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHNwZWNpZmljIHRvIElQdjYmIzM5O3MgZGVzaWduLiBJIGV4cGVjdCB0byBiZSBsb29raW5nIGF0IGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyByZWxhdGVkIHRvIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgZGVkdXBsaWNhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiAgIDI6XHQvKlxuICAgMzpcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcbiAgIDQ6XHQgKiAoQykgMjAwNy0yMDEwIGJ5IEphbiBFbmdlbGhhcmR0IFx1MDAzY2plbmdlbGhAbWVkb3phcy5kZVx1MDAzZVxuICAgNTpcdCAqXG4gICA2Olx0ICogRXh0cmFjdGVkIGZyb20geHRfVEVFLmNcbiAgIDc6XHQgKi9cbiAgIDg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAgOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcmNwdS5oXHUwMDNlXG4gIDEwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMTE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFx1MDAzZVxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY25ldC9pcHY2LmhcdTAwM2VcbiAgMTM6XHQjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFx1MDAzZVxuICAxNTpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDE2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFx1MDAzZVxuICAxNzpcdCNlbmRpZlxuICAxODpcdFxuICAxOTpcdHN0YXRpYyBib29sIG5mX2R1cF9pcHY2X3JvdXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiAgMjA6XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxuICAyMTpcdHtcbiAgMjI6XHRcdGNvbnN0IHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xuICAyMzpcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuICAyNDpcdFx0c3RydWN0IGZsb3dpNiBmbDY7XG4gIDI1Olx0XG4gIDI2Olx0XHRtZW1zZXQoXHUwMDI2Zmw2LCAwLCBzaXplb2YoZmw2KSk7XG4gIDI3Olx0XHRpZiAob2lmICE9IC0xKVxuICAyODpcdFx0XHRmbDYuZmxvd2k2X29pZiA9IG9pZjtcbiAgMjk6XHRcbiAgMzA6XHRcdGZsNi5kYWRkciA9ICpndztcbiAgMzE6XHRcdGZsNi5mbG93bGFiZWwgPSAoX19mb3JjZSBfX2JlMzIpKCgoaXBoLVx1MDAzZWZsb3dfbGJsWzBdIFx1MDAyNiAweEYpIFx1MDAzY1x1MDAzYyAxNikgfFxuICAzMjpcdFx0XHRcdChpcGgtXHUwMDNlZmxvd19sYmxbMV0gXHUwMDNjXHUwMDNjIDgpIHwgaXBoLVx1MDAzZWZsb3dfbGJsWzJdKTtcbiAgMzM6XHRcdGZsNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xuICAzNDpcdFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIFx1MDAyNmZsNik7XG4gIDM1Olx0XHRpZiAoZHN0LVx1MDAzZWVycm9yKSB7XG4gIDM2Olx0XHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gIDM3Olx0XHRcdHJldHVybiBmYWxzZTtcbiAgMzg6XHRcdH1cbiAgMzk6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuICA0MDpcdFx0c2tiX2RzdF9zZXQoc2tiLCBkc3QpO1xuICA0MTpcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gZHN0X2Rldihkc3QpO1xuICA0MjpcdFx0c2tiLVx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XG4gIDQzOlx0XG4gIDQ0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAgNDU6XHR9XG4gIDQ2Olx0XG4gIDQ3Olx0dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuICA0ODpcdFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiAgNDk6XHR7XG4gIDUwOlx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDUxOlx0XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gIDUyOlx0XHRcdGdvdG8gb3V0O1xuICA1MzpcdFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gIDU0Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gIDU1Olx0XHRcdGdvdG8gb3V0O1xuICA1NjpcdFxuICA1NzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDU4Olx0XHRuZl9yZXNldF9jdChza2IpO1xuICA1OTpcdFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcbiAgNjA6XHQjZW5kaWZcbiAgNjE6XHRcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcbiAgNjI6XHRcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pIHtcbiAgNjM6XHRcdFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XG4gIDY0Olx0XHRcdC0taXBoLVx1MDAzZWhvcF9saW1pdDtcbiAgNjU6XHRcdH1cbiAgNjY6XHRcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbiAgNjc6XHRcdFx0c2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xuICA2ODpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDY5Olx0XHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gIDcwOlx0XHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4gIDcxOlx0XHR9IGVsc2Uge1xuICA3MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNzM6XHRcdH1cbiAgNzQ6XHRvdXQ6XG4gIDc1Olx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbiAgNzY6XHR9XG4gIDc3Olx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xuICA3ODpcdFxuICA3OTpcdE1PRFVMRV9BVVRIT1IoXCYjMzQ7U2ViYXN0aWFuIENsYcOfZW4gXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1x1MDAzZVwmIzM0Oyk7XG4gIDgwOlx0TU9EVUxFX0FVVEhPUihcJiMzNDtKYW4gRW5nZWxoYXJkdCBcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcdTAwM2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTYzCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBGdW5jdGlvbiBDYWxscyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYywgd2hpY2ggaXMgb2J2aW91c2x5IGltcG9ydGFudCBmb3IgdGhpbmdzIGxpa2UgbWlycm9yaW5nLCBsb2FkIGJhbGFuY2luZywgb3IgZXZlbiBqdXN0IGRlYnVnZ2luZyBuZXR3b3JrIHRyYWZmaWMuIEkgbmVlZCB0byBrbm93IHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW52b2tlZCwgaG93IHRoZXkmIzM5O3JlIGJlaW5nIHVzZWQgd2l0aGluIHRob3NlIGNvbnRleHRzLCBhbmQgdGhlIHBvc3NpYmxlIGltcGxpY2F0aW9ucyBvZiB0aGVpciBhcmd1bWVudHMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uIOKAkyB3aGF0IHNrYiBjb250ZXh0IGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gSG93IGFyZSB0aGUgSVAgaGVhZGVycyBtb2RpZmllZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJiMzOTttIGhvcGluZyB0byBnZXQgYSBxdWljayBvdmVydmlldyBvZiB0aGUgY2FsbCBzaXRlcywgbWF5YmUgaWRlbnRpZnkgYW55IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJ1Z3MsIG9yIGp1c3QgZ2VuZXJhbGx5IHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgZHVwbGljYXRlZCBwYWNrZXRzIHRocm91Z2ggdGhlIE5ldGZpbHRlciBzdGFjay4gVGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBzb21lIGxhcmdlciBhc3BlY3Qgb2YgbmV0d29yayBjb25uZWN0aW9uIG1hbmFnZW1lbnQgb3IgdHJhZmZpYyBzaGFwaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9kdXBfaXB2WzQ2XVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oLTctXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oOjg6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjQvbmZfZHVwX2lwdjQuaC05LVx0XHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKTtcbi0tXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oLTYtXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oOjc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaC04LVx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZik7XG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM9MjQ9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jLTUwLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmM6NTE6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTItXHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2NF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmM6MzA6XHRuZl9kdXBfaXB2NChuZnRfbmV0KHBrdCksIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFx1MDAyNmd3LCBvaWYpO1xubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jLTMxLX1cbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYz0xOT1zdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYzo0Nzp2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYy00OC1cdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2Nl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmMtMjctXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM6Mjg6XHRuZl9kdXBfaXB2NihuZnRfbmV0KHBrdCksIHBrdC1cdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIGd3LCBvaWYpO1xubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jLTI5LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jPTM3PXRlZV90ZzQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNDEtXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jOjQyOlx0bmZfZHVwX2lwdjQoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcdTAwMjZpbmZvLVx1MDAzZWd3LmluLCBvaWYpO1xubmV0L25ldGZpbHRlci94dF9URUUuYy00My1cbi0tXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jPTQ5PXRlZV90ZzYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IHh0X2FjdGlvbl9wYXJhbSAqcGFyKVxuLS1cbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTMtXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jOjU0Olx0bmZfZHVwX2lwdjYoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcdTAwMjZpbmZvLVx1MDAzZWd3LmluNiwgb2lmKTtcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFByb3Bvc2VkIENoYW5nZSoqCgpPa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9uZSBhdCB0aGF0LiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBlbmFibGluZyBmdXp6aW5nIGZvciBzb21ldGhpbmcgdGhhdCAqZGlyZWN0bHkqIG1vZGlmaWVzIGNvcmUga2VybmVsIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBsb2dpYy4gU3BlY2lmaWNhbGx5LCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBgc2tfYnVmZmAsIGBuZl9kdXBfaXB2NGAsIGBuZl9kdXBfaXB2NmAsIGFuZCBgbmZfY29weWAuIFRoZXNlIGFyZSBjcml0aWNhbCBwaWVjZXM7IGFueSB2dWxuZXJhYmlsaXR5IGhlcmUgY291bGQgaGF2ZSBzaWduaWZpY2FudCBjb25zZXF1ZW5jZXMsIHNvIGZ1enppbmcgaXMgZGVmaW5pdGVseSBhIGdvb2QgaWRlYS4KCk15IHByaW1hcnkgZm9jdXMgcG9pbnRzIGhlcmUgYXJlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAsIGFzIHRob3NlIGFyZSBleHBsaWNpdGx5IGNhbGxlZCBvdXQuIFRoYXQgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBjb25jZW50cmF0ZSBpdHMgZWZmb3J0cywgb3IgYXQgbGVhc3Qgd2hlcmUgaW5pdGlhbCB0YXJnZXRzIHdpbGwgYmUuCgpOb3csIHJlZ2FyZGluZyB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgdGhlIGNvcnJlY3QgbW9kdWxlcyBlbmFibGVkLiBJIGtub3cgd2UmIzM5O2xsIG5lZWQgYE5GX0RVUF9JUFY0YCBhbmQgYE5GX0RVUF9JUFY2YC4gQnV0IGl0JiMzOTtzIGFsc28gd29ydGggY2hlY2tpbmcgd2hldGhlciBgbmZ0X2R1cGAsIGB4dF9URUVgLCBvciBiYXNpYyBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdHkgYXJlIGVuYWJsZWQsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBmZWF0dXJlcy4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhbHNvIGhhdmUgYE5FVEZJTFRFUmAsIGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYCwgYElORVRgLCBhbmQgYElQVjZgIGNvbmZpZ3VyZWQuIEJlc3QgcHJhY3RpY2UgaXMgdG8gY292ZXIgdGhlc2UgY29uZmlndXJhdGlvbnMgYW5kIGVuc3VyZSB0aGUgZmVhdHVyZSB3aWxsIHdvcmsgYXMgaW50ZW5kZWQgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuCgpOZXh0IHN0ZXA6IEnigJlsbCBuZWVkIHRvIGRlbHZlIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBORlRfRFVQX0lQVjRgLCBgTkZUX0RVUF9JUFY2YCwgYW5kIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyB0aGVzZSByZWx5IG9uIHRvIHdvcmsgY29ycmVjdGx5LCBhbmQgd2hhdCBjb25maWd1cmF0aW9ucyBtaWdodCBiZSByZXF1aXJlZCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZSBlbmFibGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIGlzIGVzc2VudGlhbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRFVQX0lQVls0Nl0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQyPWNvbmZpZyBORlRfUkVKRUNUX0lQVjRcbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy00Ni1cbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjQ3OmNvbmZpZyBORlRfRFVQX0lQVjRcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ4LVx0dHJpc3RhdGUgXCYjMzQ7SVB2NCBuZl90YWJsZXMgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz0zOD1jb25maWcgTkZUX1JFSkVDVF9JUFY2XG4tLVxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDItXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgTkZUX0RVUF9JUFY2XG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NC1cdHRyaXN0YXRlIFwmIzM0O0lQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzQ0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipLY29uZmlnIERpdmUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hhdCBvcHRpb25zIGFyZSBjb25maWd1cmVkIGFyb3VuZCBsaW5lIDQ3LiBTb21ldGhpbmcmIzM5O3MgbmFnZ2luZyBhdCBtZSwgYW5kIEkgc3VzcGVjdCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEkmIzM5O20gY2hhc2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhhdCBzZWN0aW9uIGFuZCBqb2cgbXkgbWVtb3J5IG9mIHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGNvbnRleHQgYW5kIG1pZ2h0IHJlbWluZCBtZSBvZiBhIGNyaXRpY2FsIGRldGFpbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRpZiBORl9UQUJMRVNfSVBWNFxuICA0MTpcdFxuICA0MjpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjRcbiAgNDM6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNFxuICA0NDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQ1Olx0XHR0cmlzdGF0ZVxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBORlRfRFVQX0lQVjRcbiAgNDg6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDUwOlx0XHRzZWxlY3QgTkZfRFVQX0lQVjRcbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDUzOlx0XG4gIDU0Olx0Y29uZmlnIE5GVF9GSUJfSVBWNFxuICA1NTpcdFx0c2VsZWN0IE5GVF9GSUJcbiAgNTY6XHRcdHRyaXN0YXRlIFwmIzM0O25mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFwmIzM0O1xuICA1NzpcdFx0aGVscFxuICA1ODpcdFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjQgRklCIGxvb2t1cHMsIGUuZy4gZm9yIHJldmVyc2UgcGF0aCBmaWx0ZXJpbmcuXG4gIDU5Olx0XHQgIEl0IGFsc28gYWxsb3dzIHF1ZXJ5IG9mIHRoZSBGSUIgZm9yIHRoZSByb3V0ZSB0eXBlLCBlLmcuIGxvY2FsLCB1bmljYXN0LFxuICA2MDpcdFx0ICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLlxuICA2MTpcdFxuICA2MjpcdGVuZGlmICMgTkZfVEFCTEVTX0lQVjRcbiAgNjM6XHRcbiAgNjQ6XHRjb25maWcgTkZfVEFCTEVTX0FSUFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyB0aGUgSVB2NiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgbmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTttIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCBhcm91bmQgbGluZSA0My4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBkZXBlbmRlbmN5LiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJiMzOTttIGxpa2VseSB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIGZlYXR1cmUmIzM5O3MgYXZhaWxhYmlsaXR5IGJhc2VkIG9uIG90aGVyIGNvbmZpZ3VyYXRpb25zLCBvciBJIG1pZ2h0IGJlIGRlYnVnZ2luZyBhbiBpc3N1ZSByZWxhdGVkIHRvIElQdjYgZmlsdGVyaW5nLiBQZXJoYXBzIEkgYW0gaW52ZXN0aWdhdGluZyBhIHJlY2VudCBwYXRjaCBhbmQgbmVlZCB0byBjb25maXJtIGlmIGl0IGhhcyBjb3JyZWN0bHkgbGlua2VkIHVwIHRvIHRoZSBuZWNlc3NhcnkgZGVwZW5kZW5jaWVzLiBUaW1lIHRvIGRyaWxsIGRvd24gaW50byB0aGUgS2NvbmZpZyBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzU6XHRcbiAgMzY6XHRpZiBORl9UQUJMRVNfSVBWNlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBORlRfUkVKRUNUX0lQVjZcbiAgMzk6XHRcdHNlbGVjdCBORl9SRUpFQ1RfSVBWNlxuICA0MDpcdFx0ZGVmYXVsdCBORlRfUkVKRUNUXG4gIDQxOlx0XHR0cmlzdGF0ZVxuICA0MjpcdFxuICA0MzpcdGNvbmZpZyBORlRfRFVQX0lQVjZcbiAgNDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0lQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gIDQ1Olx0XHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXG4gIDQ2Olx0XHRzZWxlY3QgTkZfRFVQX0lQVjZcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY2IHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0IGZvciBuZl90YWJsZXMuXG4gIDQ5Olx0XG4gIDUwOlx0Y29uZmlnIE5GVF9GSUJfSVBWNlxuICA1MTpcdFx0dHJpc3RhdGUgXCYjMzQ7bmZfdGFibGVzIGZpYiAvIGlwdjYgcm91dGUgbG9va3VwIHN1cHBvcnRcJiMzNDtcbiAgNTI6XHRcdHNlbGVjdCBORlRfRklCXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NiBGSUIgbG9va3VwcywgZS5nLiBmb3IgcmV2ZXJzZSBwYXRoIGZpbHRlcmluZy5cbiAgNTU6XHRcdCAgSXQgYWxzbyBhbGxvd3MgcXVlcnkgb2YgdGhlIEZJQiBmb3IgdGhlIHJvdXRlIHR5cGUsIGUuZy4gbG9jYWwsIHVuaWNhc3QsXG4gIDU2Olx0XHQgIG11bHRpY2FzdCBvciBibGFja2hvbGUuXG4gIDU3Olx0XG4gIDU4Olx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNlxuICA1OTpcdGVuZGlmICMgTkZfVEFCTEVTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDI4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIHRoZSBgS2NvbmZpZ2AgZm9yIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAqKgoKT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAgdGFyZ2V0IGluIG5ldGZpbHRlci4gQmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBzbyBsZXQgbWUgcHVsbCB1cCBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBuZWFyIHRoZSBlbmQgb2YgdGhlIG5ldGZpbHRlciB0YXJnZXQgZGVmaW5pdGlvbnMuIEkmIzM5O2xsIGp1bXAgdG8gYXJvdW5kIGxpbmUgMTA1NyBvciBzbyDigJMgdGhhdCYjMzk7cyBvZnRlbiB3aGVyZSB0aGV5IGdyb3VwIHNpbWlsYXIgZmVhdHVyZXMuIEhvcGVmdWxseSwgdGhlIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY2llcyBhcmUgY2xlYXIgdGhlcmUuIFRoaXMgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBvYnZpb3VzIGlzc3VlIG9yIGZ1cnRoZXIgY29udGV4dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVzdWFsOiB0aGUgZGVwZW5kZW5jeSB0cmVlLCBhbnkgZGVmYXVsdCBvcHRpb25zLCBhbmQgYSBjbGVhciBkZXNjcmlwdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNTU6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXG4xMDU2Olx0XG4xMDU3Olx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXG4xMDU4Olx0XHR0cmlzdGF0ZSAmIzM5O1wmIzM0O1RFRVwmIzM0OyAtIHBhY2tldCBjbG9uaW5nIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvbiYjMzk7XG4xMDU5Olx0XHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxuMTA2MDpcdFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xuMTA2MTpcdFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xuMTA2MjpcdFx0c2VsZWN0IE5GX0RVUF9JUFY0XG4xMDYzOlx0XHRzZWxlY3QgTkZfRFVQX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTXG4xMDY0Olx0XHRoZWxwXG4xMDY1Olx0XHRUaGlzIG9wdGlvbiBhZGRzIGEgXCYjMzQ7VEVFXCYjMzQ7IHRhcmdldCB3aXRoIHdoaWNoIGEgcGFja2V0IGNhbiBiZSBjbG9uZWQgYW5kXG4xMDY2Olx0XHR0aGlzIGNsb25lIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgbmV4dGhvcC5cbjEwNjc6XHRcbjEwNjg6XHRjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9UUFJPWFlcbjEwNjk6XHRcdHRyaXN0YXRlICYjMzk7XCYjMzQ7VFBST1hZXCYjMzQ7IHRhcmdldCB0cmFuc3BhcmVudCBwcm94eWluZyBzdXBwb3J0JiMzOTtcbjEwNzA6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX1hUQUJMRVNcbjEwNzE6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4xMDcyOlx0XHRkZXBlbmRzIG9uIElQNl9ORl9JUFRBQkxFUyB8fCBJUDZfTkZfSVBUQUJMRVM9blxuMTA3MzpcdFx0ZGVwZW5kcyBvbiBJUF9ORl9NQU5HTEUgfHwgTkZUX0NPTVBBVFxuMTA3NDpcdFx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG4xMDc1Olx0XHRzZWxlY3QgTkZfREVGUkFHX0lQVjYgaWYgSVA2X05GX0lQVEFCTEVTICE9IG5cbjEwNzY6XHRcdHNlbGVjdCBORl9UUFJPWFlfSVBWNFxuMTA3NzpcdFx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xuMTA3ODpcdFx0aGVscFxuMTA3OTpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIGEgYFRQUk9YWSYjMzk7IHRhcmdldCwgd2hpY2ggaXMgc29tZXdoYXQgc2ltaWxhciB0b1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzEzMwoJCQkJCQkJb3V0cHV0OiAxNTYKCQkJCQkJCXRob3VnaHRzOiA0MDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldGZpbHRlciBEdXBsaWNhdGlvbiBDb25maWd1cmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHJlbGF0ZWQgdG8gSVBWNCBhbmQgSVBWNiBkdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhlIGRpcmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnM6IGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAuIEkgc2VlIHRoYXQgYE5GX0RVUF9JUFY0YCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseSwgb3IgdGhyb3VnaCB0aGUgTmV0ZmlsdGVyIHRhYmxlIGV4dGVuc2lvbnMsIGBORlRfRFVQX0lQVjRgLCBvciBldmVuIHZpYSB0aGUgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYCBvcHRpb24sIHdoaWNoIGltcGxpZXMgc29tZSBsZXZlbCBvZiBURUUgc3VwcG9ydCBpcyBiZWluZyBsZXZlcmFnZWQuIFRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMgdG8gSVB2NiBhbmQgYE5GX0RVUF9JUFY2YCwgd2hpY2ggY2FuIGJlIGVuYWJsZWQgZGlyZWN0bHkgb3IgdmlhIGBORlRfRFVQX0lQVjZgIG9yIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBib3RoIGBORl9EVVBfSVBWNGAgYW5kIGBORl9EVVBfSVBWNmAgaGF2ZSBhIHJhdGhlciByZWxheGVkIGRlcGVuZGVuY3kgb24gY29ubmVjdGlvbiB0cmFja2luZywgc3BlY2lmaWNhbGx5IHRoYXQgdGhleSBjYW4gZXhpc3Qgd2l0aCAqb3IqIHdpdGhvdXQgaXQ6IGAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC4KClRoZSBwYXRjaCBpdHNlbGYgYXBwZWFycyB0byBiZSBndWFyZGluZyB0aGUgYHNrYmAgZmllbGQgd2l0aCBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzIGJhc2VkIG9uIHdoZXRoZXIgYE5GX0RVUF9JUFY0YCBvciBgTkZfRFVQX0lQVjZgIGFyZSBlbmFibGVkLCB3aGljaCBpcyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuCgpTbywgdG8gc3VtbWFyaXplIHRoZSByZWxldmFudCBjb25maWdzLCBJJiMzOTtsbCBuZWVkIHRvIGNvbnNpZGVyOiBgTkZfRFVQX0lQVjRgLCBgTkZfRFVQX0lQVjZgLCBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCB0aGUgY29tbW9uIGRlbm9taW5hdG9yIG9mIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuCgpUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXI6IGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAuCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIHRvb2wmIzM5O3MgcGFyYW1ldGVycyBhbmQgcmVxdWlyZW1lbnRzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGFsaWducy4gSSBzZWU6Ci0gYFdvcnRoRnV6emluZ2A6IFRydWUsIHdoaWNoIGlzIGV4cGVjdGVkLgotIGBGb2N1c1N5bWJvbHNgOiBDb25maXJtZWQuIFRoZXkgYXJlIHByZWNpc2VseSB3aGF0IEkgYW50aWNpcGF0ZWQuCi0gYEVuYWJsZUNvbmZpZ3NgOiBMb29rcyBzcG90IG9uOyBhbGwgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlIGxpc3RlZC4KLSBgUmVhc29uaW5nYDogU2VlbXMgY29uY2lzZS4KCkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZfRFVQX0lQVjYmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY0JiMzNDssCiAgICAmIzM0O05GVF9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfWFRfVEFSR0VUX1RFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX2R1cF9pcHY0JiMzNDssCiAgICAmIzM0O25mX2R1cF9pcHY2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgJiMzOTtuZl9kdXBsaWNhdGVkJiMzOTsgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9EVVBfSVBWNCYjMzQ7LAogICAgJiMzNDtORl9EVVBfSVBWNiYjMzQ7LAogICAgJiMzNDtORlRfRFVQX0lQVjQmIzM0OywKICAgICYjMzQ7TkZUX0RVUF9JUFY2JiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9YVF9UQVJHRVRfVEVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfZHVwX2lwdjQmIzM0OywKICAgICYjMzQ7bmZfZHVwX2lwdjYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAmIzM5O25mX2R1cGxpY2F0ZWQmIzM5OyBiaXQgaW4gc3RydWN0IHNrX2J1ZmYgdG8gdHJhY2sgY2xvbmVkIHBhY2tldHMgYWNyb3NzIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBob29rcyAoZS5nLiBuZnRfZHVwIGFuZCB4dF9URUUpLCBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzLiBUaGlzIGRpcmVjdGx5IGNoYW5nZXMgcGFja2V0IGNsb25pbmcgYW5kIHJvdXRpbmcgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyIElQdjQgYW5kIElQdjYgZHVwbGljYXRpb24gcGF0aHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgMS1iaXQgZmxhZyBgbmZfZHVwbGljYXRlZGAgdG8gYHN0cnVjdCBza19idWZmYCBhbmQgc2V0cy9jaGVja3MgaXQgaW4gYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCB0byBwcmV2ZW50IGluZmluaXRlIHBhY2tldCBkdXBsaWNhdGlvbiBsb29wcy5cblxuMS4gSW5pdGlhbGl6YXRpb246IEFsbCBgc2tfYnVmZmAgaW5zdGFuY2VzIGFyZSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uIHZpYSBgc2tidWZmX2NsZWFyKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5IGZyb20gdGhlIHN0YXJ0IG9mIGBzdHJ1Y3Qgc2tfYnVmZmAgdXAgdG8gYHRhaWxgKSwgZW5zdXJpbmcgYG5mX2R1cGxpY2F0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAuIEl0IGlzIHByb3Blcmx5IHByZXNlcnZlZCBpbiBgbmZfY29weSgpYCBhbmQgYF9fY29weV9za2JfaGVhZGVyKClgLlxuMi4gTm8gSW5mby1MZWFrczogYG5mX2R1cGxpY2F0ZWRgIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgZmxhZyB3aXRoaW4gYHN0cnVjdCBza19idWZmYCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzg5MjQzOThkMjRjODlmZmRjNWQwODZjY2Q4YTc0OGFiM2VkNzBhYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDA3OjAyOjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggNTUyMjcxNmRmOGZmZi4uZjVjN2I3YjFjZWRlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC04MTIsNiAmIzQzOzgxMiw3IEBAIGVudW0gc2tiX3RzdGFtcF90eXBlIHsKICAqCUByZWRpcmVjdGVkOiBwYWNrZXQgd2FzIHJlZGlyZWN0ZWQgYnkgcGFja2V0IGNsYXNzaWZpZXIKICAqCUBmcm9tX2luZ3Jlc3M6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBmcm9tIHRoZSBpbmdyZXNzIHBhdGgKICAqCUBuZl9za2lwX2VncmVzczogcGFja2V0IHNoYWxsIHNraXAgbmYgZWdyZXNzIC0gc2VlIG5ldGZpbHRlcl9uZXRkZXYuaAomIzQzOyAqCUBuZl9kdXBsaWNhdGVkOiBwYWNrZXQgd2FzIGdlbmVyYXRlZCBieSBhIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBhY3Rpb24KICAqCUBwZWVrZWQ6IHRoaXMgcGFja2V0IGhhcyBiZWVuIHNlZW4gYWxyZWFkeSwgc28gc3RhdHMgaGF2ZSBiZWVuCiAgKgkJZG9uZSBmb3IgaXQsIGRvbiYjMzk7dCBkbyB0aGVtIGFnYWluCiAgKglAbmZfdHJhY2U6IG5ldGZpbHRlciBwYWNrZXQgdHJhY2UgZmxhZwpAQCAtMTAyMyw2ICYjNDM7MTAyNCw5IEBAIHN0cnVjdCBza19idWZmIHsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1NLSVBfRUdSRVNTCiAJX191OAkJCW5mX3NraXBfZWdyZXNzOjE7CiAjZW5kaWYKJiM0MzsjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KQomIzQzOwlfX3U4CQkJbmZfZHVwbGljYXRlZDoxOwomIzQzOyNlbmRpZgogI2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVECiAJX191OAkJCWRlY3J5cHRlZDoxOwogI2VuZGlmCkBAIC01MjAwLDYgJiM0Mzs1MjA0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG5mX2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYykKIAluZl9jb25udHJhY2tfcHV0KHNrYl9uZmN0KGRzdCkpOwogI2VuZGlmCiAJZHN0LSZndDtzbG93X2dybyA9IHNyYy0mZ3Q7c2xvd19ncm87CiYjNDM7I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNikKJiM0MzsJZHN0LSZndDtuZl9kdXBsaWNhdGVkID0gc3JjLSZndDtuZl9kdXBsaWNhdGVkOwomIzQzOyNlbmRpZgogCV9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKaW5kZXggOWE3NzM1MDJmMTBhYy4uOGZlMzFhMGRiMDYzYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMKQEAgLTU0LDcgJiM0Mzs1NCw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSwKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlKQomIzQzOwlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlIHx8IHNrYi0mZ3Q7bmZfZHVwbGljYXRlZCkKIAkJZ290byBvdXQ7CiAJLyoKIAkgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvcgpAQCAtODYsNiAmIzQzOzg2LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQktLWlwaC0mZ3Q7dHRsOwogCiAJaWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkgewomIzQzOwkJc2tiLSZndDtuZl9kdXBsaWNhdGVkID0gMTsKIAkJY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlID0gdHJ1ZTsKIAkJaXBfbG9jYWxfb3V0KG5ldCwgc2tiLSZndDtzaywgc2tiKTsKIAkJY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlID0gZmFsc2U7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jCmluZGV4IDZkYTMxMDJiN2MxYjMuLmUwZmRiNDNkN2QzZGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jCkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sCiAJCSBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKQogewogCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlKQomIzQzOwlpZiAoY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlIHx8IHNrYi0mZ3Q7bmZfZHVwbGljYXRlZCkKIAkJZ290byBvdXQ7CiAJc2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKQpAQCAtNjQsNiAmIzQzOzY0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQktLWlwaC0mZ3Q7aG9wX2xpbWl0OwogCX0KIAlpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7CiYjNDM7CQlza2ItJmd0O25mX2R1cGxpY2F0ZWQgPSAxOwogCQljdXJyZW50LSZndDtpbl9uZl9kdXBsaWNhdGUgPSB0cnVlOwogCQlpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLSZndDtzaywgc2tiKTsKIAkJY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlID0gZmFsc2U7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIGlmIHdlIGhhdmUgYW55IEtNU0FOIGNvbmNlcm5zIHdpdGggdGhlc2UgY2hhbmdlcy4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiB3ZSYjMzk7cmUgYWRkaW5nIHRoZSBgbmZfZHVwbGljYXRlZDoxYCBiaXRmaWVsZCB0byB0aGUgYHN0cnVjdCBza19idWZmYCBhbmQgdGhlbiBjb3B5aW5nIGl0cyB2YWx1ZSBpbiBgbmZfY29weWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgd2UgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHdpdGggdGhpcz8KCkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBza19idWZmYCBpcyAqYWN0dWFsbHkqIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgdGhlIGtleS4gQXJlIHdlIHVzaW5nIGBrbWVtX2NhY2hlYCwgYXJlIHdlIHJlbHlpbmcgb24gYG1lbXNldGAgYXQgYW55IHBvaW50LCBvciBpcyB0aGVyZSBhbm90aGVyIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbSBhdCBwbGF5PyBUaGF0JiMzOTtzIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4gSSBuZWVkIHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGJpdGZpZWxkcyBhcmUgaGFuZGxlZCBkdXJpbmcgYWxsb2NhdGlvbi4KClRvIGRvIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBgbmV0L2NvcmUvc2tidWZmLmNgIGFuZCBodW50IGRvd24gdGhlIGFsbG9jYXRvcnMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgX19hbGxvY19za2JgLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgbmV3IGFsbG9jYXRpb24gcGF0aHMgb3IgbW9kaWZpZXMgZXhpc3Rpbmcgb25lcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIGFsbG9jYXRpb24gY29kZSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemluZyB0aGlzIG5ldyBiaXRmaWVsZCwgb3IgaWYgaXQgbWlnaHQgYmUgbGVmdCBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLiBXZSBhbHNvIG5lZWQgdG8gY29uc2lkZXIgb3RoZXIgbWV0aG9kcywgc3VjaCBhcyBga21lbV9jYWNoZWAgYW5kIGBtZW1zZXRgLgoKSSYjMzk7bGwgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBlZmZpY2llbnRseSBjb21iIHRocm91Z2ggdGhlIGNvZGUuIEkgbmVlZCB0byBiZSAqc3VyZSogYWJvdXQgdGhlIGFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHByb2Nlc3MgZm9yIGBzdHJ1Y3Qgc2tfYnVmZmAsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IHBsYWNlIHdoZXJlIHdlIGNvdWxkIHBvdGVudGlhbGx5IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIGlmIEtNU0FOIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19hbGxvY19za2ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy02NTctLyoqXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcdF9fYWxsb2Nfc2tiXHQtXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXG5uZXQvY29yZS9za2J1ZmYuYy02NTktICpcdEBzaXplOiBzaXplIHRvIGFsbG9jYXRlXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNjczLSAqL1xubmV0L2NvcmUvc2tidWZmLmM6Njc0OnN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzQ1LX1cbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTc0Ny1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTc3Ni1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6Nzc3Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlgsIE5VTUFfTk9fTk9ERSk7XG5uZXQvY29yZS9za2J1ZmYuYy03NzgtXHRcdGlmICghc2tiKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTg1NC1cdCAgICAoZ2ZwX21hc2sgXHUwMDI2IChfX0dGUF9ESVJFQ1RfUkVDTEFJTSB8IEdGUF9ETUEpKSkge1xubmV0L2NvcmUvc2tidWZmLmM6ODU1Olx0XHRza2IgPSBfX2FsbG9jX3NrYihsZW4sIGdmcF9tYXNrLCBTS0JfQUxMT0NfUlggfCBTS0JfQUxMT0NfTkFQSSxcbm5ldC9jb3JlL3NrYnVmZi5jLTg1Ni1cdFx0XHRcdCAgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMTgwPXN0cnVjdCBza19idWZmICpza2JfY29weShjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0yMTkzLVx0c2l6ZSA9IHNrYl9lbmRfb2Zmc2V0KHNrYikgJiM0Mzsgc2tiLVx1MDAzZWRhdGFfbGVuO1xubmV0L2NvcmUvc2tidWZmLmM6MjE5NDpcdG4gPSBfX2FsbG9jX3NrYihzaXplLCBnZnBfbWFzayxcbm5ldC9jb3JlL3NrYnVmZi5jLTIxOTUtXHRcdFx0c2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSwgTlVNQV9OT19OT0RFKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz0yMjI4PXN0cnVjdCBza19idWZmICpfX3Bza2JfY29weV9mY2xvbmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhlYWRyb29tLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzItXHRpbnQgZmxhZ3MgPSBza2JfYWxsb2NfcnhfZmxhZyhza2IpIHwgKGZjbG9uZSA/IFNLQl9BTExPQ19GQ0xPTkUgOiAwKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjIyMzM6XHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzQtXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MjUwNT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMjUyMi1cdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYzoyNTIzOlx0biA9IF9fYWxsb2Nfc2tiKG5ld2hlYWRyb29tICYjNDM7IHNrYi1cdTAwM2VsZW4gJiM0MzsgbmV3dGFpbHJvb20sXG5uZXQvY29yZS9za2J1ZmYuYy0yNTI0LVx0XHRcdGdmcF9tYXNrLCBza2JfYWxsb2NfcnhfZmxhZyhza2IpLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00OTU4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk1OTpcdFx0XHRuc2tiID0gX19hbGxvY19za2IoaHNpemUgJiM0MzsgZG9mZnNldCAmIzQzOyBoZWFkcm9vbSxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjAtXHRcdFx0XHRcdCAgIEdGUF9BVE9NSUMsIHNrYl9hbGxvY19yeF9mbGFnKGhlYWRfc2tiKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgU0tCIEFsbG9jYXRpb24gUHJvY2VzcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIHNvY2tldCBidWZmZXJzIGFyZSBhY3R1YWxseSBhbGxvY2F0ZWQuIEZpcnN0LCBJJiMzOTttIGdvaW5nIHRvIHB1bGwgdXAgYF9fYWxsb2Nfc2tiYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBJIHdhbnQgdG8gc2VlIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aGUgaW5pdGlhbCBhbGxvY2F0aW9uIGFuZCBhbnkgYXNzb2NpYXRlZCBtZXRhZGF0YSBzZXR1cC4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aGUgZGV0YWlscyB0aGF0IG1pZ2h0IGltcGFjdCBwZXJmb3JtYW5jZSBhbmQgaG93IHJlc291cmNlcyBhcmUgbWFuYWdlZCwgbWF5YmUgZXhhbWluaW5nIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHNsYWIgYWxsb2NhdG9yIG9yIHNwZWNpZmljIE5VTUEgY29uc2lkZXJhdGlvbnMuIFRoZW4sIEnigJlsbCBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIHRoZSBgc2tfYnVmZmAgZGVmaW5pdGlvbiBpdHNlbGYsIGZvdW5kIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIHRpZSB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzIHRvIHRoZSBidWZmZXIgc3RydWN0dXJlIGl0c2VsZiDigJMgd2hhdCBhcmUgdGhlIGNvcmUgZmllbGRzIHRoYXQgYXJlIGluaXRpYWxpemVkLCB3aGF0JiMzOTtzIHRoZSBtZW1vcnkgbGF5b3V0LCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgbWFwIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIHRoZSBzdHJ1Y3R1cmU/IEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIOKAkyB0aGUgbWVjaGFuaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGNvbWJpbmVkIHdpdGggdGhlIHN0cnVjdHVyZSYjMzk7cyBkZXNpZ24g4oCTIHRvIHBpbnBvaW50IGFyZWFzIGZvciBvcHRpbWl6YXRpb24gb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgYW55IGRlZXBlciBpbnZlc3RpZ2F0aW9uIGludG8gbmV0d29yayBwZXJmb3JtYW5jZSBvciBwb3RlbnRpYWwgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHJlbGF0ZWQgdG8gU0tCcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjcwOlx0ICpcbiA2NzE6XHQgKlx0QnVmZmVycyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgZnJvbSBpbnRlcnJ1cHRzIHVzaW5nIGEgQGdmcF9tYXNrIG9mXG4gNjcyOlx0ICpcdCVHRlBfQVRPTUlDLlxuIDY3MzpcdCAqL1xuIDY3NDpcdHN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gNjc1Olx0XHRcdFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXG4gNjc2Olx0e1xuIDY3NzpcdFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7XG4gNjc4Olx0XHRzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGU7XG4gNjc5Olx0XHR1OCAqZGF0YTtcbiA2ODA6XHRcbiA2ODE6XHRcdGlmIChza19tZW1hbGxvY19zb2NrcygpIFx1MDAyNlx1MDAyNiAoZmxhZ3MgXHUwMDI2IFNLQl9BTExPQ19SWCkpXG4gNjgyOlx0XHRcdGdmcF9tYXNrIHw9IF9fR0ZQX01FTUFMTE9DO1xuIDY4MzpcdFxuIDY4NDpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfRkNMT05FKSB7XG4gNjg1Olx0XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcbiA2ODY6XHRcdFx0Z290byBmYWxsYmFjaztcbiA2ODc6XHRcdH1cbiA2ODg6XHRcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2NhY2hlO1xuIDY4OTpcdFx0aWYgKHVubGlrZWx5KG5vZGUgIT0gTlVNQV9OT19OT0RFIFx1MDAyNlx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxuIDY5MDpcdFx0XHRnb3RvIGZhbGxiYWNrO1xuIDY5MTpcdFxuIDY5MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBTS0JfQUxMT0NfTkFQSSkge1xuIDY5MzpcdFx0XHRza2IgPSBuYXBpX3NrYl9jYWNoZV9nZXQodHJ1ZSk7XG4gNjk0Olx0XHRcdGlmICh1bmxpa2VseSghc2tiKSlcbiA2OTU6XHRcdFx0XHRyZXR1cm4gTlVMTDtcbiA2OTY6XHRcdH0gZWxzZSBpZiAoIWluX2hhcmRpcnEoKSBcdTAwMjZcdTAwMjYgIWlycXNfZGlzYWJsZWQoKSkge1xuIDY5NzpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gNjk4Olx0XHRcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XG4gNjk5Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIDcwMDpcdFx0fVxuIDcwMTpcdFxuIDcwMjpcdFx0aWYgKCFza2IpIHtcbiA3MDM6XHRmYWxsYmFjazpcbiA3MDQ6XHRcdFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcdTAwMjYgfkdGUF9ETUEsIG5vZGUpO1xuIDcwNTpcdFx0XHRpZiAodW5saWtlbHkoIXNrYikpXG4gNzA2Olx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gNzA3Olx0XHR9XG4gNzA4Olx0XHRza2J1ZmZfY2xlYXIoc2tiKTtcbiA3MDk6XHRcbiA3MTA6XHRcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXG4gNzExOlx0XHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFx1MDAzZSBTTVBfQ0FDSEVfQllURVMpIGdpdmVzXG4gNzEyOlx0XHQgKiBhbGlnbmVkIG1lbW9yeSBibG9ja3MsIHVubGVzcyBTTFVCL1NMQUIgZGVidWcgaXMgZW5hYmxlZC5cbiA3MTM6XHRcdCAqIEJvdGggc2tiLVx1MDAzZWhlYWQgYW5kIHNrYl9zaGFyZWRfaW5mbyBhcmUgY2FjaGUgbGluZSBhbGlnbmVkLlxuIDcxNDpcdFx0ICovXG4gNzE1Olx0XHRkYXRhID0ga21hbGxvY19yZXNlcnZlKFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xuIDcxNjpcdFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcbiA3MTc6XHRcdFx0Z290byBub2RhdGE7XG4gNzE4Olx0XHQvKiBrbWFsbG9jX3NpemVfcm91bmR1cCgpIG1pZ2h0IGdpdmUgdXMgbW9yZSByb29tIHRoYW4gcmVxdWVzdGVkLlxuIDcxOTpcdFx0ICogUHV0IHNrYl9zaGFyZWRfaW5mbyBleGFjdGx5IGF0IHRoZSBlbmQgb2YgYWxsb2NhdGVkIHpvbmUsXG4gNzIwOlx0XHQgKiB0byBhbGxvdyBtYXggcG9zc2libGUgZmlsbGluZyBiZWZvcmUgcmVhbGxvY2F0aW9uLlxuIDcyMTpcdFx0ICovXG4gNzIyOlx0XHRfX2ZpbmFsaXplX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBzaXplKTtcbiA3MjM6XHRcbiA3MjQ6XHRcdGlmIChmbGFncyBcdTAwMjYgU0tCX0FMTE9DX0ZDTE9ORSkge1xuIDcyNTpcdFx0XHRzdHJ1Y3Qgc2tfYnVmZl9mY2xvbmVzICpmY2xvbmVzO1xuIDcyNjpcdFxuIDcyNzpcdFx0XHRmY2xvbmVzID0gY29udGFpbmVyX29mKHNrYiwgc3RydWN0IHNrX2J1ZmZfZmNsb25lcywgc2tiMSk7XG4gNzI4Olx0XG4gNzI5Olx0XHRcdC8qIHNrYi1cdTAwM2VmY2xvbmUgaXMgYSAyYml0cyBmaWVsZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjA4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBza2J1ZmZfY2xlYXJgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIHByb2JsZW0gbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBoYW5kbGluZyBvZiBTS0JzIChTb2NrZXQgQnVmZmVycyksIGFuZCBgc2tidWZmX2NsZWFyYCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZS4uLkkgdGhpbmsgSSByZW1lbWJlciBpdCBiZWluZyBkZWZpbmVkIGVpdGhlciBpbiB0aGUgbWFpbiBgc2tidWZmLmhgIGhlYWRlciBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGZvdW5kIHVuZGVyIGBpbmNsdWRlL2xpbnV4YCwgb3IgcGVyaGFwcyBpbiB0aGUgY29yZSBuZXR3b3JrIGNvZGUsIGxpa2VseSB1bmRlciBgbmV0L2NvcmVgIHdpdGhpbiBgc2tidWZmLmNgLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiwgc28gaXQmIzM5O3MgcHJvYmFibHkgZGVjbGFyZWQgKmFuZCogZGVmaW5lZCBpbiBvbmUgb2YgdGhvc2UgdHdvIGxvY2F0aW9ucy4gSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCB0aGUgc291cmNlIGZpbGUuIExldCBtZSBjaGVjayB0aGUgZG9jdW1lbnRhdGlvbiBvbiBpdHMgdXNhZ2UgYWxzby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2J1ZmZfY2xlYXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0OAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkZpbmRpbmcgYHNrYnVmZl9jbGVhcmAqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGZ1bmN0aW9uIGBza2J1ZmZfY2xlYXJgLiBJJiMzOTttIGd1ZXNzaW5nIGl0JiMzOTtzIGEgcHJldHR5IGZ1bmRhbWVudGFsIG9wZXJhdGlvbiByZWxhdGVkIHRvIGBza19idWZmc2AsIHNvIGl0IHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gbG9jYXRlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgY29yZSBuZXR3b3JraW5nIGhlYWRlcnMsIHByb2JhYmx5IHdpdGhpbiB0aGUgYGluY2x1ZGUvbGludXgvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSBhbnl0aGluZyByZWxhdGVkIHRvIGBza2J1ZmYuaGAgb3IsIHBvdGVudGlhbGx5LCBsb3dlci1sZXZlbCBidWZmZXIgbWFuYWdlbWVudC4gSSBrbm93IGtlcm5lbCBkb2N1bWVudGF0aW9uLCB3aGlsZSBub3QgYWx3YXlzIGV4aGF1c3RpdmUsIG9mdGVuIGluY2x1ZGVzIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucywgc28gSSYjMzk7bGwgYWxzbyBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaWYgSSBoYXZlIHF1aWNrIGFjY2VzcyB0byBpdCAoZS5nLiB0aHJvdWdoIGEgYnVpbHQgaW4gaGVscCBzeXN0ZW0pLiBJZiBJJiMzOTttIGx1Y2t5LCBJIG1pZ2h0IGV2ZW4gYmUgYWJsZSB0byBncmVwIHRocm91Z2ggdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBkaXJlY3RseS4gS25vd2luZyB0aGUgZnVuY3Rpb24mIzM5O3MgbmFtZSBjYW4gb2Z0ZW4gZ3VpZGUgbWUgcHJldHR5IGVmZmljaWVudGx5LCBlc3BlY2lhbGx5IGlmIHRoZSBuYW1pbmcgY29udmVudGlvbnMgYXJlIGNvbnNpc3RlbnQsIHdoaWNoIGlzIHR5cGljYWwgaW4ga2VybmVsIGNvZGUuIEkmIzM5O2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJZiBpdCYjMzk7cyB1c2VkIGluIGFueSBvYnZpb3VzIHBsYWNlcywgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgc2hvdWxkIHRlbGwgbWUgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NrYnVmZl9jbGVhciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYz0yODQ9c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9za2JfY2FjaGVfZ2V0KGJvb2wgYWxsb2MpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xubmV0L2NvcmUvc2tidWZmLmM6MzE2OnN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL3NrYnVmZi5jLTMxNy17XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9MzQ0PXUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVx0XHRrYXNhbl9tZW1wb29sX3VucG9pc29uX29iamVjdChza2JzW2ldLCBza2J1ZmZfY2FjaGVfc2l6ZSk7XG5uZXQvY29yZS9za2J1ZmYuYzozODA6XHRcdHNrYnVmZl9jbGVhcihza2JzW2ldKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cdH1cbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDQ2LVxubmV0L2NvcmUvc2tidWZmLmM6NDQ3Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NDgtXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcdTAwMjZzaXplKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNDk4LVxubmV0L2NvcmUvc2tidWZmLmM6NDk5Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy01MDAtXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTU1Mj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKl9fbmFwaV9idWlsZF9za2Iodm9pZCAqZGF0YSwgdW5zaWduZWQgaW50IGZyYWdfc2l6ZSlcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy01NTktXG5uZXQvY29yZS9za2J1ZmYuYzo1NjA6XHRza2J1ZmZfY2xlYXIoc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTU2MS1cdF9fYnVpbGRfc2tiX2Fyb3VuZChza2IsIGRhdGEsIGZyYWdfc2l6ZSk7XG4tLVxubmV0L2NvcmUvc2tidWZmLmM9Njc0PXN0cnVjdCBza19idWZmICpfX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVx0fVxubmV0L2NvcmUvc2tidWZmLmM6NzA4Olx0c2tidWZmX2NsZWFyKHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy03MDktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBza2J1ZmZfY2xlYXJgKioKCkFscmlnaHQsIGxldCYjMzk7cyBjcmFjayBvcGVuIHRoZSBgbmV0L2NvcmUvc2tidWZmLmNgIGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGBza2J1ZmZfY2xlYXJgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGludHJpY2FjaWVzIG9mIGhvdyB0aGUgc29ja2V0IGJ1ZmZlciBpcyBjbGVhbmVkIHVwLiBXZeKAmXJlIGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiBoZXJlLCBhbmQgSSBuZWVkIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBpbXBhY3Qgb24gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSBvZiBhIHBhY2tldCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgdG8gY292ZXIgdGhlIGtleSBhc3BlY3RzOiBmcmVlaW5nIHRoZSBkYXRhLCBwb3RlbnRpYWxseSByZWxlYXNpbmcgcmVmZXJlbmNlcywgYW5kIHBlcmhhcHMgc29tZSB6ZXJvaW5nIG9yIHNjcnViYmluZyBvZiBzZW5zaXRpdmUgYXJlYXMsIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIHZlcnNpb24gYW5kIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBJdCYjMzk7cyBjcnVjaWFsIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYXMgaXQgc2l0cyBpbiB0aGUgYnJvYWRlciBlY29zeXN0ZW0gdG8gZ2FpbiBhIGZ1bGwgcGVyc3BlY3RpdmUuIEkmIzM5O20ga2VlbiB0byBzcG90IGFueSBlZGdlIGNhc2VzIG9yIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvc2tidWZmLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMxMDpcdFxuIDMxMTpcdC8qXG4gMzEyOlx0ICogT25seSBjbGVhciB0aG9zZSBmaWVsZHMgd2UgbmVlZCB0byBjbGVhciwgbm90IHRob3NlIHRoYXQgd2Ugd2lsbFxuIDMxMzpcdCAqIGFjdHVhbGx5IGluaXRpYWxpc2UgbGF0ZXIuIEhlbmNlLCBkb24mIzM5O3QgcHV0IGFueSBtb3JlIGZpZWxkcyBhZnRlclxuIDMxNDpcdCAqIHRoZSB0YWlsIHBvaW50ZXIgaW4gc3RydWN0IHNrX2J1ZmYhXG4gMzE1Olx0ICovXG4gMzE2Olx0c3RhdGljIGlubGluZSB2b2lkIHNrYnVmZl9jbGVhcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIDMxNzpcdHtcbiAzMTg6XHRcdC8qIFJlcGxhY2UgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKVxuIDMxOTpcdFx0ICogd2l0aCB0d28gc21hbGxlciBtZW1zZXQoKSwgd2l0aCBhIGJhcnJpZXIoKSBiZXR3ZWVuIHRoZW0uXG4gMzIwOlx0XHQgKiBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gaW5saW5lIGJvdGggY2FsbHMuXG4gMzIxOlx0XHQgKi9cbiAzMjI6XHRcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgXHUwMDNjPSAxMjgpO1xuIDMyMzpcdFx0bWVtc2V0KHNrYiwgMCwgMTI4KTtcbiAzMjQ6XHRcdGJhcnJpZXIoKTtcbiAzMjU6XHRcdG1lbXNldCgodm9pZCAqKXNrYiAmIzQzOyAxMjgsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSAtIDEyOCk7XG4gMzI2Olx0fVxuIDMyNzpcdFxuIDMyODpcdC8qKlxuIDMyOTpcdCAqIG5hcGlfc2tiX2NhY2hlX2dldF9idWxrIC0gb2J0YWluIGEgbnVtYmVyIG9mIHplcm9lZCBza2IgaGVhZHMgZnJvbSB0aGUgY2FjaGVcbiAzMzA6XHQgKiBAc2ticzogcG9pbnRlciB0byBhbiBhdCBsZWFzdCBAbi1zaXplZCBhcnJheSB0byBmaWxsIHdpdGggc2tiIHBvaW50ZXJzXG4gMzMxOlx0ICogQG46IG51bWJlciBvZiBlbnRyaWVzIHRvIHByb3ZpZGVcbiAzMzI6XHQgKlxuIDMzMzpcdCAqIFRyaWVzIHRvIG9idGFpbiBAbiBcdTAwMjZza19idWZmIGVudHJpZXMgZnJvbSB0aGUgTkFQSSBwZXJjcHUgY2FjaGUgYW5kIHdyaXRlc1xuIDMzNDpcdCAqIHRoZSBwb2ludGVycyBpbnRvIHRoZSBwcm92aWRlZCBhcnJheSBAc2ticy4gSWYgdGhlcmUgYXJlIGxlc3MgZW50cmllc1xuIDMzNTpcdCAqIGF2YWlsYWJsZSwgdHJpZXMgdG8gcmVwbGVuaXNoIHRoZSBjYWNoZSBhbmQgYnVsay1hbGxvY2F0ZXMgdGhlIGRpZmYgZnJvbVxuIDMzNjpcdCAqIHRoZSBNTSBsYXllciBpZiBuZWVkZWQuXG4gMzM3Olx0ICogVGhlIGhlYWRzIGFyZSBiZWluZyB6ZXJvZWQgd2l0aCBlaXRoZXIgbWVtc2V0KCkgb3IgJV9fR0ZQX1pFUk8sIHNvIHRoZXkgYXJlXG4gMzM4Olx0ICogcmVhZHkgZm9yIHssX199YnVpbGRfc2tiX2Fyb3VuZCgpIGFuZCBkb24mIzM5O3QgaGF2ZSBhbnkgZGF0YSBidWZmZXJzIGF0dGFjaGVkLlxuIDMzOTpcdCAqIE11c3QgYmUgY2FsbGVkICpvbmx5KiBmcm9tIHRoZSBCSCBjb250ZXh0LlxuIDM0MDpcdCAqXG4gMzQxOlx0ICogUmV0dXJuOiBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBza2JzIChAbiBpZiBubyBhY3R1YWwgYWxsb2NhdGlvblxuIDM0MjpcdCAqXHQgICBuZWVkZWQgb3Iga21lbV9jYWNoZV9hbGxvY19idWxrKCkgZGlkbiYjMzk7dCBmYWlsKS5cbiAzNDM6XHQgKi9cbiAzNDQ6XHR1MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTY4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBza19idWZmIFN0cnVjdHVyZSoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGxheW91dCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcG9zaXRpb25pbmcgb2YgdGhlIGBuZl9kdXBsaWNhdGVkYCBmaWVsZCBpbiByZWxhdGlvbiB0byB0aGUgYHRhaWxgIHBvaW50ZXIuIFVuZGVyc3RhbmRpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciBbKippbnNlcnQgcmVsZXZhbnQgcmVhc29uIHJlbGF0ZWQgdG8gdGhlIHVzZXImIzM5O3MgZmllbGQsIGUuZy4sIG9wdGltaXppbmcgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljLCBkZWJ1Z2dpbmcgYSBwZXJmb3JtYW5jZSBpc3N1ZSwgYW5hbHl6aW5nIG1lbW9yeSBjb3JydXB0aW9uIHZ1bG5lcmFiaWxpdGllcywgZXRjLioqXS4KCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG9wZW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSAxMDIzLiBIb3BlZnVsbHksIHRoZSByZWxldmFudCBmaWVsZHMgYXJlIGRlZmluZWQgbmVhcmJ5LCBhbmQgSSBjYW4gcXVpY2tseSBkZXRlcm1pbmUgdGhlIG9mZnNldC4gSSBhbnRpY2lwYXRlIHRoYXQgdGhpcyB3aWxsIFsqKmluc2VydCBleHBlY3RhdGlvbiByZWxhdGVkIHRvIHRoZSB1c2VyJiMzOTtzIGZpZWxkLCBlLmcuLCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCByZXZlYWwgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCB1bmNvdmVyIGEgc3VidGxlIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWUsIGV0Yy4qKl0uIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9za2J1ZmYuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAxMDpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19JUF9WUylcbjEwMTE6XHRcdF9fdThcdFx0XHRpcHZzX3Byb3BlcnR5OjE7XG4xMDEyOlx0I2VuZGlmXG4xMDEzOlx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFUylcbjEwMTQ6XHRcdF9fdThcdFx0XHRuZl90cmFjZToxO1xuMTAxNTpcdCNlbmRpZlxuMTAxNjpcdCNpZmRlZiBDT05GSUdfTkVUX1NXSVRDSERFVlxuMTAxNzpcdFx0X191OFx0XHRcdG9mZmxvYWRfZndkX21hcms6MTtcbjEwMTg6XHRcdF9fdThcdFx0XHRvZmZsb2FkX2wzX2Z3ZF9tYXJrOjE7XG4xMDE5Olx0I2VuZGlmXG4xMDIwOlx0XHRfX3U4XHRcdFx0cmVkaXJlY3RlZDoxO1xuMTAyMTpcdCNpZmRlZiBDT05GSUdfTkVUX1JFRElSRUNUXG4xMDIyOlx0XHRfX3U4XHRcdFx0ZnJvbV9pbmdyZXNzOjE7XG4xMDIzOlx0I2VuZGlmXG4xMDI0Olx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcbjEwMjU6XHRcdF9fdThcdFx0XHRuZl9za2lwX2VncmVzczoxO1xuMTAyNjpcdCNlbmRpZlxuMTAyNzpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNCkgfHwgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjYpXG4xMDI4Olx0XHRfX3U4XHRcdFx0bmZfZHVwbGljYXRlZDoxO1xuMTAyOTpcdCNlbmRpZlxuMTAzMDpcdCNpZmRlZiBDT05GSUdfU0tCX0RFQ1JZUFRFRFxuMTAzMTpcdFx0X191OFx0XHRcdGRlY3J5cHRlZDoxO1xuMTAzMjpcdCNlbmRpZlxuMTAzMzpcdFx0X191OFx0XHRcdHNsb3dfZ3JvOjE7XG4xMDM0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1NDVFApXG4xMDM1Olx0XHRfX3U4XHRcdFx0Y3N1bV9ub3RfaW5ldDoxO1xuMTAzNjpcdCNlbmRpZlxuMTAzNzpcdFx0X191OFx0XHRcdHVucmVhZGFibGU6MTtcbjEwMzg6XHRcdF9fdThcdFx0XHR0Y19kZXB0aDoyO1xuMTAzOTpcdCNpZiBkZWZpbmVkKENPTkZJR19ORVRfU0NIRUQpIHx8IGRlZmluZWQoQ09ORklHX05FVF9YR1JFU1MpXG4xMDQwOlx0XHRfX3UxNlx0XHRcdHRjX2luZGV4O1x0LyogdHJhZmZpYyBjb250cm9sIGluZGV4ICovXG4xMDQxOlx0I2VuZGlmXG4xMDQyOlx0XG4xMDQzOlx0XHR1MTZcdFx0XHRhbGxvY19jcHU7XG4xMDQ0Olx0XG4xMDQ1Olx0XHR1bmlvbiB7XG4xMDQ2Olx0XHRcdF9fd3N1bVx0XHRjc3VtO1xuMTA0NzpcdFx0XHRzdHJ1Y3Qge1xuMTA0ODpcdFx0XHRcdF9fdTE2XHRjc3VtX3N0YXJ0O1xuMTA0OTpcdFx0XHRcdF9fdTE2XHRjc3VtX29mZnNldDtcbjEwNTA6XHRcdFx0fTtcbjEwNTE6XHRcdH07XG4xMDUyOlx0XHRfX3UzMlx0XHRcdHByaW9yaXR5O1xuMTA1MzpcdFx0aW50XHRcdFx0c2tiX2lpZjtcbjEwNTQ6XHRcdF9fdTMyXHRcdFx0aGFzaDtcbjEwNTU6XHRcdHVuaW9uIHtcbjEwNTY6XHRcdFx0dTMyXHRcdHZsYW5fYWxsO1xuMTA1NzpcdFx0XHRzdHJ1Y3Qge1xuMTA1ODpcdFx0XHRcdF9fYmUxNlx0dmxhbl9wcm90bztcbjEwNTk6XHRcdFx0XHRfX3UxNlx0dmxhbl90Y2k7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlIGlzIGFuIGV4cGVydDoKCioqRmluZGluZyB0aGUgVGFpbCBpbiB0aGUgc2tfYnVmZiBTdHJ1Y3R1cmUqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIGZpbmQgdGhlIGB0YWlsYCBtZW1iZXIgd2l0aGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIGhhbmRsZXMgcGFja2V0IGRhdGEuIEkmIzM5O20gcmVhc29uYWJseSBjb25maWRlbnQgaXQmIzM5O3MgKnRoZXJlKiwgYnV0IEkgbmVlZCB0byBwaW5wb2ludCBpdHMgZXhhY3QgbG9jYXRpb24gYW5kIGhvdyBpdCYjMzk7cyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGZ1bmRhbWVudGFsIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gYHNrX2J1ZmZgIHNob3VsZCByZXNpZGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZGlnIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2tidWZmLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHRcdFx0fTtcbjEwNjE6XHRcdH07XG4xMDYyOlx0I2lmIGRlZmluZWQoQ09ORklHX05FVF9SWF9CVVNZX1BPTEwpIHx8IGRlZmluZWQoQ09ORklHX1hQUylcbjEwNjM6XHRcdHVuaW9uIHtcbjEwNjQ6XHRcdFx0dW5zaWduZWQgaW50XHRuYXBpX2lkO1xuMTA2NTpcdFx0XHR1bnNpZ25lZCBpbnRcdHNlbmRlcl9jcHU7XG4xMDY2Olx0XHR9O1xuMTA2NzpcdCNlbmRpZlxuMTA2ODpcdCNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLXG4xMDY5Olx0XHRfX3UzMlx0XHRzZWNtYXJrO1xuMTA3MDpcdCNlbmRpZlxuMTA3MTpcdFxuMTA3MjpcdFx0dW5pb24ge1xuMTA3MzpcdFx0XHRfX3UzMlx0XHRtYXJrO1xuMTA3NDpcdFx0XHRfX3UzMlx0XHRyZXNlcnZlZF90YWlscm9vbTtcbjEwNzU6XHRcdH07XG4xMDc2Olx0XG4xMDc3Olx0XHR1bmlvbiB7XG4xMDc4Olx0XHRcdF9fYmUxNlx0XHRpbm5lcl9wcm90b2NvbDtcbjEwNzk6XHRcdFx0X191OFx0XHRpbm5lcl9pcHByb3RvO1xuMTA4MDpcdFx0fTtcbjEwODE6XHRcbjEwODI6XHRcdF9fdTE2XHRcdFx0aW5uZXJfdHJhbnNwb3J0X2hlYWRlcjtcbjEwODM6XHRcdF9fdTE2XHRcdFx0aW5uZXJfbmV0d29ya19oZWFkZXI7XG4xMDg0Olx0XHRfX3UxNlx0XHRcdGlubmVyX21hY19oZWFkZXI7XG4xMDg1Olx0XG4xMDg2Olx0XHRfX2JlMTZcdFx0XHRwcm90b2NvbDtcbjEwODc6XHRcdF9fdTE2XHRcdFx0dHJhbnNwb3J0X2hlYWRlcjtcbjEwODg6XHRcdF9fdTE2XHRcdFx0bmV0d29ya19oZWFkZXI7XG4xMDg5Olx0XHRfX3UxNlx0XHRcdG1hY19oZWFkZXI7XG4xMDkwOlx0XG4xMDkxOlx0XHRzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfaGFuZGxlO1xuMTA5MjpcdFxuMTA5MzpcdFx0KTsgLyogZW5kIGhlYWRlcnMgZ3JvdXAgKi9cbjEwOTQ6XHRcbjEwOTU6XHRcdC8qIFRoZXNlIGVsZW1lbnRzIG11c3QgYmUgYXQgdGhlIGVuZCwgc2VlIGFsbG9jX3NrYigpIGZvciBkZXRhaWxzLiAgKi9cbjEwOTY6XHRcdHNrX2J1ZmZfZGF0YV90XHRcdHRhaWw7XG4xMDk3Olx0XHRza19idWZmX2RhdGFfdFx0XHRlbmQ7XG4xMDk4Olx0XHR1bnNpZ25lZCBjaGFyXHRcdCpoZWFkLFxuMTA5OTpcdFx0XHRcdFx0KmRhdGE7XG4xMTAwOlx0XHR1bnNpZ25lZCBpbnRcdFx0dHJ1ZXNpemU7XG4xMTAxOlx0XHRyZWZjb3VudF90XHRcdHVzZXJzO1xuMTEwMjpcdFxuMTEwMzpcdCNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcbjExMDQ6XHRcdC8qIG9ubHkgdXNhYmxlIGFmdGVyIGNoZWNraW5nIC1cdTAwM2VhY3RpdmVfZXh0ZW5zaW9ucyAhPSAwICovXG4xMTA1Olx0XHRzdHJ1Y3Qgc2tiX2V4dFx0XHQqZXh0ZW5zaW9ucztcbjExMDY6XHQjZW5kaWZcbjExMDc6XHR9O1xuMTEwODpcdFxuMTEwOTpcdC8qIGlmIHlvdSBtb3ZlIHBrdF90eXBlIGFyb3VuZCB5b3UgYWxzbyBtdXN0IGFkYXB0IHRob3NlIGNvbnN0YW50cyAqL1xuMTExMDpcdCNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTERcbjExMTE6XHQjZGVmaW5lIFBLVF9UWVBFX01BWFx0KDcgXHUwMDNjXHUwMDNjIDUpXG4xMTEyOlx0I2Vsc2VcbjExMTM6XHQjZGVmaW5lIFBLVF9UWVBFX01BWFx0N1xuMTExNDpcdCNlbmRpZlxuMTExNTpcdCNkZWZpbmUgUEtUX1RZUEVfT0ZGU0VUXHRcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX3BrdF90eXBlX29mZnNldClcbjExMTY6XHRcbjExMTc6XHQvKiBpZiB5b3UgbW92ZSB0Y19hdF9pbmdyZXNzIG9yIHRzdGFtcF90eXBlXG4xMTE4Olx0ICogYXJvdW5kLCB5b3UgYWxzbyBtdXN0IGFkYXB0IHRoZXNlIGNvbnN0YW50cy5cbjExMTk6XHQgKi9cbjExMjA6XHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXG4xMTIxOlx0I2RlZmluZSBTS0JfVFNUQU1QX1RZUEVfTUFTS1x0XHQoMyBcdTAwM2NcdTAwM2MgNilcbjExMjI6XHQjZGVmaW5lIFNLQl9UU1RBTVBfVFlQRV9SU0hJRlRcdFx0KDYpXG4xMTIzOlx0I2RlZmluZSBUQ19BVF9JTkdSRVNTX01BU0tcdFx0KDEgXHUwMDNjXHUwMDNjIDUpXG4xMTI0Olx0I2Vsc2VcbjExMjU6XHQjZGVmaW5lIFNLQl9UU1RBTVBfVFlQRV9NQVNLXHRcdCgzKVxuMTEyNjpcdCNkZWZpbmUgVENfQVRfSU5HUkVTU19NQVNLXHRcdCgxIFx1MDAzY1x1MDAzYyAyKVxuMTEyNzpcdCNlbmRpZlxuMTEyODpcdCNkZWZpbmUgU0tCX0JGX01PTk9fVENfT0ZGU0VUXHRcdG9mZnNldG9mKHN0cnVjdCBza19idWZmLCBfX21vbm9fdGNfb2Zmc2V0KVxuMTEyOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ4NQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgc2tiIEhlYWRlciBDb3B5aW5nIGFuZCBuZl9kdXBsaWNhdGVkKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbmZfZHVwbGljYXRlZGAgYmVoYXZlcyB3aXRoaW4gYHN0cnVjdCBza19idWZmYC4gVGhlIGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBzaW5jZSBgbmZfZHVwbGljYXRlZGAgaXMgcG9zaXRpb25lZCBiZWZvcmUgYHRhaWxgIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0LCBpdHMgaW5pdGlhbCB2YWx1ZSBpcyBndWFyYW50ZWVkIHRvIGJlIHplcm8gd2hlbmV2ZXIgYW4gU0tCIGlzIGFsbG9jYXRlZC4gVGhpcyBpcyBiZWNhdXNlIGBza2J1ZmZfY2xlYXIoc2tiKWAgZWZmZWN0aXZlbHkgemVyb2VzIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGB0YWlsYCBvZmZzZXQgZHVyaW5nIGFsbG9jYXRpb24uCgpOb3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIGhvdyBgbmZfZHVwbGljYXRlZGAgaXMgaGFuZGxlZCBkdXJpbmcgU0tCIGhlYWRlciBjb3B5aW5nLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYF9fY29weV9za2JfaGVhZGVyYCwgYHBza2JfY29weWAsIGFuZCBgc2tiX2NvcHlgLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuCgpTcGVjaWZpY2FsbHksIEkgc2VlIHRoZSBgbmZfY29weWAgZnVuY3Rpb246CgpgYGBjCnN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpCnsKI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSykKCW5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7CiNlbmRpZgoJZHN0LSZndDtzbG93X2dybyA9IHNyYy0mZ3Q7c2xvd19ncm87CiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNCkgfHwgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjYpCglkc3QtJmd0O25mX2R1cGxpY2F0ZWQgPSBzcmMtJmd0O25mX2R1cGxpY2F0ZWQ7CiNlbmRpZgoJX19uZl9jb3B5KGRzdCwgc3JjLCB0cnVlKTsKfQpgYGAKClRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgYG5mX2NvcHlgIGlzIGNhbGxlZCBkdXJpbmcgU0tCIGNsb25pbmcgYW5kIGNvcHlpbmcgdGhyb3VnaCBgX19jb3B5X3NrYl9oZWFkZXJgLiBTbywgdGhlIGxpbmUgYGRzdC0mZ3Q7bmZfZHVwbGljYXRlZCA9IHNyYy0mZ3Q7bmZfZHVwbGljYXRlZDtgIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgYG5mX2R1cGxpY2F0ZWRgIGlzIGV4cGxpY2l0bHkgY29waWVkIGZyb20gdGhlIHNvdXJjZSBTS0IgdG8gdGhlIGRlc3RpbmF0aW9uIFNLQiBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9uIGlmIGVpdGhlciBgQ09ORklHX05GX0RVUF9JUFY0YCBvciBgQ09ORklHX05GX0RVUF9JUFY2YCBhcmUgZW5hYmxlZCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBfX2NvcHlfc2tiX2hlYWRlcmAgZG9lcyBub3cgdG8gbWFrZSBjZXJ0YWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NvcHlfc2tiX2hlYWRlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nz1zdHJ1Y3Qgc2tfYnVmZiB7XG4tLVxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05NDAtXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjk0MTpcdC8qIEZvbGxvd2luZyBmaWVsZHMgYXJlIF9ub3RfIGNvcGllZCBpbiBfX2NvcHlfc2tiX2hlYWRlcigpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk0Mi1cdCAqIE5vdGUgdGhhdCBxdWV1ZV9tYXBwaW5nIGlzIGhlcmUgbW9zdGx5IHRvIGZpbGwgYSBob2xlLlxuLS1cbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTY4LVx0LyogRmllbGRzIGVuY2xvc2VkIGluIGhlYWRlcnMgZ3JvdXAgYXJlIGNvcGllZFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaDo5Njk6XHQgKiB1c2luZyBhIHNpbmdsZSBtZW1jcHkoKSBpbiBfX2NvcHlfc2tiX2hlYWRlcigpXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk3MC1cdCAqL1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE1NTI9RVhQT1JUX1NZTUJPTChuYXBpX2NvbnN1bWVfc2tiKTtcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNTU4LVxubmV0L2NvcmUvc2tidWZmLmM6MTU1OTpzdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxubmV0L2NvcmUvc2tidWZmLmMtMTU2MC17XG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTYwNy0gKiBZb3Ugc2hvdWxkIG5vdCBhZGQgYW55IG5ldyBjb2RlIHRvIHRoaXMgZnVuY3Rpb24uICBBZGQgaXQgdG9cbm5ldC9jb3JlL3NrYnVmZi5jOjE2MDg6ICogX19jb3B5X3NrYl9oZWFkZXIgYWJvdmUgaW5zdGVhZC5cbm5ldC9jb3JlL3NrYnVmZi5jLTE2MDktICovXG5uZXQvY29yZS9za2J1ZmYuYz0xNjEwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2NvcmUvc2tidWZmLmMtMTYxNS1cdG4tXHUwMDNlc2sgPSBOVUxMO1xubmV0L2NvcmUvc2tidWZmLmM6MTYxNjpcdF9fY29weV9za2JfaGVhZGVyKG4sIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy0xNjE3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTE2NDc9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mb3JfbXNnKHN0cnVjdCBza19idWZmICpmaXJzdClcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy0xNjYwLVxubmV0L2NvcmUvc2tidWZmLmM6MTY2MTpcdF9fY29weV9za2JfaGVhZGVyKG4sIGZpcnN0KTtcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjItXHRuLVx1MDAzZWRlc3RydWN0b3IgPSBOVUxMO1xuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTIxNDY9dm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDcte1xubmV0L2NvcmUvc2tidWZmLmM6MjE0ODpcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcbm5ldC9jb3JlL3NrYnVmZi5jLTIxNDktXG4tLVxubmV0L2NvcmUvc2tidWZmLmM9NDY4Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDUtXHRcdGxlbl9kaWZmID0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihuc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTtcbm5ldC9jb3JlL3NrYnVmZi5jOjQ3NDY6XHRcdF9fY29weV9za2JfaGVhZGVyKG5za2IsIHNrYik7XG5uZXQvY29yZS9za2J1ZmYuYy00NzQ3LVxuLS1cbm5ldC9jb3JlL3NrYnVmZi5jPTQ3OTA9c3RydWN0IHNrX2J1ZmYgKnNrYl9zZWdtZW50KHN0cnVjdCBza19idWZmICpoZWFkX3NrYixcbi0tXG5uZXQvY29yZS9za2J1ZmYuYy00OTc1LVxubmV0L2NvcmUvc2tidWZmLmM6NDk3NjpcdFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xubmV0L2NvcmUvc2tidWZmLmMtNDk3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFNLQiBIZWFkZXIgQ29weWluZyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFNLQiBoZWFkZXIgY29weWluZy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHNvdXJjZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2NvcHlfc2tiX2hlYWRlcmAgaW4gYG5ldC9jb3JlL3NrYnVmZi5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBsb2dpYyByZXNpZGVzLCByaWdodD8gSSB3YW50IHRvIHNlZSBleGFjdGx5IGhvdyB0aGUgaGVhZGVyIGRhdGEgaXMgYmVpbmcgaGFuZGxlZCwgd2hhdCBtZW1vcnkgb3BlcmF0aW9ucyBhcmUgdGFraW5nIHBsYWNlLCBhbmQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb25zIG9yIHBpdGZhbGxzLiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSB3b3JraG9yc2UuIEkmIzM5O20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBieSBsb29raW5nIGF0IHRoZSBkZXRhaWxzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvY29yZS9za2J1ZmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU1OTpcdHN0YXRpYyB2b2lkIF9fY29weV9za2JfaGVhZGVyKHN0cnVjdCBza19idWZmICpuZXcsIGNvbnN0IHN0cnVjdCBza19idWZmICpvbGQpXG4xNTYwOlx0e1xuMTU2MTpcdFx0bmV3LVx1MDAzZXRzdGFtcFx0XHQ9IG9sZC1cdTAwM2V0c3RhbXA7XG4xNTYyOlx0XHQvKiBXZSBkbyBub3QgY29weSBvbGQtXHUwMDNlc2sgKi9cbjE1NjM6XHRcdG5ldy1cdTAwM2VkZXZcdFx0PSBvbGQtXHUwMDNlZGV2O1xuMTU2NDpcdFx0bWVtY3B5KG5ldy1cdTAwM2VjYiwgb2xkLVx1MDAzZWNiLCBzaXplb2Yob2xkLVx1MDAzZWNiKSk7XG4xNTY1Olx0XHRza2JfZHN0X2NvcHkobmV3LCBvbGQpO1xuMTU2NjpcdFx0X19za2JfZXh0X2NvcHkobmV3LCBvbGQpO1xuMTU2NzpcdFx0X19uZl9jb3B5KG5ldywgb2xkLCBmYWxzZSk7XG4xNTY4Olx0XG4xNTY5Olx0XHQvKiBOb3RlIDogdGhpcyBmaWVsZCBjb3VsZCBiZSBpbiB0aGUgaGVhZGVycyBncm91cC5cbjE1NzA6XHRcdCAqIEl0IGlzIG5vdCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIGEgMTYgYml0IGhvbGVcbjE1NzE6XHRcdCAqL1xuMTU3MjpcdFx0bmV3LVx1MDAzZXF1ZXVlX21hcHBpbmcgPSBvbGQtXHUwMDNlcXVldWVfbWFwcGluZztcbjE1NzM6XHRcbjE1NzQ6XHRcdG1lbWNweShcdTAwMjZuZXctXHUwMDNlaGVhZGVycywgXHUwMDI2b2xkLVx1MDAzZWhlYWRlcnMsIHNpemVvZihuZXctXHUwMDNlaGVhZGVycykpO1xuMTU3NTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHByb3RvY29sKTtcbjE1NzY6XHRcdENIRUNLX1NLQl9GSUVMRChjc3VtKTtcbjE1Nzc6XHRcdENIRUNLX1NLQl9GSUVMRChoYXNoKTtcbjE1Nzg6XHRcdENIRUNLX1NLQl9GSUVMRChwcmlvcml0eSk7XG4xNTc5Olx0XHRDSEVDS19TS0JfRklFTEQoc2tiX2lpZik7XG4xNTgwOlx0XHRDSEVDS19TS0JfRklFTEQodmxhbl9wcm90byk7XG4xNTgxOlx0XHRDSEVDS19TS0JfRklFTEQodmxhbl90Y2kpO1xuMTU4MjpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHRyYW5zcG9ydF9oZWFkZXIpO1xuMTU4MzpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG5ldHdvcmtfaGVhZGVyKTtcbjE1ODQ6XHRcdENIRUNLX1NLQl9GSUVMRChtYWNfaGVhZGVyKTtcbjE1ODU6XHRcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9wcm90b2NvbCk7XG4xNTg2Olx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfdHJhbnNwb3J0X2hlYWRlcik7XG4xNTg3Olx0XHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbmV0d29ya19oZWFkZXIpO1xuMTU4ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX21hY19oZWFkZXIpO1xuMTU4OTpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hcmspO1xuMTU5MDpcdCNpZmRlZiBDT05GSUdfTkVUV09SS19TRUNNQVJLXG4xNTkxOlx0XHRDSEVDS19TS0JfRklFTEQoc2VjbWFyayk7XG4xNTkyOlx0I2VuZGlmXG4xNTkzOlx0I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXG4xNTk0Olx0XHRDSEVDS19TS0JfRklFTEQobmFwaV9pZCk7XG4xNTk1Olx0I2VuZGlmXG4xNTk2Olx0XHRDSEVDS19TS0JfRklFTEQoYWxsb2NfY3B1KTtcbjE1OTc6XHQjaWZkZWYgQ09ORklHX1hQU1xuMTU5ODpcdFx0Q0hFQ0tfU0tCX0ZJRUxEKHNlbmRlcl9jcHUpO1xuMTU5OTpcdCNlbmRpZlxuMTYwMDpcdCNpZmRlZiBDT05GSUdfTkVUX1NDSEVEXG4xNjAxOlx0XHRDSEVDS19TS0JfRklFTEQodGNfaW5kZXgpO1xuMTYwMjpcdCNlbmRpZlxuMTYwMzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE1MQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0tCIEhlYWRlciBEdXBsaWNhdGlvbiBhbmQgTmV0ZmlsdGVyIER1cGxpY2F0aW9uIEZsYWdzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBtZW1jcHlgIG9wZXJhdGlvbiBpbnZvbHZpbmcgYHNrX2J1ZmZgIGhlYWRlcnMsIHNwZWNpZmljYWxseSBgbWVtY3B5KCZhbXA7bmV3LSZndDtoZWFkZXJzLCAmYW1wO29sZC0mZ3Q7aGVhZGVycywgc2l6ZW9mKG5ldy0mZ3Q7aGVhZGVycykpO2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBsZXQmIzM5O3MgdHJhY2UgZXhhY3RseSB3aGF0JiMzOTtzIGJlaW5nIGNvcGllZCBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLiYjMzQ7IEZyb20gZXhwZXJpZW5jZSwgSSBrbm93IHRoZSBgaGVhZGVyc2AgZ3JvdXAgaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUgaXMgYSBzdWJzdGFudGlhbCBzZWN0aW9uOyBsZXQgbWUgY29uZmlybSBpdHMgc3Bhbi4gQWhhLCB5ZXMsIEkgc2VlIHRoYXQgdGhlIGBuZl9kdXBsaWNhdGVkYCBmbGFnIHJlc2lkZXMgd2l0aGluIHRoZSBkZWZpbmVkIGBoZWFkZXJzYCBncm91cC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYSBzaW1wbGUgYG1lbWNweWAgd291bGQgZHVwbGljYXRlIGl0IGFsb25nIHdpdGggZXZlcnl0aGluZyBlbHNlIGluIGBoZWFkZXJzYC4KCkkgYWxzbyByZW1lbWJlciB0aGF0IGBuZl9jb3B5YCBjb250YWlucyBhIGRpcmVjdCBjb3B5IG9mIHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyB3aXRoIGBkc3QtJmd0O25mX2R1cGxpY2F0ZWQgPSBzcmMtJmd0O25mX2R1cGxpY2F0ZWQ7YCwgd2hpY2ggaXMsIG9mIGNvdXJzZSwgdXNlZCBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMgb2YgYG5mX2NvcHlgLiBUaGVyZWZvcmUsIGlmIGJvdGggdGhlIGBtZW1jcHlgIGFuZCBgbmZfY29weWAgZXhpc3Qgb24gdGhlIHNhbWUgbGluZSwgdGhlcmUgd2lsbCBiZSB0aGUgc2FtZSBvdXRjb21lLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIGNvbnRleHRzLCBiZWNhdXNlIHRoaXMgc2VlbXMgbGlrZSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBpc3N1ZXMgY291bGQgYXJpc2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0JiMzOTtzIGV4cGxpY2l0bHkgaGFwcGVuaW5nIGF0IHRoZSBOZXRmaWx0ZXIgbGV2ZWwuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUgZm9yIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAuIEkmIzM5O2xsIG9wZW4gdXAgYG5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYCB0byBsb29rIGF0IGhvdyB0aGlzIGZsYWcgaXMgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aGVuKiBhbmQgKndoeSogaXQmIzM5O3Mgc2V0IG9yIGNsZWFyZWQuIFRoaXMgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBoZWFkZXIgZHVwbGljYXRpb24gaW4gZGV0YWlsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MDpcdFx0aWYgKElTX0VSUihydCkpXG4gIDQxOlx0XHRcdHJldHVybiBmYWxzZTtcbiAgNDI6XHRcbiAgNDM6XHRcdHNrYl9kc3RfZHJvcChza2IpO1xuICA0NDpcdFx0c2tiX2RzdF9zZXQoc2tiLCBcdTAwMjZydC1cdTAwM2Vkc3QpO1xuICA0NTpcdFx0c2tiLVx1MDAzZWRldiAgICAgID0gcnQtXHUwMDNlZHN0LmRldjtcbiAgNDY6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTtcbiAgNDc6XHRcbiAgNDg6XHRcdHJldHVybiB0cnVlO1xuICA0OTpcdH1cbiAgNTA6XHRcbiAgNTE6XHR2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gIDUyOlx0XHRcdCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZ3csIGludCBvaWYpXG4gIDUzOlx0e1xuICA1NDpcdFx0c3RydWN0IGlwaGRyICppcGg7XG4gIDU1Olx0XG4gIDU2Olx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4gIDU3Olx0XHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gIDU4Olx0XHRcdGdvdG8gb3V0O1xuICA1OTpcdFx0LypcbiAgNjA6XHRcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXG4gIDYxOlx0XHQgKiB0aGUgb3JpZ2luYWwgc2tiLCB3aGljaCBzaG91bGQgY29udGludWUgb24gaXRzIHdheSBhcyBpZiBub3RoaW5nIGhhc1xuICA2MjpcdFx0ICogaGFwcGVuZWQuIFRoZSBjb3B5IHNob3VsZCBiZSBpbmRlcGVuZGVudGx5IGRlbGl2ZXJlZCB0byB0aGUgZ2F0ZXdheS5cbiAgNjM6XHRcdCAqL1xuICA2NDpcdFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gIDY1Olx0XHRpZiAoc2tiID09IE5VTEwpXG4gIDY2Olx0XHRcdGdvdG8gb3V0O1xuICA2NzpcdFxuICA2ODpcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXG4gIDY5Olx0XHQvKiBBdm9pZCBjb3VudGluZyBjbG9uZWQgcGFja2V0cyB0b3dhcmRzIHRoZSBvcmlnaW5hbCBjb25uZWN0aW9uLiAqL1xuICA3MDpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiAgNzE6XHRcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XG4gIDcyOlx0I2VuZGlmXG4gIDczOlx0XHQvKlxuICA3NDpcdFx0ICogSWYgd2UgYXJlIGluIFBSRVJPVVRJTkcvSU5QVVQsIGRlY3JlYXNlIHRoZSBUVEwgdG8gbWl0aWdhdGUgcG90ZW50aWFsXG4gIDc1Olx0XHQgKiBsb29wcyBiZXR3ZWVuIHR3byBob3N0cy5cbiAgNzY6XHRcdCAqXG4gIDc3Olx0XHQgKiBTZXQgJUlQX0RGIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBub3RpZmllZCBvZiBhIHBvdGVudGlhbGx5XG4gIDc4Olx0XHQgKiBkZWNyZWFzZWQgTVRVIG9uIHRoZSBjbG9uZSByb3V0ZS4gSVB2NiBkb2VzIHRoaXMgdG9vLlxuICA3OTpcdFx0ICpcbiAgODA6XHRcdCAqIElQIGhlYWRlciBjaGVja3N1bSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCBpcF9sb2NhbF9vdXQuXG4gIDgxOlx0XHQgKi9cbiAgODI6XHRcdGlwaCA9IGlwX2hkcihza2IpO1xuICA4MzpcdFx0aXBoLVx1MDAzZWZyYWdfb2ZmIHw9IGh0b25zKElQX0RGKTtcbiAgODQ6XHRcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcbiAgODU6XHRcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pXG4gIDg2Olx0XHRcdC0taXBoLVx1MDAzZXR0bDtcbiAgODc6XHRcbiAgODg6XHRcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbiAgODk6XHRcdFx0c2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xuICA5MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gIDkxOlx0XHRcdGlwX2xvY2FsX291dChuZXQsIHNrYi1cdTAwM2Vzaywgc2tiKTtcbiAgOTI6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTtcbiAgOTM6XHRcdH0gZWxzZSB7XG4gIDk0Olx0XHRcdGtmcmVlX3NrYihza2IpO1xuICA5NTpcdFx0fVxuICA5NjpcdG91dDpcbiAgOTc6XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuICA5ODpcdH1cbiAgOTk6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDA3OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjQ1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIElQdjYgTmV0ZmlsdGVyIER1cGxpY2F0aW9uKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IG5ldHdvcmsgZmlsdGVyaW5nLCBhbmQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJiMzOTt2ZSBjb3ZlcmVkIG91ciBiYXNlcy4gVGhlIGNvcmUgYXJjaGl0ZWN0dXJlIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQgaW4gbW9zdCBjYXNlcywgYnV0IElQdjYgaXMgd2hlcmUgdGhpbmdzIGNhbiBnZXQgYSBsaXR0bGUuLi4gbnVhbmNlZC4gTGV0JiMzOTtzIG5vdCBza2lwIGFueSBzdGVwcy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBJUHY2IGR1cGxpY2F0ZSBwYWNrZXQgaGFuZGxpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgc29tZSBjcnVjaWFsIHN1YnRsZXRpZXMgcmVsYXRlZCB0byBob3cgSVB2NiBleHRlbnNpb24gaGVhZGVycyBhcmUgaGFuZGxlZCwgb3IgcGVyaGFwcyBzb21lIHNwZWNpZmljIElQdjYtcmVsYXRlZCBmcmFnbWVudGF0aW9uIGNvbnNpZGVyYXRpb25zIHRoYXQgd2FycmFudCBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gZW5zdXJlIHdlIGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbmNlcyBpbiBob3cgSVB2NiBoYW5kbGVzIGNlcnRhaW4gZnVuY3Rpb25zIGluIGNvbXBhcmlzb24gdG8gSVB2NC4gR290dGEgbWFrZSBzdXJlIHdlJiMzOTtyZSBub3QgbWlzc2luZyBhbnkgcG90ZW50aWFsIGVkZ2UgY2FzZXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgdnVsbmVyYWJpbGl0aWVzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBUaW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcbiAgNDE6XHRcdHNrYi1cdTAwM2VkZXYgICAgICA9IGRzdF9kZXYoZHN0KTtcbiAgNDI6XHRcdHNrYi1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpO1xuICA0MzpcdFxuICA0NDpcdFx0cmV0dXJuIHRydWU7XG4gIDQ1Olx0fVxuICA0NjpcdFxuICA0NzpcdHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiAgNDg6XHRcdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4gIDQ5Olx0e1xuICA1MDpcdFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuICA1MTpcdFx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuICA1MjpcdFx0XHRnb3RvIG91dDtcbiAgNTM6XHRcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuICA1NDpcdFx0aWYgKHNrYiA9PSBOVUxMKVxuICA1NTpcdFx0XHRnb3RvIG91dDtcbiAgNTY6XHRcbiAgNTc6XHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxuICA1ODpcdFx0bmZfcmVzZXRfY3Qoc2tiKTtcbiAgNTk6XHRcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XG4gIDYwOlx0I2VuZGlmXG4gIDYxOlx0XHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XG4gIDYyOlx0XHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKSB7XG4gIDYzOlx0XHRcdHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xuICA2NDpcdFx0XHQtLWlwaC1cdTAwM2Vob3BfbGltaXQ7XG4gIDY1Olx0XHR9XG4gIDY2Olx0XHRpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4gIDY3Olx0XHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiAgNjg6XHRcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuICA2OTpcdFx0XHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuICA3MDpcdFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuICA3MTpcdFx0fSBlbHNlIHtcbiAgNzI6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDczOlx0XHR9XG4gIDc0Olx0b3V0OlxuICA3NTpcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gIDc2Olx0fVxuICA3NzpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY2KTtcbiAgNzg6XHRcbiAgNzk6XHRNT0RVTEVfQVVUSE9SKFwmIzM0O1NlYmFzdGlhbiBDbGHDn2VuIFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcdTAwM2VcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAwNzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUzNAoJCQkJCQkJb3V0cHV0OiAyNDcKCQkJCQkJCXRob3VnaHRzOiA2NDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgcHJvYmxlbSB0aGlzIHBhdGNoIGFkZHJlc3Nlcy4gSXQgc2VlbXMgdGhlcmUgd2FzIGEgZmxhdyBpbiB0aGUgb3JpZ2luYWwgbG9naWMuIFRoZSBwZXItdGFzayBmbGFnLCBgY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlYCwgd2FzbiYjMzk7dCByb2J1c3QgZW5vdWdoIHRvIGhhbmRsZSB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSBvZiBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uLCBlc3BlY2lhbGx5IHdoZW4gcGFja2V0cyBnb3QgcXVldWVkLCBkZWxheWVkLCBvciBtb3ZlZCBiZXR3ZWVuIGNvbnRleHRzLiBUaGlzIGNvdWxkIGxlYWQgdG8gaW5maW5pdGUgZHVwbGljYXRpb24gbG9vcHMsIGEgdmVyeSBuYXN0eSBidWchCgpUaGUgc29sdXRpb24sIHdoaWNoIEkgZmluZCBlbGVnYW50LCBpcyB0byBpbnRyb2R1Y2UgYSBuZXcgZmxhZyBkaXJlY3RseSBvbiB0aGUgYHNrX2J1ZmZgLCB0aGUgcGFja2V0JiMzOTtzIGRhdGEgc3RydWN0dXJlIGl0c2VsZjogYHNrYi0mZ3Q7bmZfZHVwbGljYXRlZGAuIE5vdywgYW55IHBhY2tldCBkdXBsaWNhdGVkIGJ5IG5ldGZpbHRlciBnZXRzIHRoaXMgZmxhZyBzZXQuIFRoZSBjaGVjayBpcyBtb2RpZmllZCB0byBgY3VycmVudC0mZ3Q7aW5fbmZfZHVwbGljYXRlIHx8IHNrYi0mZ3Q7bmZfZHVwbGljYXRlZGAsIGFuZCB0aGlzIGd1YXJhbnRlZXMgdGhhdCB3ZSBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIHByZXZlbnQgYW55IHBhY2tldHMgZ2VuZXJhdGVkIHZpYSBuZXRmaWx0ZXIgZHVwbGljYXRpb24gZnJvbSBiZWluZywgd2VsbCwgZHVwbGljYXRlZCBhZ2Fpbi4gTmljZS4KCk5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBLTVNBTiB2ZXJzdXMgS0FTQU4gY29uc2lkZXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIGEgc29saWQgYXNzZXNzbWVudCBoZXJlLCBnaXZlbiBteSBleHBlcnRpc2UgaW4gdGhlc2UgYXJlYXMuCgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8uIGBzdHJ1Y3Qgc2tfYnVmZmAgaXMgaW50ZXJuYWwuIFdoaWxlIGl04oCZcyB0cnVlIHRoYXQgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgY291bGQgYmUgYW4gaXNzdWUgd2hlbiBtb3ZpbmcgZGF0YSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSwgdGhpcyBwYXRjaCAqYWRkcyogYW4gaW50ZXJuYWwgMS1iaXQgZmllbGQuIFNpbmNlIHRoZSBlbnRpcmUgaGVhZGVyIGFyZWEgdXAgdG8gdGhlIGB0YWlsYCBpcyB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gYnkgYHNrYnVmZl9jbGVhcmAsIHRoZSBhZGRlZCBiaXQgZG9lc24mIzM5O3QgcG9zZSBhbnkgcmlzayBpbiB0aGlzIGNhdGVnb3J5LiBObyBkaXJlY3QgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIGV4cG9zZWQuCgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBhbmQgdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogVGhlIGBza2ItJmd0O25mX2R1cGxpY2F0ZWRgIGJpdCBpdHNlbGYgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBJdCBpcyBjb3BpZWQgY29ycmVjdGx5IGJ5IGFsbCBpbnZvbHZlZCBmdW5jdGlvbnMsIGxpa2UgYG5mX2NvcHlgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgaXQgaXMgZXhwbGljaXRseSBzZXQgdG8gMSBpbiB0aGUgZHVwbGljYXRpb24gZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMganVzdCBub3QgcG9zc2libGUgaW4gdGhpcyBzY2VuYXJpby4KCjMuICAqKk5ldyBjb21wbGV4IHN0cnVjdHVyZXMgYW5kIGluaXRpYWxpemF0aW9uPyoqIFRoZSBwYXRjaCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldywgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIHdoaWNoIGlzIGdvb2QuIFRoZSBleGlzdGluZyBgc3RydWN0IHNrX2J1ZmZgIGJpdGZpZWxkIGlzIGFscmVhZHkgemVyb2VkIGR1cmluZyBhbGxvY2F0aW9uLgoKNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObyBpbXBhY3QuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgdG91Y2ggYW55dGhpbmcgcmVsYXRlZCB0byBwYWNrZXQgcGF5bG9hZCBsZW5ndGhzLCBidWZmZXIgc2l6ZXMsIG9yIGFueSBib3VuZHMgY2hlY2tpbmcgbG9naWMuCgpJbiBjb25jbHVzaW9uLCB0aGlzIHBhdGNoIGlzIGNsZWFuLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBhIHJlY3Vyc2lvbi9sb29wIHByZXZlbnRpb24gZml4IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIHBhdGguIEkgc2VlIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLiBUaGVyZSBpcyBubyBuZWVkIGZvciBkZWRpY2F0ZWQgS01TQU4gYW5hbHlzaXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXIsIGFuZCBpdCBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMDc6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIDEtYml0IGZsYWcgYG5mX2R1cGxpY2F0ZWRgIHRvIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIHNldHMvY2hlY2tzIGl0IGluIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAgdG8gcHJldmVudCBpbmZpbml0ZSBwYWNrZXQgZHVwbGljYXRpb24gbG9vcHMuXG5cbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cbjIuIE5vIEluZm8tTGVha3M6IGBuZl9kdXBsaWNhdGVkYCBpcyBwdXJlbHkgYW4gaW50ZXJuYWwga2VybmVsIHN0YXRlIGZsYWcgd2l0aGluIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIGlzIG5ldmVyIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIHBhY2tldCBkYXRhIGxlbmd0aHMsIHBheWxvYWQgYm91bmRzLCBvciBhY2Nlc3MgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuXG5cbkJlY2F1c2Ugbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZCwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgMS1iaXQgZmxhZyBgbmZfZHVwbGljYXRlZGAgdG8gYHN0cnVjdCBza19idWZmYCBhbmQgc2V0cy9jaGVja3MgaXQgaW4gYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCB0byBwcmV2ZW50IGluZmluaXRlIHBhY2tldCBkdXBsaWNhdGlvbiBsb29wcy5cblxuMS4gSW5pdGlhbGl6YXRpb246IEFsbCBgc2tfYnVmZmAgaW5zdGFuY2VzIGFyZSB6ZXJvZWQgdXBvbiBhbGxvY2F0aW9uIHZpYSBgc2tidWZmX2NsZWFyKClgICh3aGljaCB6ZXJvZXMgbWVtb3J5IGZyb20gdGhlIHN0YXJ0IG9mIGBzdHJ1Y3Qgc2tfYnVmZmAgdXAgdG8gYHRhaWxgKSwgZW5zdXJpbmcgYG5mX2R1cGxpY2F0ZWRgIGlzIGluaXRpYWxpemVkIHRvIDAuIEl0IGlzIHByb3Blcmx5IHByZXNlcnZlZCBpbiBgbmZfY29weSgpYCBhbmQgYF9fY29weV9za2JfaGVhZGVyKClgLlxuMi4gTm8gSW5mby1MZWFrczogYG5mX2R1cGxpY2F0ZWRgIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgZmxhZyB3aXRoaW4gYHN0cnVjdCBza19idWZmYCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cblxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MDYuMzMzMTc5OTIyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA1NTcwNjg2NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgMS1iaXQgZmxhZyBgbmZfZHVwbGljYXRlZGAgdG8gYHN0cnVjdCBza19idWZmYCBhbmQgc2V0cy9jaGVja3MgaXQgaW4gYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCB0byBwcmV2ZW50IGluZmluaXRlIHBhY2tldCBkdXBsaWNhdGlvbiBsb29wcy5cXG5cXG4xLiBJbml0aWFsaXphdGlvbjogQWxsIGBza19idWZmYCBpbnN0YW5jZXMgYXJlIHplcm9lZCB1cG9uIGFsbG9jYXRpb24gdmlhIGBza2J1ZmZfY2xlYXIoKWAgKHdoaWNoIHplcm9lcyBtZW1vcnkgZnJvbSB0aGUgc3RhcnQgb2YgYHN0cnVjdCBza19idWZmYCB1cCB0byBgdGFpbGApLCBlbnN1cmluZyBgbmZfZHVwbGljYXRlZGAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSXQgaXMgcHJvcGVybHkgcHJlc2VydmVkIGluIGBuZl9jb3B5KClgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXIoKWAuXFxuMi4gTm8gSW5mby1MZWFrczogYG5mX2R1cGxpY2F0ZWRgIGlzIHB1cmVseSBhbiBpbnRlcm5hbCBrZXJuZWwgc3RhdGUgZmxhZyB3aXRoaW4gYHN0cnVjdCBza19idWZmYCBhbmQgaXMgbmV2ZXIgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS5cXG4zLiBObyBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGFsdGVyIHBhY2tldCBkYXRhIGxlbmd0aHMsIHBheWxvYWQgYm91bmRzLCBvciBhY2Nlc3MgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkuXFxuXFxuQmVjYXVzZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICduZl9kdXBsaWNhdGVkJyBiaXQgaW4gc3RydWN0IHNrX2J1ZmYgdG8gdHJhY2sgY2xvbmVkIHBhY2tldHMgYWNyb3NzIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBob29rcyAoZS5nLiBuZnRfZHVwIGFuZCB4dF9URUUpLCBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzLiBUaGlzIGRpcmVjdGx5IGNoYW5nZXMgcGFja2V0IGNsb25pbmcgYW5kIHJvdXRpbmcgYmVoYXZpb3IgaW4gbmV0ZmlsdGVyIElQdjQgYW5kIElQdjYgZHVwbGljYXRpb24gcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjA2LjMzMzE4NjE3MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NDM0MjA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4OTI0Mzk4ZDI0Yzg5ZmZkYzVkMDg2Y2NkOGE3NDhhYjNlZDcwYWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDc6MDI6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5pbmRleCA1NTIyNzE2ZGY4ZmZmLi5mNWM3YjdiMWNlZGVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXFxuQEAgLTgxMiw2ICs4MTIsNyBAQCBlbnVtIHNrYl90c3RhbXBfdHlwZSB7XFxuICAqXFx0QHJlZGlyZWN0ZWQ6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBieSBwYWNrZXQgY2xhc3NpZmllclxcbiAgKlxcdEBmcm9tX2luZ3Jlc3M6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBmcm9tIHRoZSBpbmdyZXNzIHBhdGhcXG4gICpcXHRAbmZfc2tpcF9lZ3Jlc3M6IHBhY2tldCBzaGFsbCBza2lwIG5mIGVncmVzcyAtIHNlZSBuZXRmaWx0ZXJfbmV0ZGV2LmhcXG4rICpcXHRAbmZfZHVwbGljYXRlZDogcGFja2V0IHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXRmaWx0ZXIgZHVwbGljYXRpb24gYWN0aW9uXFxuICAqXFx0QHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW5cXG4gICpcXHRcXHRkb25lIGZvciBpdCwgZG9uJ3QgZG8gdGhlbSBhZ2FpblxcbiAgKlxcdEBuZl90cmFjZTogbmV0ZmlsdGVyIHBhY2tldCB0cmFjZSBmbGFnXFxuQEAgLTEwMjMsNiArMTAyNCw5IEBAIHN0cnVjdCBza19idWZmIHtcXG4gI2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4gXFx0X191OFxcdFxcdFxcdG5mX3NraXBfZWdyZXNzOjE7XFxuICNlbmRpZlxcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxcbitcXHRfX3U4XFx0XFx0XFx0bmZfZHVwbGljYXRlZDoxO1xcbisjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVEXFxuIFxcdF9fdThcXHRcXHRcXHRkZWNyeXB0ZWQ6MTtcXG4gI2VuZGlmXFxuQEAgLTUyMDAsNiArNTIwNCw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb3B5KHN0cnVjdCBza19idWZmICpkc3QsIGNvbnN0IHN0cnVjdCBza19idWZmICpzcmMpXFxuIFxcdG5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7XFxuICNlbmRpZlxcbiBcXHRkc3QtXFx1MDAzZXNsb3dfZ3JvID0gc3JjLVxcdTAwM2VzbG93X2dybztcXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcXG4rXFx0ZHN0LVxcdTAwM2VuZl9kdXBsaWNhdGVkID0gc3JjLVxcdTAwM2VuZl9kdXBsaWNhdGVkO1xcbisjZW5kaWZcXG4gXFx0X19uZl9jb3B5KGRzdCwgc3JjLCB0cnVlKTtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xcbmluZGV4IDlhNzczNTAyZjEwYWMuLjhmZTMxYTBkYjA2M2IgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcXG4rKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xcbkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4gXFx0c3RydWN0IGlwaGRyICppcGg7XFxuIFxcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuK1xcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0LypcXG4gXFx0ICogQ29weSB0aGUgc2tiLCBhbmQgcm91dGUgdGhlIGNvcHkuIFdpbGwgbGF0ZXIgcmV0dXJuICVYVF9DT05USU5VRSBmb3JcXG5AQCAtODYsNiArODYsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuIFxcdFxcdC0taXBoLVxcdTAwM2V0dGw7XFxuIFxcbiBcXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XFxuK1xcdFxcdHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XFxuIFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuIFxcdFxcdGlwX2xvY2FsX291dChuZXQsIHNrYi1cXHUwMDNlc2ssIHNrYik7XFxuIFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuaW5kZXggNmRhMzEwMmI3YzFiMy4uZTBmZGI0M2Q3ZDNkZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xcbisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXFxuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiBcXHRcXHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcXG4ge1xcbiBcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuLVxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXFxuK1xcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmIChza2IgPT0gTlVMTClcXG5AQCAtNjQsNiArNjQsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuIFxcdFxcdC0taXBoLVxcdTAwM2Vob3BfbGltaXQ7XFxuIFxcdH1cXG4gXFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbitcXHRcXHRza2ItXFx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xcbiBcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiBcXHRcXHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gXFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjA3Ljg4OTA0NDgyN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTI2NDY3NTY3MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAnbmZfZHVwbGljYXRlZCcgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzODkyNDM5OGQyNGM4OWZmZGM1ZDA4NmNjZDhhNzQ4YWIzZWQ3MGFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMDc6MDI6MDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuaW5kZXggNTUyMjcxNmRmOGZmZi4uZjVjN2I3YjFjZWRlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbkBAIC04MTIsNiArODEyLDcgQEAgZW51bSBza2JfdHN0YW1wX3R5cGUge1xuICAqXHRAcmVkaXJlY3RlZDogcGFja2V0IHdhcyByZWRpcmVjdGVkIGJ5IHBhY2tldCBjbGFzc2lmaWVyXG4gICpcdEBmcm9tX2luZ3Jlc3M6IHBhY2tldCB3YXMgcmVkaXJlY3RlZCBmcm9tIHRoZSBpbmdyZXNzIHBhdGhcbiAgKlx0QG5mX3NraXBfZWdyZXNzOiBwYWNrZXQgc2hhbGwgc2tpcCBuZiBlZ3Jlc3MgLSBzZWUgbmV0ZmlsdGVyX25ldGRldi5oXG4rICpcdEBuZl9kdXBsaWNhdGVkOiBwYWNrZXQgd2FzIGdlbmVyYXRlZCBieSBhIG5ldGZpbHRlciBkdXBsaWNhdGlvbiBhY3Rpb25cbiAgKlx0QHBlZWtlZDogdGhpcyBwYWNrZXQgaGFzIGJlZW4gc2VlbiBhbHJlYWR5LCBzbyBzdGF0cyBoYXZlIGJlZW5cbiAgKlx0XHRkb25lIGZvciBpdCwgZG9uJ3QgZG8gdGhlbSBhZ2FpblxuICAqXHRAbmZfdHJhY2U6IG5ldGZpbHRlciBwYWNrZXQgdHJhY2UgZmxhZ1xuQEAgLTEwMjMsNiArMTAyNCw5IEBAIHN0cnVjdCBza19idWZmIHtcbiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9TS0lQX0VHUkVTU1xuIFx0X191OFx0XHRcdG5mX3NraXBfZWdyZXNzOjE7XG4gI2VuZGlmXG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcbitcdF9fdThcdFx0XHRuZl9kdXBsaWNhdGVkOjE7XG4rI2VuZGlmXG4gI2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVEXG4gXHRfX3U4XHRcdFx0ZGVjcnlwdGVkOjE7XG4gI2VuZGlmXG5AQCAtNTIwMCw2ICs1MjA0LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIG5mX2NvcHkoc3RydWN0IHNrX2J1ZmYgKmRzdCwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNyYylcbiBcdG5mX2Nvbm50cmFja19wdXQoc2tiX25mY3QoZHN0KSk7XG4gI2VuZGlmXG4gXHRkc3QtXHUwMDNlc2xvd19ncm8gPSBzcmMtXHUwMDNlc2xvd19ncm87XG4rI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY0KSB8fCBJU19FTkFCTEVEKENPTkZJR19ORl9EVVBfSVBWNilcbitcdGRzdC1cdTAwM2VuZl9kdXBsaWNhdGVkID0gc3JjLVx1MDAzZW5mX2R1cGxpY2F0ZWQ7XG4rI2VuZGlmXG4gXHRfX25mX2NvcHkoZHN0LCBzcmMsIHRydWUpO1xuIH1cbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG5pbmRleCA5YTc3MzUwMmYxMGFjLi44ZmUzMWEwZGIwNjNiIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXG5AQCAtNTQsNyArNTQsNyBAQCB2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbiBcbiBcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbi1cdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSlcbitcdGlmIChjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSB8fCBza2ItXHUwMDNlbmZfZHVwbGljYXRlZClcbiBcdFx0Z290byBvdXQ7XG4gXHQvKlxuIFx0ICogQ29weSB0aGUgc2tiLCBhbmQgcm91dGUgdGhlIGNvcHkuIFdpbGwgbGF0ZXIgcmV0dXJuICVYVF9DT05USU5VRSBmb3JcbkBAIC04Niw2ICs4Niw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiBcdFx0LS1pcGgtXHUwMDNldHRsO1xuIFxuIFx0aWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xuK1x0XHRza2ItXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gdHJ1ZTtcbiBcdFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbmluZGV4IDZkYTMxMDJiN2MxYjMuLmUwZmRiNDNkN2QzZGYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcbkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiBcdFx0IGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqZ3csIGludCBvaWYpXG4ge1xuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuK1x0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuIFx0XHRnb3RvIG91dDtcbiBcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKHNrYiA9PSBOVUxMKVxuQEAgLTY0LDYgKzY0LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2Vob3BfbGltaXQ7XG4gXHR9XG4gXHRpZiAobmZfZHVwX2lwdjZfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4rXHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiBcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuIFx0XHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVx1MDAzZXNrLCBza2IpO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MDcuODg5MDQ3NzU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcwMDQxMTEzOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGFja2V0IER1cGxpY2F0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0aW5nIHRoZSBuZXRmaWx0ZXIgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljIOKAkyB0aGluZ3MgbGlrZSBgbmZ0X2R1cF9pcHY0YCwgYG5mdF9kdXBfaXB2NmAsIGFuZCBwb3RlbnRpYWxseSBldmVuIGB4dF9URUVgLCBhbGwgb2Ygd2hpY2ggbGV2ZXJhZ2UgdGhlIGNvcmUgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YCBmdW5jdGlvbnMuIFRoZSBjb3JlIGNvbmNlcHQgaGVyZSBpcyBwcmV2ZW50aW5nIGluZmluaXRlIGR1cGxpY2F0aW9uIGxvb3BzIG9yIHJlY3Vyc2lvbiB3aGVuIGEgZHVwbGljYXRlZCBwYWNrZXQgaGl0cyBuZXRmaWx0ZXIgaG9va3MgYWdhaW4uIFNtYXJ0LlxuXG5UaGUgbW9kaWZpY2F0aW9ucyBhcmUgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSW4gYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCB0aGV5J3JlIGFkZGluZyBhIGBuZl9kdXBsaWNhdGVkOjFgIGJpdCB0byB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gVGhpcyBiaXQgaXMgY29uZGl0aW9uYWwsIG9ubHkgYXBwZWFyaW5nIHdoZW4gZWl0aGVyIGBDT05GSUdfTkZfRFVQX0lQVjRgIG9yIGBDT05GSUdfTkZfRFVQX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQncyBnb29kLCBrZWVwcyB0aGUgc3RydWN0IGxlYW4gd2hlbiBpdCdzIG5vdCBuZWVkZWQuIFRoZXkncmUgYWxzbyBtYWtpbmcgc3VyZSBgbmZfZHVwbGljYXRlZGAgZ2V0cyBjb3BpZWQgb3ZlciBpbiBgbmZfY29weSgpYC4gTWFrZXMgc2Vuc2U7IHdlIG5lZWQgdG8gcmV0YWluIHRoYXQgZHVwbGljYXRlZCBzdGF0dXMuXG5cbk5vdywgaW4gYG5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jYCBhbmQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYCwgaXQncyBhbGwgYWJvdXQgc2V0dGluZyBhbmQgY2hlY2tpbmcgdGhpcyBuZXcgYml0LiBCb3RoIGBuZl9kdXBfaXB2NCgpYCBhbmQgYG5mX2R1cF9pcHY2KClgIGFyZSBjaGVja2luZyBpZiBgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWRgIGlzIGFscmVhZHkgc2V0LCBhbmQgKnRoZW4qIHNldHRpbmcgaXQgaWYgaXQgaXNuJ3QuIFRoaXMgcHJldmVudHMgdGhlIHNhbWUgcGFja2V0IGZyb20gYmVpbmcgbWFya2VkIGFzIGR1cGxpY2F0ZWQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgZHVwbGljYXRpb24gcGF0aC5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB2ZXJpZnkgaG93IHRoZSBLY29uZmlnIHNldHRpbmdzIGFyZSBiZWluZyB1c2VkLiBMZXQncyBzZWUgaG93IHRob3NlIGBDT05GSUdfTkZfRFVQX0lQVjRgIGFuZCBgQ09ORklHX05GX0RVUF9JUFY2YCBmbGFncyBhcmUgY29uZmlndXJlZC4gSSdsbCBwcm9iYWJseSBydW4gYSBgZ3JlcHBlcmAgYWNyb3NzIHRoZSBLY29uZmlnIGZpbGVzLCBvciBqdXN0IGRpZyB0aHJvdWdoIHRoZW0gaWYgSSBuZWVkIHRvLiBVbmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIG9wdGlvbnMgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUsIG9mIGNvdXJzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjI0Ljg5MzE2MTgwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODIzODk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfRFVQX0lQVls0Nl1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MjQuOTkxNDA0NzAzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgwMjQ4OTI5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipLY29uZmlnIEluc3BlY3Rpb24gZm9yIElQdjQgYW5kIElQdjYgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgbmV0ZmlsdGVyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgcGFydGljdWxhcmx5IHRoZWlyIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBJUHY0IGFuZCBJUHY2IGNvbXBvbmVudHMgYXJlIHN0cnVjdHVyZWQuIExldCBtZSBwdWxsIHVwIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGNoZWNrIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNzIsIHRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgSVB2NCBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBob3cgdGhleSByZWxhdGUuIFRoZW4sIEknbGwgbmVlZCB0byBsb29rIGludG8gYG5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnYCBhcm91bmQgbGluZSA2MSB0byBzZWUgaG93IHRoZSBJUHY2IGNvbmZpZ3VyYXRpb24gaXMgc2V0IHVwLiBUaGlzIHdpbGwgbGV0IG1lIHNlZSBpZiB0aGUgSVB2NiBjb25maWd1cmF0aW9uIGlzIHNpbWlsYXIgb3IgaGFzIGl0cyBvd24gc3BlY2lmaWMgZGVwZW5kZW5jaWVzIHRvIGJlIGF3YXJlIG9mLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgY29yZSBuZXRmaWx0ZXIgY29uZmlndXJhdGlvbiBhbmQgdGhlIElQdjQvSVB2NiBzcGVjaWZpYyBvcHRpb25zLiBIb3BlZnVsbHksIHRoZXNlIEtjb25maWcgZmlsZXMgd2lsbCBjbGVhcmx5IG91dGxpbmUgdGhlIHZhcmlvdXMgZmVhdHVyZXMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcywgYWxsb3dpbmcgbWUgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDEwNSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjI3Ljc5Mzg5NTk1NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYwOlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgTkZfVEFCTEVTX0FSUFxcbiAgNjU6XFx0XFx0Ym9vbCBcXFwiQVJQIG5mX3RhYmxlcyBzdXBwb3J0XFxcIlxcbiAgNjY6XFx0XFx0c2VsZWN0IE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICA2NzpcXHRcXHRoZWxwXFxuICA2ODpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEFSUCBzdXBwb3J0IGZvciBuZl90YWJsZXMuXFxuICA2OTpcXHRcXG4gIDcwOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuICA3MTpcXHRcXG4gIDcyOlxcdGNvbmZpZyBORl9EVVBfSVBWNFxcbiAgNzM6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBJUHY0IHBhY2tldCBkdXBsaWNhdGlvbiB0byBhbHRlcm5hdGUgZGVzdGluYXRpb25cXFwiXFxuICA3NDpcXHRcXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxuICA3NTpcXHRcXHRoZWxwXFxuICA3NjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG5mX2R1cF9pcHY0IGNvcmUsIHdoaWNoIGR1cGxpY2F0ZXMgYW4gSVB2NFxcbiAgNzc6XFx0XFx0ICBwYWNrZXQgdG8gYmUgcmVyb3V0ZWQgdG8gYW5vdGhlciBkZXN0aW5hdGlvbi5cXG4gIDc4OlxcdFxcbiAgNzk6XFx0Y29uZmlnIE5GX0xPR19BUlBcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJBUlAgcGFja2V0IGxvZ2dpbmdcXFwiXFxuICA4MTpcXHRcXHRkZWZhdWx0IG0gaWYgTkVURklMVEVSX0FEVkFOQ0VEPW5cXG4gIDgyOlxcdFxcdHNlbGVjdCBORl9MT0dfU1lTTE9HXFxuICA4MzpcXHRcXHRoZWxwXFxuICA4NDpcXHRcXHRUaGlzIGlzIGEgYmFja3dhcmRzLWNvbXBhdCBvcHRpb24gZm9yIHRoZSB1c2VyJ3MgY29udmVuaWVuY2VcXG4gIDg1OlxcdFxcdChlLmcuIHdoZW4gcnVubmluZyBvbGRjb25maWcpLiBJdCBzZWxlY3RzIENPTkZJR19ORl9MT0dfU1lTTE9HLlxcbiAgODY6XFx0XFxuICA4NzpcXHRjb25maWcgTkZfTE9HX0lQVjRcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY0IHBhY2tldCBsb2dnaW5nXFxcIlxcbiAgODk6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA5MDpcXHRcXHRzZWxlY3QgTkZfTE9HX1NZU0xPR1xcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0VGhpcyBpcyBhIGJhY2t3YXJkcy1jb21wYXQgb3B0aW9uIGZvciB0aGUgdXNlcidzIGNvbnZlbmllbmNlXFxuICA5MzpcXHRcXHQoZS5nLiB3aGVuIHJ1bm5pbmcgb2xkY29uZmlnKS4gSXQgc2VsZWN0cyBDT05GSUdfTkZfTE9HX1NZU0xPRy5cXG4gIDk0OlxcdFxcbiAgOTU6XFx0Y29uZmlnIE5GX1JFSkVDVF9JUFY0XFxuICA5NjpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NCBwYWNrZXQgcmVqZWN0aW9uXFxcIlxcbiAgOTc6XFx0XFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXFxuICA5ODpcXHRcXG4gIDk5OlxcdGlmIE5GX05BVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMjoyNy43OTM5Njg3ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUwNDc2MjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBORl9EVVBfSVBWNC9JUFY2IERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoZSBgTkZfRFVQX0lQVjRgIGFuZCBgTkZfRFVQX0lQVjZgIG9wdGlvbnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBiZXlvbmQgdGhlaXIgYmFzaWMgZnVuY3Rpb24sIGxldCdzIGV4cGxvcmUgdGhlaXIgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBicm9hZGVyIGVjb3N5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzLCBtb2R1bGVzLCBvciBjb25maWd1cmF0aW9ucyAqc2VsZWN0KiB0aGVzZSBvcHRpb25zIOKAkyB3aGF0IGFyZSB0aGUgcHJlcmVxdWlzaXRlcz8gQ29udmVyc2VseSwgSSdtIGVxdWFsbHkgaW50ZXJlc3RlZCBpbiB3aGF0ICpkZXBlbmRzKiBvbiB0aGVtLiBXaGljaCBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjayByZWx5IG9uIHRoZXNlIHNldHRpbmdzIHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlbSwgYW5kIHBhcnRpY3VsYXJseSB3aGVuIGNvbnNpZGVyaW5nIGNvbXBhdGliaWxpdHkgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgaW4gZGlmZmVyZW50IGVudmlyb25tZW50cy4gV2UgbmVlZCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgdGhlaXIgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gY29ubmVjdGlvbnMgaW4gdGhlIHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDk0NywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDI6MzAuMDQ0NDQ5Mjc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDAwMDg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORl9EVVBfSVBWWzQ2XVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnPTQ3PWNvbmZpZyBORlRfRFVQX0lQVjRcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ5LVxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZzo1MDpcXHRzZWxlY3QgTkZfRFVQX0lQVjRcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZy01MS1cXHRoZWxwXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZz03MD1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTcxLVxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnOjcyOmNvbmZpZyBORl9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTczLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uXFxcIlxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZz00Mz1jb25maWcgTkZUX0RVUF9JUFY2XFxuLS1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uICFORl9DT05OVFJBQ0sgfHwgTkZfQ09OTlRSQUNLXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc6NDY6XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWctNDctXFx0aGVscFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWc9NTk9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02MC1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZzo2MTpjb25maWcgTkZfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy02Mi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIElQdjYgcGFja2V0IGR1cGxpY2F0aW9uIHRvIGFsdGVybmF0ZSBkZXN0aW5hdGlvblxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZT0yMj1vYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjYpICs9IG5mX3JlamVjdF9pcHY2Lm9cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvTWFrZWZpbGUtMjMtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORl9EVVBfSVBWNikgKz0gbmZfZHVwX2lwdjYub1xcbm5ldC9pcHY2L25ldGZpbHRlci9NYWtlZmlsZS0yNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz0xMDU3PWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTEwNjEtXFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgIUlQNl9ORl9JUFRBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYyOlxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzoxMDYzOlxcdHNlbGVjdCBORl9EVVBfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTA2NC1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAyOjMwLjE3NDQ1NDE0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwODE1MjY4NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBEdXBsaWNhdGlvbiBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaXZlIGludG8gdGhlIGNvcmUgb2YgaG93IElQdjQgYW5kIElQdjYgcGFja2V0cyBnZXQgZHVwbGljYXRlZCB3aXRoaW4gdGhlIG5ldGZpbHRlciBmcmFtZXdvcmsuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlIGR1cGxpY2F0aW9uIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIHByb2JhYmx5IHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGUgZnVuY3Rpb25zIGRlZmluZWQgd2l0aGluIGBuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIFRoYXQnbGwgYmUgdGhlIGJlc3QgcGxhY2UgdG8gdW5kZXJzdGFuZCB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24uIEknbGwgZm9jdXMgb24gdGhlIGZ1bmN0aW9ucyB3aXRoaW4gdGhvc2UgZmlsZXMgdG8gZ2V0IHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMjozMi4yNTU5ODU0OTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuICAgMjpcXHQvKlxcbiAgIDM6XFx0ICogKEMpIDIwMDcgYnkgU2ViYXN0aWFuIENsYcOfZW4gXFx1MDAzY3NlYmFzdGlhbi5jbGFzc2VuQGZyZWVuZXQuYWdcXHUwMDNlXFxuICAgNDpcXHQgKiAoQykgMjAwNy0yMDEwIGJ5IEphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxuICAgNTpcXHQgKlxcbiAgIDY6XFx0ICogRXh0cmFjdGVkIGZyb20geHRfVEVFLmNcXG4gICA3OlxcdCAqL1xcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcGVyY3B1LmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcm91dGUuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDEzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvY2hlY2tzdW0uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZmxvdy5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pY21wLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2lwLmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmhcXHUwMDNlXFxuICAyMDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmhcXHUwMDNlXFxuICAyMjpcXHQjZW5kaWZcXG4gIDIzOlxcdFxcbiAgMjQ6XFx0c3RhdGljIGJvb2wgbmZfZHVwX2lwdjRfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiAgMjU6XFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgMjY6XFx0e1xcbiAgMjc6XFx0XFx0Y29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTtcXG4gIDI4OlxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbiAgMjk6XFx0XFx0c3RydWN0IGZsb3dpNCBmbDQ7XFxuICAzMDpcXHRcXG4gIDMxOlxcdFxcdG1lbXNldChcXHUwMDI2Zmw0LCAwLCBzaXplb2YoZmw0KSk7XFxuICAzMjpcXHRcXHRpZiAob2lmICE9IC0xKVxcbiAgMzM6XFx0XFx0XFx0Zmw0LmZsb3dpNF9vaWYgPSBvaWY7XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdGZsNC5kYWRkciA9IGd3LVxcdTAwM2VzX2FkZHI7XFxuICAzNjpcXHRcXHRmbDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBoKTtcXG4gIDM3OlxcdFxcdGZsNC5mbG93aTRfc2NvcGUgPSBSVF9TQ09QRV9VTklWRVJTRTtcXG4gIDM4OlxcdFxcdGZsNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xcbiAgMzk6XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgXFx1MDAyNmZsNCk7XFxuICA0MDpcXHRcXHRpZiAoSVNfRVJSKHJ0KSlcXG4gIDQxOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxuICA0NDpcXHRcXHRza2JfZHN0X3NldChza2IsIFxcdTAwMjZydC1cXHUwMDNlZHN0KTtcXG4gIDQ1OlxcdFxcdHNrYi1cXHUwMDNlZGV2ICAgICAgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4gIDQ2OlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7XFxuICA0NzpcXHRcXG4gIDQ4OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNDk6XFx0fVxcbiAgNTA6XFx0XFxuICA1MTpcXHR2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuICA1MjpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgNTM6XFx0e1xcbiAgNTQ6XFx0XFx0c3RydWN0IGlwaGRyICppcGg7XFxuICA1NTpcXHRcXG4gIDU2OlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDU3OlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiAgNTg6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1OTpcXHRcXHQvKlxcbiAgNjA6XFx0XFx0ICogQ29weSB0aGUgc2tiLCBhbmQgcm91dGUgdGhlIGNvcHkuIFdpbGwgbGF0ZXIgcmV0dXJuICVYVF9DT05USU5VRSBmb3JcXG4gIDYxOlxcdFxcdCAqIHRoZSBvcmlnaW5hbCBza2IsIHdoaWNoIHNob3VsZCBjb250aW51ZSBvbiBpdHMgd2F5IGFzIGlmIG5vdGhpbmcgaGFzXFxuICA2MjpcXHRcXHQgKiBoYXBwZW5lZC4gVGhlIGNvcHkgc2hvdWxkIGJlIGluZGVwZW5kZW50bHkgZGVsaXZlcmVkIHRvIHRoZSBnYXRld2F5LlxcbiAgNjM6XFx0XFx0ICovXFxuICA2NDpcXHRcXHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcXG4gIDY1OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4gIDY2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNjc6XFx0XFxuICA2ODpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgNjk6XFx0XFx0LyogQXZvaWQgY291bnRpbmcgY2xvbmVkIHBhY2tldHMgdG93YXJkcyB0aGUgb3JpZ2luYWwgY29ubmVjdGlvbi4gKi9cXG4gIDcwOlxcdFxcdG5mX3Jlc2V0X2N0KHNrYik7XFxuICA3MTpcXHRcXHRuZl9jdF9zZXQoc2tiLCBOVUxMLCBJUF9DVF9VTlRSQUNLRUQpO1xcbiAgNzI6XFx0I2VuZGlmXFxuICA3MzpcXHRcXHQvKlxcbiAgNzQ6XFx0XFx0ICogSWYgd2UgYXJlIGluIFBSRVJPVVRJTkcvSU5QVVQsIGRlY3JlYXNlIHRoZSBUVEwgdG8gbWl0aWdhdGUgcG90ZW50aWFsXFxuICA3NTpcXHRcXHQgKiBsb29wcyBiZXR3ZWVuIHR3byBob3N0cy5cXG4gIDc2OlxcdFxcdCAqXFxuICA3NzpcXHRcXHQgKiBTZXQgJUlQX0RGIHNvIHRoYXQgdGhlIG9yaWdpbmFsIHNvdXJjZSBpcyBub3RpZmllZCBvZiBhIHBvdGVudGlhbGx5XFxuICA3ODpcXHRcXHQgKiBkZWNyZWFzZWQgTVRVIG9uIHRoZSBjbG9uZSByb3V0ZS4gSVB2NiBkb2VzIHRoaXMgdG9vLlxcbiAgNzk6XFx0XFx0ICpcXG4gIDgwOlxcdFxcdCAqIElQIGhlYWRlciBjaGVja3N1bSB3aWxsIGJlIHJlY2FsY3VsYXRlZCBhdCBpcF9sb2NhbF9vdXQuXFxuICA4MTpcXHRcXHQgKi9cXG4gIDgyOlxcdFxcdGlwaCA9IGlwX2hkcihza2IpO1xcbiAgODM6XFx0XFx0aXBoLVxcdTAwM2VmcmFnX29mZiB8PSBodG9ucyhJUF9ERik7XFxuICA4NDpcXHRcXHRpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HIHx8XFxuICA4NTpcXHRcXHQgICAgaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX0lOKVxcbiAgODY6XFx0XFx0XFx0LS1pcGgtXFx1MDAzZXR0bDtcXG4gIDg3OlxcdFxcbiAgODg6XFx0XFx0aWYgKG5mX2R1cF9pcHY0X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgODk6XFx0XFx0XFx0c2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcXG4gIDkwOlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuICA5MTpcXHRcXHRcXHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXFx1MDAzZXNrLCBza2IpO1xcbiAgOTI6XFx0XFx0XFx0Y3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XFxuICA5MzpcXHRcXHR9IGVsc2Uge1xcbiAgOTQ6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuICA5NTpcXHRcXHR9XFxuICA5NjpcXHRvdXQ6XFxuICA5NzpcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gIDk4OlxcdH1cXG4gIDk5OlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2R1cF9pcHY0KTtcXG4gMTAwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMjozMi4yNTYxODU5MDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY0MzIzNDA5NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUHY2IER1cGxpY2F0ZSBQYWNrZXQgUHJldmVudGlvbiBNb2R1bGUqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AuIEknbSBndWVzc2luZyB3ZSdyZSBsaWtlbHkgbG9va2luZyBhdCBob3cgZHVwbGljYXRlIElQdjYgcGFja2V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIFRoaXMgbWVhbnMgSSdtIHByb2JhYmx5IGdvaW5nIHRvIGJlIGZvY3VzaW5nIG9uIHRoZSBsb2dpYyB0aGF0IHByZXZlbnRzIHJlZHVuZGFudCBwcm9jZXNzaW5nIG9yIHRyYW5zbWlzc2lvbiBvZiBwYWNrZXRzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UgYW5kIHN0YWJpbGl0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcyBvZiBob3cgdGhleSBpZGVudGlmeSBhbmQgZGlzY2FyZCB0aGVzZSBkdXBsaWNhdGVzIHdpdGhpbiB0aGUgSVB2NiBjb250ZXh0LCB3aGljaCBjb3VsZCBpbnZvbHZlIGNoZWNraW5nIHNlcXVlbmNlIG51bWJlcnMsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHNwZWNpZmljIHRvIElQdjYncyBkZXNpZ24uIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgYXQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBhbGdvcml0aG1zIHJlbGF0ZWQgdG8gcGFja2V0IGNsYXNzaWZpY2F0aW9uIGFuZCBkZWR1cGxpY2F0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHVuZGVyIHRoZSBob29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjQwLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzowOC42ODg1Mjg4ODdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIChDKSAyMDA3IGJ5IFNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcbiAgIDQ6XFx0ICogKEMpIDIwMDctMjAxMCBieSBKYW4gRW5nZWxoYXJkdCBcXHUwMDNjamVuZ2VsaEBtZWRvemFzLmRlXFx1MDAzZVxcbiAgIDU6XFx0ICpcXG4gICA2OlxcdCAqIEV4dHJhY3RlZCBmcm9tIHh0X1RFRS5jXFxuICAgNzpcXHQgKi9cXG4gICA4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gICA5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wZXJjcHUuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDExOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXIuaFxcdTAwM2VcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvaXB2Ni5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL2lwdjYvbmZfZHVwX2lwdjYuaFxcdTAwM2VcXG4gIDE1OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaFxcdTAwM2VcXG4gIDE3OlxcdCNlbmRpZlxcbiAgMTg6XFx0XFxuICAxOTpcXHRzdGF0aWMgYm9vbCBuZl9kdXBfaXB2Nl9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuICAyMDpcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgMjE6XFx0e1xcbiAgMjI6XFx0XFx0Y29uc3Qgc3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICAyMzpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuICAyNDpcXHRcXHRzdHJ1Y3QgZmxvd2k2IGZsNjtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0XFx0bWVtc2V0KFxcdTAwMjZmbDYsIDAsIHNpemVvZihmbDYpKTtcXG4gIDI3OlxcdFxcdGlmIChvaWYgIT0gLTEpXFxuICAyODpcXHRcXHRcXHRmbDYuZmxvd2k2X29pZiA9IG9pZjtcXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0Zmw2LmRhZGRyID0gKmd3O1xcbiAgMzE6XFx0XFx0Zmw2LmZsb3dsYWJlbCA9IChfX2ZvcmNlIF9fYmUzMikoKChpcGgtXFx1MDAzZWZsb3dfbGJsWzBdIFxcdTAwMjYgMHhGKSBcXHUwMDNjXFx1MDAzYyAxNikgfFxcbiAgMzI6XFx0XFx0XFx0XFx0KGlwaC1cXHUwMDNlZmxvd19sYmxbMV0gXFx1MDAzY1xcdTAwM2MgOCkgfCBpcGgtXFx1MDAzZWZsb3dfbGJsWzJdKTtcXG4gIDMzOlxcdFxcdGZsNi5mbG93aTZfZmxhZ3MgPSBGTE9XSV9GTEFHX0tOT1dOX05IO1xcbiAgMzQ6XFx0XFx0ZHN0ID0gaXA2X3JvdXRlX291dHB1dChuZXQsIE5VTEwsIFxcdTAwMjZmbDYpO1xcbiAgMzU6XFx0XFx0aWYgKGRzdC1cXHUwMDNlZXJyb3IpIHtcXG4gIDM2OlxcdFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuICAzNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICAzODpcXHRcXHR9XFxuICAzOTpcXHRcXHRza2JfZHN0X2Ryb3Aoc2tiKTtcXG4gIDQwOlxcdFxcdHNrYl9kc3Rfc2V0KHNrYiwgZHN0KTtcXG4gIDQxOlxcdFxcdHNrYi1cXHUwMDNlZGV2ICAgICAgPSBkc3RfZGV2KGRzdCk7XFxuICA0MjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7XFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdHJldHVybiB0cnVlO1xcbiAgNDU6XFx0fVxcbiAgNDY6XFx0XFxuICA0NzpcXHR2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxuICA0ODpcXHRcXHRcXHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcXG4gIDQ5OlxcdHtcXG4gIDUwOlxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gIDUxOlxcdFxcdGlmIChjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkKVxcbiAgNTI6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1MzpcXHRcXHRza2IgPSBwc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTtcXG4gIDU0OlxcdFxcdGlmIChza2IgPT0gTlVMTClcXG4gIDU1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNTY6XFx0XFxuICA1NzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfQ09OTlRSQUNLKVxcbiAgNTg6XFx0XFx0bmZfcmVzZXRfY3Qoc2tiKTtcXG4gIDU5OlxcdFxcdG5mX2N0X3NldChza2IsIE5VTEwsIElQX0NUX1VOVFJBQ0tFRCk7XFxuICA2MDpcXHQjZW5kaWZcXG4gIDYxOlxcdFxcdGlmIChob29rbnVtID09IE5GX0lORVRfUFJFX1JPVVRJTkcgfHxcXG4gIDYyOlxcdFxcdCAgICBob29rbnVtID09IE5GX0lORVRfTE9DQUxfSU4pIHtcXG4gIDYzOlxcdFxcdFxcdHN0cnVjdCBpcHY2aGRyICppcGggPSBpcHY2X2hkcihza2IpO1xcbiAgNjQ6XFx0XFx0XFx0LS1pcGgtXFx1MDAzZWhvcF9saW1pdDtcXG4gIDY1OlxcdFxcdH1cXG4gIDY2OlxcdFxcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcXG4gIDY3OlxcdFxcdFxcdHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XFxuICA2ODpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgNjk6XFx0XFx0XFx0aXA2X2xvY2FsX291dChuZXQsIHNrYi1cXHUwMDNlc2ssIHNrYik7XFxuICA3MDpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSBmYWxzZTtcXG4gIDcxOlxcdFxcdH0gZWxzZSB7XFxuICA3MjpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDczOlxcdFxcdH1cXG4gIDc0OlxcdG91dDpcXG4gIDc1OlxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbiAgNzY6XFx0fVxcbiAgNzc6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfZHVwX2lwdjYpO1xcbiAgNzg6XFx0XFxuICA3OTpcXHRNT0RVTEVfQVVUSE9SKFxcXCJTZWJhc3RpYW4gQ2xhw59lbiBcXHUwMDNjc2ViYXN0aWFuLmNsYXNzZW5AZnJlZW5ldC5hZ1xcdTAwM2VcXFwiKTtcXG4gIDgwOlxcdE1PRFVMRV9BVVRIT1IoXFxcIkphbiBFbmdlbGhhcmR0IFxcdTAwM2NqZW5nZWxoQG1lZG96YXMuZGVcXHUwMDNlXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjA4LjY4ODYwNDM4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTc1ODQ2Mzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIEZ1bmN0aW9uIENhbGxzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhbmQgd2FudCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBwYXR0ZXJucyBvZiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgLiBJdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvZ2ljLCB3aGljaCBpcyBvYnZpb3VzbHkgaW1wb3J0YW50IGZvciB0aGluZ3MgbGlrZSBtaXJyb3JpbmcsIGxvYWQgYmFsYW5jaW5nLCBvciBldmVuIGp1c3QgZGVidWdnaW5nIG5ldHdvcmsgdHJhZmZpYy4gSSBuZWVkIHRvIGtub3cgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyBpbnZva2VkLCBob3cgdGhleSdyZSBiZWluZyB1c2VkIHdpdGhpbiB0aG9zZSBjb250ZXh0cywgYW5kIHRoZSBwb3NzaWJsZSBpbXBsaWNhdGlvbnMgb2YgdGhlaXIgYXJndW1lbnRzLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoaW5ncyBsaWtlIHRoZSBkYXRhIHN0cnVjdHVyZXMgdGhleSBvcGVyYXRlIG9uIOKAkyB3aGF0IHNrYiBjb250ZXh0IGFyZSB0aGV5IHdvcmtpbmcgd2l0aD8gSG93IGFyZSB0aGUgSVAgaGVhZGVycyBtb2RpZmllZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzPyBJJ20gaG9waW5nIHRvIGdldCBhIHF1aWNrIG92ZXJ2aWV3IG9mIHRoZSBjYWxsIHNpdGVzLCBtYXliZSBpZGVudGlmeSBhbnkgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYnVncywgb3IganVzdCBnZW5lcmFsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBkdXBsaWNhdGVkIHBhY2tldHMgdGhyb3VnaCB0aGUgTmV0ZmlsdGVyIHN0YWNrLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHNvbWUgbGFyZ2VyIGFzcGVjdCBvZiBuZXR3b3JrIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBvciB0cmFmZmljIHNoYXBpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNjMsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjExLjI2NDQ1MzU4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ1MTc3NjE5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9kdXBfaXB2WzQ2XVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtNy1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2NC9uZl9kdXBfaXB2NC5oOjg6dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY0L25mX2R1cF9pcHY0LmgtOS1cXHRcXHQgY29uc3Qgc3RydWN0IGluX2FkZHIgKmd3LCBpbnQgb2lmKTtcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmgtNi1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kdXBfaXB2Ni5oOjc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9pcHY2L25mX2R1cF9pcHY2LmgtOC1cXHRcXHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZik7XFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYz0yND1zdGF0aWMgYm9vbCBuZl9kdXBfaXB2NF9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYy01MC1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuYzo1MTp2b2lkIG5mX2R1cF9pcHY0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmMtNTItXFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9uZnRfZHVwX2lwdjQuYz0yMD1zdGF0aWMgdm9pZCBuZnRfZHVwX2lwdjRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMjktXFxubmV0L2lwdjQvbmV0ZmlsdGVyL25mdF9kdXBfaXB2NC5jOjMwOlxcdG5mX2R1cF9pcHY0KG5mdF9uZXQocGt0KSwgcGt0LVxcdTAwM2Vza2IsIG5mdF9ob29rKHBrdCksIFxcdTAwMjZndywgb2lmKTtcXG5uZXQvaXB2NC9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY0LmMtMzEtfVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM9MTk9c3RhdGljIGJvb2wgbmZfZHVwX2lwdjZfcm91dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMtNDYtXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmM6NDc6dm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbm5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jLTQ4LVxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbi0tXFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jPTIwPXN0YXRpYyB2b2lkIG5mdF9kdXBfaXB2Nl9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9uZnRfZHVwX2lwdjYuYy0yNy1cXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZ0X2R1cF9pcHY2LmM6Mjg6XFx0bmZfZHVwX2lwdjYobmZ0X25ldChwa3QpLCBwa3QtXFx1MDAzZXNrYiwgbmZ0X2hvb2socGt0KSwgZ3csIG9pZik7XFxubmV0L2lwdjYvbmV0ZmlsdGVyL25mdF9kdXBfaXB2Ni5jLTI5LX1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM9Mzc9dGVlX3RnNChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTQxLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6NDI6XFx0bmZfZHVwX2lwdjQoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcXHUwMDI2aW5mby1cXHUwMDNlZ3cuaW4sIG9pZik7XFxubmV0L25ldGZpbHRlci94dF9URUUuYy00My1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM9NDk9dGVlX3RnNihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfYWN0aW9uX3BhcmFtICpwYXIpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL3h0X1RFRS5jLTUzLVxcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmM6NTQ6XFx0bmZfZHVwX2lwdjYoeHRfbmV0KHBhciksIHNrYiwgeHRfaG9va251bShwYXIpLCBcXHUwMDI2aW5mby1cXHUwMDNlZ3cuaW42LCBvaWYpO1xcbm5ldC9uZXRmaWx0ZXIveHRfVEVFLmMtNTUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjEzLjcxNjIzNTM0NFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTA0NTU1OTk3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBhIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG9uZSBhdCB0aGF0LiBJdCBsb29rcyBsaWtlIHdlJ3JlIGVuYWJsaW5nIGZ1enppbmcgZm9yIHNvbWV0aGluZyB0aGF0ICpkaXJlY3RseSogbW9kaWZpZXMgY29yZSBrZXJuZWwgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGxvZ2ljLiBTcGVjaWZpY2FsbHksIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYHNrX2J1ZmZgLCBgbmZfZHVwX2lwdjRgLCBgbmZfZHVwX2lwdjZgLCBhbmQgYG5mX2NvcHlgLiBUaGVzZSBhcmUgY3JpdGljYWwgcGllY2VzOyBhbnkgdnVsbmVyYWJpbGl0eSBoZXJlIGNvdWxkIGhhdmUgc2lnbmlmaWNhbnQgY29uc2VxdWVuY2VzLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEuXG5cbk15IHByaW1hcnkgZm9jdXMgcG9pbnRzIGhlcmUgYXJlIGBuZl9kdXBfaXB2NGAgYW5kIGBuZl9kdXBfaXB2NmAsIGFzIHRob3NlIGFyZSBleHBsaWNpdGx5IGNhbGxlZCBvdXQuIFRoYXQgdGVsbHMgbWUgdGhlc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGZ1enppbmcgY2FtcGFpZ24gd2lsbCBjb25jZW50cmF0ZSBpdHMgZWZmb3J0cywgb3IgYXQgbGVhc3Qgd2hlcmUgaW5pdGlhbCB0YXJnZXRzIHdpbGwgYmUuXG5cbk5vdywgcmVnYXJkaW5nIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMsIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBjb3JyZWN0IG1vZHVsZXMgZW5hYmxlZC4gSSBrbm93IHdlJ2xsIG5lZWQgYE5GX0RVUF9JUFY0YCBhbmQgYE5GX0RVUF9JUFY2YC4gQnV0IGl0J3MgYWxzbyB3b3J0aCBjaGVja2luZyB3aGV0aGVyIGBuZnRfZHVwYCwgYHh0X1RFRWAsIG9yIGJhc2ljIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSBhcmUgZW5hYmxlZCwgYmVjYXVzZSB0aGV5IGNvdWxkIGJlIGRlcGVuZGVuY2llcyBvciByZWxhdGVkIGZlYXR1cmVzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHdlIGFsc28gaGF2ZSBgTkVURklMVEVSYCwgYE5GVF9EVVBfSVBWNGAsIGBORlRfRFVQX0lQVjZgLCBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgLCBgSU5FVGAsIGFuZCBgSVBWNmAgY29uZmlndXJlZC4gQmVzdCBwcmFjdGljZSBpcyB0byBjb3ZlciB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZW5zdXJlIHRoZSBmZWF0dXJlIHdpbGwgd29yayBhcyBpbnRlbmRlZCB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cblxuTmV4dCBzdGVwOiBJ4oCZbGwgbmVlZCB0byBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgdGhlc2UgcmVseSBvbiB0byB3b3JrIGNvcnJlY3RseSwgYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgbWlnaHQgYmUgcmVxdWlyZWQgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZW5hYmxlZC4gVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSBpcyBlc3NlbnRpYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzoyOC43NjE3OTc1MDRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjQxNjMzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0RVUF9JUFZbNDZdXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc9NDI9Y29uZmlnIE5GVF9SRUpFQ1RfSVBWNFxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWctNDYtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL0tjb25maWc6NDc6Y29uZmlnIE5GVF9EVVBfSVBWNFxcbm5ldC9pcHY0L25ldGZpbHRlci9LY29uZmlnLTQ4LVxcdHRyaXN0YXRlIFxcXCJJUHY0IG5mX3RhYmxlcyBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnPTM4PWNvbmZpZyBORlRfUkVKRUNUX0lQVjZcXG4tLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnLTQyLVxcbm5ldC9pcHY2L25ldGZpbHRlci9LY29uZmlnOjQzOmNvbmZpZyBORlRfRFVQX0lQVjZcXG5uZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZy00NC1cXHR0cmlzdGF0ZSBcXFwiSVB2NiBuZl90YWJsZXMgcGFja2V0IGR1cGxpY2F0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjI4Ljg5NDIyNDc4MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTUxMDMwNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKktjb25maWcgRGl2ZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgb3B0aW9ucyBhcmUgY29uZmlndXJlZCBhcm91bmQgbGluZSA0Ny4gU29tZXRoaW5nJ3MgbmFnZ2luZyBhdCBtZSwgYW5kIEkgc3VzcGVjdCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG9yIGRlcGVuZGVuY3kgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIGlzc3VlIEknbSBjaGFzaW5nLiBMZXQncyBzZWUgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhhdCBzZWN0aW9uIGFuZCBqb2cgbXkgbWVtb3J5IG9mIHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgdXNlZnVsIGNvbnRleHQgYW5kIG1pZ2h0IHJlbWluZCBtZSBvZiBhIGNyaXRpY2FsIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzozMS40NDUyNTc2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA0MDpcXHRpZiBORl9UQUJMRVNfSVBWNFxcbiAgNDE6XFx0XFxuICA0MjpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY0XFxuICA0MzpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjRcXG4gIDQ0OlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbiAgNDU6XFx0XFx0dHJpc3RhdGVcXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIE5GVF9EVVBfSVBWNFxcbiAgNDg6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjQgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xcbiAgNTA6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY0XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NCBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgNTM6XFx0XFxuICA1NDpcXHRjb25maWcgTkZUX0ZJQl9JUFY0XFxuICA1NTpcXHRcXHRzZWxlY3QgTkZUX0ZJQlxcbiAgNTY6XFx0XFx0dHJpc3RhdGUgXFxcIm5mX3RhYmxlcyBmaWIgLyBpcCByb3V0ZSBsb29rdXAgc3VwcG9ydFxcXCJcXG4gIDU3OlxcdFxcdGhlbHBcXG4gIDU4OlxcdFxcdCAgVGhpcyBtb2R1bGUgZW5hYmxlcyBJUHY0IEZJQiBsb29rdXBzLCBlLmcuIGZvciByZXZlcnNlIHBhdGggZmlsdGVyaW5nLlxcbiAgNTk6XFx0XFx0ICBJdCBhbHNvIGFsbG93cyBxdWVyeSBvZiB0aGUgRklCIGZvciB0aGUgcm91dGUgdHlwZSwgZS5nLiBsb2NhbCwgdW5pY2FzdCxcXG4gIDYwOlxcdFxcdCAgbXVsdGljYXN0IG9yIGJsYWNraG9sZS5cXG4gIDYxOlxcdFxcbiAgNjI6XFx0ZW5kaWYgIyBORl9UQUJMRVNfSVBWNFxcbiAgNjM6XFx0XFxuICA2NDpcXHRjb25maWcgTkZfVEFCTEVTX0FSUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzozMS40NDUzNTQzOVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDc5MDAzMTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgdGhlIElQdjYgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEknbSBzcGVjaWZpY2FsbHkgdGhpbmtpbmcgYWJvdXQgYXJvdW5kIGxpbmUgNDMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgdGhpcyBwYXJ0aWN1bGFyIHNlY3Rpb24gaXMgc3RydWN0dXJlZC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gb3IgYSBkZXBlbmRlbmN5LiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBJJ20gbGlrZWx5IHRyeWluZyB0byB1bmRlcnN0YW5kIGEgZmVhdHVyZSdzIGF2YWlsYWJpbGl0eSBiYXNlZCBvbiBvdGhlciBjb25maWd1cmF0aW9ucywgb3IgSSBtaWdodCBiZSBkZWJ1Z2dpbmcgYW4gaXNzdWUgcmVsYXRlZCB0byBJUHY2IGZpbHRlcmluZy4gUGVyaGFwcyBJIGFtIGludmVzdGlnYXRpbmcgYSByZWNlbnQgcGF0Y2ggYW5kIG5lZWQgdG8gY29uZmlybSBpZiBpdCBoYXMgY29ycmVjdGx5IGxpbmtlZCB1cCB0byB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcy4gVGltZSB0byBkcmlsbCBkb3duIGludG8gdGhlIEtjb25maWcgYW5kIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE4NjgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjAzOjMzLjkyNDM2MDE5OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMzU6XFx0XFxuICAzNjpcXHRpZiBORl9UQUJMRVNfSVBWNlxcbiAgMzc6XFx0XFxuICAzODpcXHRjb25maWcgTkZUX1JFSkVDVF9JUFY2XFxuICAzOTpcXHRcXHRzZWxlY3QgTkZfUkVKRUNUX0lQVjZcXG4gIDQwOlxcdFxcdGRlZmF1bHQgTkZUX1JFSkVDVFxcbiAgNDE6XFx0XFx0dHJpc3RhdGVcXG4gIDQyOlxcdFxcbiAgNDM6XFx0Y29uZmlnIE5GVF9EVVBfSVBWNlxcbiAgNDQ6XFx0XFx0dHJpc3RhdGUgXFxcIklQdjYgbmZfdGFibGVzIHBhY2tldCBkdXBsaWNhdGlvbiBzdXBwb3J0XFxcIlxcbiAgNDU6XFx0XFx0ZGVwZW5kcyBvbiAhTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDS1xcbiAgNDY6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY2XFxuICA0NzpcXHRcXHRoZWxwXFxuICA0ODpcXHRcXHQgIFRoaXMgbW9kdWxlIGVuYWJsZXMgSVB2NiBwYWNrZXQgZHVwbGljYXRpb24gc3VwcG9ydCBmb3IgbmZfdGFibGVzLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRjb25maWcgTkZUX0ZJQl9JUFY2XFxuICA1MTpcXHRcXHR0cmlzdGF0ZSBcXFwibmZfdGFibGVzIGZpYiAvIGlwdjYgcm91dGUgbG9va3VwIHN1cHBvcnRcXFwiXFxuICA1MjpcXHRcXHRzZWxlY3QgTkZUX0ZJQlxcbiAgNTM6XFx0XFx0aGVscFxcbiAgNTQ6XFx0XFx0ICBUaGlzIG1vZHVsZSBlbmFibGVzIElQdjYgRklCIGxvb2t1cHMsIGUuZy4gZm9yIHJldmVyc2UgcGF0aCBmaWx0ZXJpbmcuXFxuICA1NTpcXHRcXHQgIEl0IGFsc28gYWxsb3dzIHF1ZXJ5IG9mIHRoZSBGSUIgZm9yIHRoZSByb3V0ZSB0eXBlLCBlLmcuIGxvY2FsLCB1bmljYXN0LFxcbiAgNTY6XFx0XFx0ICBtdWx0aWNhc3Qgb3IgYmxhY2tob2xlLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRlbmRpZiAjIE5GX1RBQkxFU19JUFY2XFxuICA1OTpcXHRlbmRpZiAjIE5GX1RBQkxFU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzozMy45MjQ0NzIzNDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM0MzkwNjg4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipDaGVja2luZyB0aGUgYEtjb25maWdgIGZvciBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgKipcblxuT2theSwgSSBuZWVkIHRvIHZlcmlmeSBzb21ldGhpbmcgYWJvdXQgdGhlIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAgdGFyZ2V0IGluIG5ldGZpbHRlci4gQmVzdCBwbGFjZSB0byBzdGFydCBpcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCBzbyBsZXQgbWUgcHVsbCB1cCBgbmV0L25ldGZpbHRlci9LY29uZmlnYC4gSSBzZWVtIHRvIHJlY2FsbCBpdCBiZWluZyBuZWFyIHRoZSBlbmQgb2YgdGhlIG5ldGZpbHRlciB0YXJnZXQgZGVmaW5pdGlvbnMuIEknbGwganVtcCB0byBhcm91bmQgbGluZSAxMDU3IG9yIHNvIOKAkyB0aGF0J3Mgb2Z0ZW4gd2hlcmUgdGhleSBncm91cCBzaW1pbGFyIGZlYXR1cmVzLiBIb3BlZnVsbHksIHRoZSBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGNsZWFyIHRoZXJlLiBUaGlzIHNob3VsZCBiZSBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBvYnZpb3VzIGlzc3VlIG9yIGZ1cnRoZXIgY29udGV4dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEknbSBsb29raW5nIGZvciB0aGUgdXN1YWw6IHRoZSBkZXBlbmRlbmN5IHRyZWUsIGFueSBkZWZhdWx0IG9wdGlvbnMsIGFuZCBhIGNsZWFyIGRlc2NyaXB0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDM6NTcuMzYzNTQzODdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDU1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDU1OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uXFxuMTA1NjpcXHRcXG4xMDU3OlxcdGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX1RFRVxcbjEwNTg6XFx0XFx0dHJpc3RhdGUgJ1xcXCJURUVcXFwiIC0gcGFja2V0IGNsb25pbmcgdG8gYWx0ZXJuYXRlIGRlc3RpbmF0aW9uJ1xcbjEwNTk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4xMDYwOlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tcXG4xMDYxOlxcdFxcdGRlcGVuZHMgb24gSVA2X05GX0lQVEFCTEVTIHx8ICFJUDZfTkZfSVBUQUJMRVNcXG4xMDYyOlxcdFxcdHNlbGVjdCBORl9EVVBfSVBWNFxcbjEwNjM6XFx0XFx0c2VsZWN0IE5GX0RVUF9JUFY2IGlmIElQNl9ORl9JUFRBQkxFU1xcbjEwNjQ6XFx0XFx0aGVscFxcbjEwNjU6XFx0XFx0VGhpcyBvcHRpb24gYWRkcyBhIFxcXCJURUVcXFwiIHRhcmdldCB3aXRoIHdoaWNoIGEgcGFja2V0IGNhbiBiZSBjbG9uZWQgYW5kXFxuMTA2NjpcXHRcXHR0aGlzIGNsb25lIGJlIHJlcm91dGVkIHRvIGFub3RoZXIgbmV4dGhvcC5cXG4xMDY3OlxcdFxcbjEwNjg6XFx0Y29uZmlnIE5FVEZJTFRFUl9YVF9UQVJHRVRfVFBST1hZXFxuMTA2OTpcXHRcXHR0cmlzdGF0ZSAnXFxcIlRQUk9YWVxcXCIgdGFyZ2V0IHRyYW5zcGFyZW50IHByb3h5aW5nIHN1cHBvcnQnXFxuMTA3MDpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9YVEFCTEVTXFxuMTA3MTpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbjEwNzI6XFx0XFx0ZGVwZW5kcyBvbiBJUDZfTkZfSVBUQUJMRVMgfHwgSVA2X05GX0lQVEFCTEVTPW5cXG4xMDczOlxcdFxcdGRlcGVuZHMgb24gSVBfTkZfTUFOR0xFIHx8IE5GVF9DT01QQVRcXG4xMDc0OlxcdFxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbjEwNzU6XFx0XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIElQNl9ORl9JUFRBQkxFUyAhPSBuXFxuMTA3NjpcXHRcXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcXG4xMDc3OlxcdFxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBJUDZfTkZfSVBUQUJMRVNcXG4xMDc4OlxcdFxcdGhlbHBcXG4xMDc5OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBhIGBUUFJPWFknIHRhcmdldCwgd2hpY2ggaXMgc29tZXdoYXQgc2ltaWxhciB0b1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowMzo1Ny4zNjM2NTQ3NVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjg0NTIzOTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIER1cGxpY2F0aW9uIENvbmZpZ3VyYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gbGFuZHNjYXBlIHJlbGF0ZWQgdG8gSVBWNCBhbmQgSVBWNiBkdXBsaWNhdGlvbiBpbiBOZXRmaWx0ZXIuIEknbGwgc3RhcnQgYnkgY29uZmlybWluZyB0aGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9uczogYE5GX0RVUF9JUFY0YCBhbmQgYE5GX0RVUF9JUFY2YC4gSSBzZWUgdGhhdCBgTkZfRFVQX0lQVjRgIGNhbiBiZSBlbmFibGVkIGRpcmVjdGx5LCBvciB0aHJvdWdoIHRoZSBOZXRmaWx0ZXIgdGFibGUgZXh0ZW5zaW9ucywgYE5GVF9EVVBfSVBWNGAsIG9yIGV2ZW4gdmlhIHRoZSBgTkVURklMVEVSX1hUX1RBUkdFVF9URUVgIG9wdGlvbiwgd2hpY2ggaW1wbGllcyBzb21lIGxldmVsIG9mIFRFRSBzdXBwb3J0IGlzIGJlaW5nIGxldmVyYWdlZC4gVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBJUHY2IGFuZCBgTkZfRFVQX0lQVjZgLCB3aGljaCBjYW4gYmUgZW5hYmxlZCBkaXJlY3RseSBvciB2aWEgYE5GVF9EVVBfSVBWNmAgb3IgYE5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFYC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYm90aCBgTkZfRFVQX0lQVjRgIGFuZCBgTkZfRFVQX0lQVjZgIGhhdmUgYSByYXRoZXIgcmVsYXhlZCBkZXBlbmRlbmN5IG9uIGNvbm5lY3Rpb24gdHJhY2tpbmcsIHNwZWNpZmljYWxseSB0aGF0IHRoZXkgY2FuIGV4aXN0IHdpdGggKm9yKiB3aXRob3V0IGl0OiBgIU5GX0NPTk5UUkFDSyB8fCBORl9DT05OVFJBQ0tgLiBUaGF0J3MgaW1wb3J0YW50IHRvIGtlZXAgaW4gbWluZC5cblxuVGhlIHBhdGNoIGl0c2VsZiBhcHBlYXJzIHRvIGJlIGd1YXJkaW5nIHRoZSBgc2tiYCBmaWVsZCB3aXRoIHByZXByb2Nlc3NvciBjb25kaXRpb25hbHMgYmFzZWQgb24gd2hldGhlciBgTkZfRFVQX0lQVjRgIG9yIGBORl9EVVBfSVBWNmAgYXJlIGVuYWJsZWQsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvci5cblxuU28sIHRvIHN1bW1hcml6ZSB0aGUgcmVsZXZhbnQgY29uZmlncywgSSdsbCBuZWVkIHRvIGNvbnNpZGVyOiBgTkZfRFVQX0lQVjRgLCBgTkZfRFVQX0lQVjZgLCBgTkZUX0RVUF9JUFY0YCwgYE5GVF9EVVBfSVBWNmAsIGFuZCB0aGUgY29tbW9uIGRlbm9taW5hdG9yIG9mIGBORVRGSUxURVJfWFRfVEFSR0VUX1RFRWAuXG5cblRoZSBmb2N1cyBzeW1ib2xzIGFyZSBjbGVhcjogYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YC5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHRvb2wncyBwYXJhbWV0ZXJzIGFuZCByZXF1aXJlbWVudHMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgYWxpZ25zLiBJIHNlZTpcbi0gYFdvcnRoRnV6emluZ2A6IFRydWUsIHdoaWNoIGlzIGV4cGVjdGVkLlxuLSBgRm9jdXNTeW1ib2xzYDogQ29uZmlybWVkLiBUaGV5IGFyZSBwcmVjaXNlbHkgd2hhdCBJIGFudGljaXBhdGVkLlxuLSBgRW5hYmxlQ29uZmlnc2A6IExvb2tzIHNwb3Qgb247IGFsbCBuZWNlc3NhcnkgY29uZmlncyBhcmUgbGlzdGVkLlxuLSBgUmVhc29uaW5nYDogU2VlbXMgY29uY2lzZS5cblxuQWxyaWdodCwgZXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaW1lIHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTMzLCJPdXRwdXRUb2tlbnMiOjE1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjE0LjIwODkzMzVaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc2NzQxMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAnbmZfZHVwbGljYXRlZCcgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0RVUF9JUFY0XCIsXG4gICAgXCJORl9EVVBfSVBWNlwiLFxuICAgIFwiTkZUX0RVUF9JUFY0XCIsXG4gICAgXCJORlRfRFVQX0lQVjZcIixcbiAgICBcIk5FVEZJTFRFUl9YVF9UQVJHRVRfVEVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfZHVwX2lwdjRcIixcbiAgICBcIm5mX2R1cF9pcHY2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAnbmZfZHVwbGljYXRlZCcgYml0IGluIHN0cnVjdCBza19idWZmIHRvIHRyYWNrIGNsb25lZCBwYWNrZXRzIGFjcm9zcyBuZXRmaWx0ZXIgZHVwbGljYXRpb24gaG9va3MgKGUuZy4gbmZ0X2R1cCBhbmQgeHRfVEVFKSwgcHJldmVudGluZyBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcy4gVGhpcyBkaXJlY3RseSBjaGFuZ2VzIHBhY2tldCBjbG9uaW5nIGFuZCByb3V0aW5nIGJlaGF2aW9yIGluIG5ldGZpbHRlciBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDoxNC4zNTY2MTc0MTdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NTQ3MjM3MDIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MTQuMzU3NDU3MjQ4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Nzc1NDYzOTI4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxcblxcbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4OTI0Mzk4ZDI0Yzg5ZmZkYzVkMDg2Y2NkOGE3NDhhYjNlZDcwYWNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAwNzowMjowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCA1NTIyNzE2ZGY4ZmZmLi5mNWM3YjdiMWNlZGVmIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTgxMiw2ICs4MTIsNyBAQCBlbnVtIHNrYl90c3RhbXBfdHlwZSB7XG4gICpcdEByZWRpcmVjdGVkOiBwYWNrZXQgd2FzIHJlZGlyZWN0ZWQgYnkgcGFja2V0IGNsYXNzaWZpZXJcbiAgKlx0QGZyb21faW5ncmVzczogcGFja2V0IHdhcyByZWRpcmVjdGVkIGZyb20gdGhlIGluZ3Jlc3MgcGF0aFxuICAqXHRAbmZfc2tpcF9lZ3Jlc3M6IHBhY2tldCBzaGFsbCBza2lwIG5mIGVncmVzcyAtIHNlZSBuZXRmaWx0ZXJfbmV0ZGV2LmhcbisgKlx0QG5mX2R1cGxpY2F0ZWQ6IHBhY2tldCB3YXMgZ2VuZXJhdGVkIGJ5IGEgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIGFjdGlvblxuICAqXHRAcGVla2VkOiB0aGlzIHBhY2tldCBoYXMgYmVlbiBzZWVuIGFscmVhZHksIHNvIHN0YXRzIGhhdmUgYmVlblxuICAqXHRcdGRvbmUgZm9yIGl0LCBkb24ndCBkbyB0aGVtIGFnYWluXG4gICpcdEBuZl90cmFjZTogbmV0ZmlsdGVyIHBhY2tldCB0cmFjZSBmbGFnXG5AQCAtMTAyMyw2ICsxMDI0LDkgQEAgc3RydWN0IHNrX2J1ZmYge1xuICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1NLSVBfRUdSRVNTXG4gXHRfX3U4XHRcdFx0bmZfc2tpcF9lZ3Jlc3M6MTtcbiAjZW5kaWZcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuK1x0X191OFx0XHRcdG5mX2R1cGxpY2F0ZWQ6MTtcbisjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1NLQl9ERUNSWVBURURcbiBcdF9fdThcdFx0XHRkZWNyeXB0ZWQ6MTtcbiAjZW5kaWZcbkBAIC01MjAwLDYgKzUyMDQsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxuIFx0bmZfY29ubnRyYWNrX3B1dChza2JfbmZjdChkc3QpKTtcbiAjZW5kaWZcbiBcdGRzdC1cdTAwM2VzbG93X2dybyA9IHNyYy1cdTAwM2VzbG93X2dybztcbisjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuK1x0ZHN0LVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSBzcmMtXHUwMDNlbmZfZHVwbGljYXRlZDtcbisjZW5kaWZcbiBcdF9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kdXBfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbmluZGV4IDlhNzczNTAyZjEwYWMuLjhmZTMxYTBkYjA2M2IgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY1xuKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcbkBAIC01NCw3ICs1NCw3IEBAIHZvaWQgbmZfZHVwX2lwdjQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcbiBcdHN0cnVjdCBpcGhkciAqaXBoO1xuIFxuIFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuLVx0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlKVxuK1x0aWYgKGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkKVxuIFx0XHRnb3RvIG91dDtcbiBcdC8qXG4gXHQgKiBDb3B5IHRoZSBza2IsIGFuZCByb3V0ZSB0aGUgY29weS4gV2lsbCBsYXRlciByZXR1cm4gJVhUX0NPTlRJTlVFIGZvclxuQEAgLTg2LDYgKzg2LDcgQEAgdm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQtLWlwaC1cdTAwM2V0dGw7XG4gXG4gXHRpZiAobmZfZHVwX2lwdjRfcm91dGUobmV0LCBza2IsIGd3LCBvaWYpKSB7XG4rXHRcdHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcbiBcdFx0Y3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xuIFx0XHRpcF9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuaW5kZXggNmRhMzEwMmI3YzFiMy4uZTBmZGI0M2Q3ZDNkZiAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jXG4rKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY1xuQEAgLTQ4LDcgKzQ4LDcgQEAgdm9pZCBuZl9kdXBfaXB2NihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxuIFx0XHQgY29uc3Qgc3RydWN0IGluNl9hZGRyICpndywgaW50IG9pZilcbiB7XG4gXHRsb2NhbF9iaF9kaXNhYmxlKCk7XG4tXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUpXG4rXHRpZiAoY3VycmVudC1cdTAwM2Vpbl9uZl9kdXBsaWNhdGUgfHwgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQpXG4gXHRcdGdvdG8gb3V0O1xuIFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoc2tiID09IE5VTEwpXG5AQCAtNjQsNiArNjQsNyBAQCB2b2lkIG5mX2R1cF9pcHY2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhvb2tudW0sXG4gXHRcdC0taXBoLVx1MDAzZWhvcF9saW1pdDtcbiBcdH1cbiBcdGlmIChuZl9kdXBfaXB2Nl9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcbitcdFx0c2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSAxO1xuIFx0XHRjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XG4gXHRcdGlwNl9sb2NhbF9vdXQobmV0LCBza2ItXHUwMDNlc2ssIHNrYik7XG4gXHRcdGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlID0gZmFsc2U7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDoxNC4zNTc0NTk0NDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODc2NzkwMzk5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgd2UgaGF2ZSBhbnkgS01TQU4gY29uY2VybnMgd2l0aCB0aGVzZSBjaGFuZ2VzLiBUaGUgY29yZSBvZiBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IHdlJ3JlIGFkZGluZyB0aGUgYG5mX2R1cGxpY2F0ZWQ6MWAgYml0ZmllbGQgdG8gdGhlIGBzdHJ1Y3Qgc2tfYnVmZmAgYW5kIHRoZW4gY29weWluZyBpdHMgdmFsdWUgaW4gYG5mX2NvcHlgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHdlIGludHJvZHVjaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyB3aXRoIHRoaXM/XG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHN0cnVjdCBza19idWZmYCBpcyAqYWN0dWFsbHkqIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIFRoaXMgaXMgdGhlIGtleS4gQXJlIHdlIHVzaW5nIGBrbWVtX2NhY2hlYCwgYXJlIHdlIHJlbHlpbmcgb24gYG1lbXNldGAgYXQgYW55IHBvaW50LCBvciBpcyB0aGVyZSBhbm90aGVyIGluaXRpYWxpemF0aW9uIG1lY2hhbmlzbSBhdCBwbGF5PyBUaGF0J3Mgd2hhdCBJJ20gbG9va2luZyBmb3IuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyB0aGVzZSBiaXRmaWVsZHMgYXJlIGhhbmRsZWQgZHVyaW5nIGFsbG9jYXRpb24uXG5cblRvIGRvIHRoaXMsIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGBuZXQvY29yZS9za2J1ZmYuY2AgYW5kIGh1bnQgZG93biB0aGUgYWxsb2NhdG9ycywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGBfX2FsbG9jX3NrYmAuIExldCdzIHNlZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyBhbGxvY2F0aW9uIHBhdGhzIG9yIG1vZGlmaWVzIGV4aXN0aW5nIG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBhbGxvY2F0aW9uIGNvZGUgaXMgZXhwbGljaXRseSBpbml0aWFsaXppbmcgdGhpcyBuZXcgYml0ZmllbGQsIG9yIGlmIGl0IG1pZ2h0IGJlIGxlZnQgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZS4gV2UgYWxzbyBuZWVkIHRvIGNvbnNpZGVyIG90aGVyIG1ldGhvZHMsIHN1Y2ggYXMgYGttZW1fY2FjaGVgIGFuZCBgbWVtc2V0YC5cblxuSSdsbCB1c2UgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGVmZmljaWVudGx5IGNvbWIgdGhyb3VnaCB0aGUgY29kZS4gSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGUgYWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gcHJvY2VzcyBmb3IgYHN0cnVjdCBza19idWZmYCwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgcGxhY2Ugd2hlcmUgd2UgY291bGQgcG90ZW50aWFsbHkgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgaWYgS01TQU4gaXMgbmVjZXNzYXJ5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MjMuMTI1MzY3MDIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDY2MDQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2FsbG9jX3NrYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9za2J1ZmYuYz02MDY9c3RhdGljIHZvaWQgKmttYWxsb2NfcmVzZXJ2ZSh1bnNpZ25lZCBpbnQgKnNpemUsIGdmcF90IGZsYWdzLCBpbnQgbm9kZSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY1Ny0vKipcXG5uZXQvY29yZS9za2J1ZmYuYzo2NTg6ICpcXHRfX2FsbG9jX3NrYlxcdC1cXHRhbGxvY2F0ZSBhIG5ldHdvcmsgYnVmZmVyXFxubmV0L2NvcmUvc2tidWZmLmMtNjU5LSAqXFx0QHNpemU6IHNpemUgdG8gYWxsb2NhdGVcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTY3My0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYzo2NzQ6c3RydWN0IHNrX2J1ZmYgKl9fYWxsb2Nfc2tiKHVuc2lnbmVkIGludCBzaXplLCBnZnBfdCBnZnBfbWFzayxcXG5uZXQvY29yZS9za2J1ZmYuYy02NzUtXFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy03NDUtfVxcbm5ldC9jb3JlL3NrYnVmZi5jOjc0NjpFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy03NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz03NjE9c3RydWN0IHNrX2J1ZmYgKl9fbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzc2LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo3Nzc6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYLCBOVU1BX05PX05PREUpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTc3OC1cXHRcXHRpZiAoIXNrYilcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTgzOD1zdHJ1Y3Qgc2tfYnVmZiAqbmFwaV9hbGxvY19za2Ioc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCB1bnNpZ25lZCBpbnQgbGVuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtODU0LVxcdCAgICAoZ2ZwX21hc2sgXFx1MDAyNiAoX19HRlBfRElSRUNUX1JFQ0xBSU0gfCBHRlBfRE1BKSkpIHtcXG5uZXQvY29yZS9za2J1ZmYuYzo4NTU6XFx0XFx0c2tiID0gX19hbGxvY19za2IobGVuLCBnZnBfbWFzaywgU0tCX0FMTE9DX1JYIHwgU0tCX0FMTE9DX05BUEksXFxubmV0L2NvcmUvc2tidWZmLmMtODU2LVxcdFxcdFxcdFxcdCAgTlVNQV9OT19OT0RFKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxODA9c3RydWN0IHNrX2J1ZmYgKnNrYl9jb3B5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5My1cXHRzaXplID0gc2tiX2VuZF9vZmZzZXQoc2tiKSArIHNrYi1cXHUwMDNlZGF0YV9sZW47XFxubmV0L2NvcmUvc2tidWZmLmM6MjE5NDpcXHRuID0gX19hbGxvY19za2Ioc2l6ZSwgZ2ZwX21hc2ssXFxubmV0L2NvcmUvc2tidWZmLmMtMjE5NS1cXHRcXHRcXHRza2JfYWxsb2NfcnhfZmxhZyhza2IpLCBOVU1BX05PX05PREUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjIyOD1zdHJ1Y3Qgc2tfYnVmZiAqX19wc2tiX2NvcHlfZmNsb25lKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZWFkcm9vbSxcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTIyMzItXFx0aW50IGZsYWdzID0gc2tiX2FsbG9jX3J4X2ZsYWcoc2tiKSB8IChmY2xvbmUgPyBTS0JfQUxMT0NfRkNMT05FIDogMCk7XFxubmV0L2NvcmUvc2tidWZmLmM6MjIzMzpcXHRzdHJ1Y3Qgc2tfYnVmZiAqbiA9IF9fYWxsb2Nfc2tiKHNpemUsIGdmcF9tYXNrLCBmbGFncywgTlVNQV9OT19OT0RFKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMjM0LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9MjUwNT1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHlfZXhwYW5kKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0yNTIyLVxcdG9sZGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6MjUyMzpcXHRuID0gX19hbGxvY19za2IobmV3aGVhZHJvb20gKyBza2ItXFx1MDAzZWxlbiArIG5ld3RhaWxyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTI1MjQtXFx0XFx0XFx0Z2ZwX21hc2ssIHNrYl9hbGxvY19yeF9mbGFnKHNrYiksXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00NzkwPXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTU4LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NTk6XFx0XFx0XFx0bnNrYiA9IF9fYWxsb2Nfc2tiKGhzaXplICsgZG9mZnNldCArIGhlYWRyb29tLFxcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NjAtXFx0XFx0XFx0XFx0XFx0ICAgR0ZQX0FUT01JQywgc2tiX2FsbG9jX3J4X2ZsYWcoaGVhZF9za2IpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDoyMy4xOTAwMzE5MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDQ2OTQzMDQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIFNLQiBBbGxvY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoZXNlIHNvY2tldCBidWZmZXJzIGFyZSBhY3R1YWxseSBhbGxvY2F0ZWQuIEZpcnN0LCBJJ20gZ29pbmcgdG8gcHVsbCB1cCBgX19hbGxvY19za2JgIGluIGBuZXQvY29yZS9za2J1ZmYuY2AuIEkgd2FudCB0byBzZWUgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBpbml0aWFsIGFsbG9jYXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIHNldHVwLiBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhlIGRldGFpbHMgdGhhdCBtaWdodCBpbXBhY3QgcGVyZm9ybWFuY2UgYW5kIGhvdyByZXNvdXJjZXMgYXJlIG1hbmFnZWQsIG1heWJlIGV4YW1pbmluZyBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBzbGFiIGFsbG9jYXRvciBvciBzcGVjaWZpYyBOVU1BIGNvbnNpZGVyYXRpb25zLiBUaGVuLCBJ4oCZbGwgY3Jvc3MtcmVmZXJlbmNlIHRoYXQgd2l0aCB0aGUgYHNrX2J1ZmZgIGRlZmluaXRpb24gaXRzZWxmLCBmb3VuZCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAuIFRoaXMgd2lsbCBhbGxvdyBtZSB0byB0aWUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyB0byB0aGUgYnVmZmVyIHN0cnVjdHVyZSBpdHNlbGYg4oCTIHdoYXQgYXJlIHRoZSBjb3JlIGZpZWxkcyB0aGF0IGFyZSBpbml0aWFsaXplZCwgd2hhdCdzIHRoZSBtZW1vcnkgbGF5b3V0LCBhbmQgaG93IGRvZXMgdGhlIGNvZGUgbWFwIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIHRoZSBzdHJ1Y3R1cmU/IEnigJltIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIOKAkyB0aGUgbWVjaGFuaWNzIG9mIHRoZSBhbGxvY2F0aW9uIGNvbWJpbmVkIHdpdGggdGhlIHN0cnVjdHVyZSdzIGRlc2lnbiDigJMgdG8gcGlucG9pbnQgYXJlYXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBhbnkgZGVlcGVyIGludmVzdGlnYXRpb24gaW50byBuZXR3b3JrIHBlcmZvcm1hbmNlIG9yIHBvdGVudGlhbCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgcmVsYXRlZCB0byBTS0JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzYwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MjcuNjU5NDY2MTc3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0ICpcXG4gNjcxOlxcdCAqXFx0QnVmZmVycyBtYXkgb25seSBiZSBhbGxvY2F0ZWQgZnJvbSBpbnRlcnJ1cHRzIHVzaW5nIGEgQGdmcF9tYXNrIG9mXFxuIDY3MjpcXHQgKlxcdCVHRlBfQVRPTUlDLlxcbiA2NzM6XFx0ICovXFxuIDY3NDpcXHRzdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbiA2NzU6XFx0XFx0XFx0XFx0ICAgIGludCBmbGFncywgaW50IG5vZGUpXFxuIDY3NjpcXHR7XFxuIDY3NzpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDtcXG4gNjc4OlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZTtcXG4gNjc5OlxcdFxcdHU4ICpkYXRhO1xcbiA2ODA6XFx0XFxuIDY4MTpcXHRcXHRpZiAoc2tfbWVtYWxsb2Nfc29ja3MoKSBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBTS0JfQUxMT0NfUlgpKVxcbiA2ODI6XFx0XFx0XFx0Z2ZwX21hc2sgfD0gX19HRlBfTUVNQUxMT0M7XFxuIDY4MzpcXHRcXG4gNjg0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNjg1OlxcdFxcdFxcdGNhY2hlID0gbmV0X2hvdGRhdGEuc2tidWZmX2ZjbG9uZV9jYWNoZTtcXG4gNjg2OlxcdFxcdFxcdGdvdG8gZmFsbGJhY2s7XFxuIDY4NzpcXHRcXHR9XFxuIDY4ODpcXHRcXHRjYWNoZSA9IG5ldF9ob3RkYXRhLnNrYnVmZl9jYWNoZTtcXG4gNjg5OlxcdFxcdGlmICh1bmxpa2VseShub2RlICE9IE5VTUFfTk9fTk9ERSBcXHUwMDI2XFx1MDAyNiBub2RlICE9IG51bWFfbWVtX2lkKCkpKVxcbiA2OTA6XFx0XFx0XFx0Z290byBmYWxsYmFjaztcXG4gNjkxOlxcdFxcbiA2OTI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU0tCX0FMTE9DX05BUEkpIHtcXG4gNjkzOlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldCh0cnVlKTtcXG4gNjk0OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNjk1OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTY6XFx0XFx0fSBlbHNlIGlmICghaW5faGFyZGlycSgpIFxcdTAwMjZcXHUwMDI2ICFpcnFzX2Rpc2FibGVkKCkpIHtcXG4gNjk3OlxcdFxcdFxcdGxvY2FsX2JoX2Rpc2FibGUoKTtcXG4gNjk4OlxcdFxcdFxcdHNrYiA9IG5hcGlfc2tiX2NhY2hlX2dldChmYWxzZSk7XFxuIDY5OTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG4gNzAwOlxcdFxcdH1cXG4gNzAxOlxcdFxcbiA3MDI6XFx0XFx0aWYgKCFza2IpIHtcXG4gNzAzOlxcdGZhbGxiYWNrOlxcbiA3MDQ6XFx0XFx0XFx0c2tiID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNhY2hlLCBnZnBfbWFzayBcXHUwMDI2IH5HRlBfRE1BLCBub2RlKTtcXG4gNzA1OlxcdFxcdFxcdGlmICh1bmxpa2VseSghc2tiKSlcXG4gNzA2OlxcdFxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA3MDc6XFx0XFx0fVxcbiA3MDg6XFx0XFx0c2tidWZmX2NsZWFyKHNrYik7XFxuIDcwOTpcXHRcXG4gNzEwOlxcdFxcdC8qIFdlIGRvIG91ciBiZXN0IHRvIGFsaWduIHNrYl9zaGFyZWRfaW5mbyBvbiBhIHNlcGFyYXRlIGNhY2hlXFxuIDcxMTpcXHRcXHQgKiBsaW5lLiBJdCB1c3VhbGx5IHdvcmtzIGJlY2F1c2Uga21hbGxvYyhYIFxcdTAwM2UgU01QX0NBQ0hFX0JZVEVTKSBnaXZlc1xcbiA3MTI6XFx0XFx0ICogYWxpZ25lZCBtZW1vcnkgYmxvY2tzLCB1bmxlc3MgU0xVQi9TTEFCIGRlYnVnIGlzIGVuYWJsZWQuXFxuIDcxMzpcXHRcXHQgKiBCb3RoIHNrYi1cXHUwMDNlaGVhZCBhbmQgc2tiX3NoYXJlZF9pbmZvIGFyZSBjYWNoZSBsaW5lIGFsaWduZWQuXFxuIDcxNDpcXHRcXHQgKi9cXG4gNzE1OlxcdFxcdGRhdGEgPSBrbWFsbG9jX3Jlc2VydmUoXFx1MDAyNnNpemUsIGdmcF9tYXNrLCBub2RlLCBza2IpO1xcbiA3MTY6XFx0XFx0aWYgKHVubGlrZWx5KCFkYXRhKSlcXG4gNzE3OlxcdFxcdFxcdGdvdG8gbm9kYXRhO1xcbiA3MTg6XFx0XFx0Lyoga21hbGxvY19zaXplX3JvdW5kdXAoKSBtaWdodCBnaXZlIHVzIG1vcmUgcm9vbSB0aGFuIHJlcXVlc3RlZC5cXG4gNzE5OlxcdFxcdCAqIFB1dCBza2Jfc2hhcmVkX2luZm8gZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFsbG9jYXRlZCB6b25lLFxcbiA3MjA6XFx0XFx0ICogdG8gYWxsb3cgbWF4IHBvc3NpYmxlIGZpbGxpbmcgYmVmb3JlIHJlYWxsb2NhdGlvbi5cXG4gNzIxOlxcdFxcdCAqL1xcbiA3MjI6XFx0XFx0X19maW5hbGl6ZV9za2JfYXJvdW5kKHNrYiwgZGF0YSwgc2l6ZSk7XFxuIDcyMzpcXHRcXG4gNzI0OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IFNLQl9BTExPQ19GQ0xPTkUpIHtcXG4gNzI1OlxcdFxcdFxcdHN0cnVjdCBza19idWZmX2ZjbG9uZXMgKmZjbG9uZXM7XFxuIDcyNjpcXHRcXG4gNzI3OlxcdFxcdFxcdGZjbG9uZXMgPSBjb250YWluZXJfb2Yoc2tiLCBzdHJ1Y3Qgc2tfYnVmZl9mY2xvbmVzLCBza2IxKTtcXG4gNzI4OlxcdFxcbiA3Mjk6XFx0XFx0XFx0Lyogc2tiLVxcdTAwM2VmY2xvbmUgaXMgYSAyYml0cyBmaWVsZC5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6MjcuNjYwMjk3MDk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzOTIyODA3NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYHNrYnVmZl9jbGVhcmAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRoZSBwcm9ibGVtIGxpa2VseSByZWxhdGVzIHRvIHRoZSBrZXJuZWwncyBoYW5kbGluZyBvZiBTS0JzIChTb2NrZXQgQnVmZmVycyksIGFuZCBgc2tidWZmX2NsZWFyYCBpcyBhIGtleSBmdW5jdGlvbiBpbiB0aGF0IHByb2Nlc3MuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZXhhY3QgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc2VlLi4uSSB0aGluayBJIHJlbWVtYmVyIGl0IGJlaW5nIGRlZmluZWQgZWl0aGVyIGluIHRoZSBtYWluIGBza2J1ZmYuaGAgaGVhZGVyIGZpbGUsIHdoaWNoIGlzIHVzdWFsbHkgZm91bmQgdW5kZXIgYGluY2x1ZGUvbGludXhgLCBvciBwZXJoYXBzIGluIHRoZSBjb3JlIG5ldHdvcmsgY29kZSwgbGlrZWx5IHVuZGVyIGBuZXQvY29yZWAgd2l0aGluIGBza2J1ZmYuY2AuIEl0J3MgYSBmdW5kYW1lbnRhbCBvcGVyYXRpb24sIHNvIGl0J3MgcHJvYmFibHkgZGVjbGFyZWQgKmFuZCogZGVmaW5lZCBpbiBvbmUgb2YgdGhvc2UgdHdvIGxvY2F0aW9ucy4gSSdtIGxlYW5pbmcgdG93YXJkIHRoZSBzb3VyY2UgZmlsZS4gTGV0IG1lIGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIG9uIGl0cyB1c2FnZSBhbHNvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDozMi4wNTI1ODAzNzRaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTE2MDIyOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2tidWZmX2NsZWFyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2tidWZmLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjMyLjE2Mzc0ODkwMloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjEwODM5NTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDpcblxuKipGaW5kaW5nIGBza2J1ZmZfY2xlYXJgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGZ1bmN0aW9uIGBza2J1ZmZfY2xlYXJgLiBJJ20gZ3Vlc3NpbmcgaXQncyBhIHByZXR0eSBmdW5kYW1lbnRhbCBvcGVyYXRpb24gcmVsYXRlZCB0byBgc2tfYnVmZnNgLCBzbyBpdCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGxvY2F0ZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGNvcmUgbmV0d29ya2luZyBoZWFkZXJzLCBwcm9iYWJseSB3aXRoaW4gdGhlIGBpbmNsdWRlL2xpbnV4L2AgZGlyZWN0b3J5LCBzcGVjaWZpY2FsbHkgYW55dGhpbmcgcmVsYXRlZCB0byBgc2tidWZmLmhgIG9yLCBwb3RlbnRpYWxseSwgbG93ZXItbGV2ZWwgYnVmZmVyIG1hbmFnZW1lbnQuIEkga25vdyBrZXJuZWwgZG9jdW1lbnRhdGlvbiwgd2hpbGUgbm90IGFsd2F5cyBleGhhdXN0aXZlLCBvZnRlbiBpbmNsdWRlcyBmdW5jdGlvbiBkZXNjcmlwdGlvbnMsIHNvIEknbGwgYWxzbyBjaGVjayB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gaWYgSSBoYXZlIHF1aWNrIGFjY2VzcyB0byBpdCAoZS5nLiB0aHJvdWdoIGEgYnVpbHQgaW4gaGVscCBzeXN0ZW0pLiBJZiBJJ20gbHVja3ksIEkgbWlnaHQgZXZlbiBiZSBhYmxlIHRvIGdyZXAgdGhyb3VnaCB0aGUga2VybmVsIHNvdXJjZSB0cmVlIGRpcmVjdGx5LiBLbm93aW5nIHRoZSBmdW5jdGlvbidzIG5hbWUgY2FuIG9mdGVuIGd1aWRlIG1lIHByZXR0eSBlZmZpY2llbnRseSwgZXNwZWNpYWxseSBpZiB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGFyZSBjb25zaXN0ZW50LCB3aGljaCBpcyB0eXBpY2FsIGluIGtlcm5lbCBjb2RlLiBJJ2xsIHN0YXJ0IHRoZXJlIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kLiBJZiBpdCdzIHVzZWQgaW4gYW55IG9idmlvdXMgcGxhY2VzLCB0aGUgaW5jbHVkZSBkaXJlY3RvcmllcyBzaG91bGQgdGVsbCBtZSB3aGVyZSB0aGUgZGVmaW5pdGlvbiBpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6NjM0OCwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjM1LjM3NDU5MDYwOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNTU3OTMwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2J1ZmZfY2xlYXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvc2tidWZmLmM9Mjg0PXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKm5hcGlfc2tiX2NhY2hlX2dldChib29sIGFsbG9jKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzE1LSAqL1xcbm5ldC9jb3JlL3NrYnVmZi5jOjMxNjpzdGF0aWMgaW5saW5lIHZvaWQgc2tidWZmX2NsZWFyKHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2NvcmUvc2tidWZmLmMtMzE3LXtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTM0ND11MzIgbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsodm9pZCAqKnNrYnMsIHUzMiBuKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMzc5LVxcdFxcdGthc2FuX21lbXBvb2xfdW5wb2lzb25fb2JqZWN0KHNrYnNbaV0sIHNrYnVmZl9jYWNoZV9zaXplKTtcXG5uZXQvY29yZS9za2J1ZmYuYzozODA6XFx0XFx0c2tidWZmX2NsZWFyKHNrYnNbaV0pO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTM4MS1cXHR9XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00Mzc9c3RydWN0IHNrX2J1ZmYgKnNsYWJfYnVpbGRfc2tiKHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00NDYtXFxubmV0L2NvcmUvc2tidWZmLmM6NDQ3OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ0OC1cXHRkYXRhID0gX19zbGFiX2J1aWxkX3NrYihkYXRhLCBcXHUwMDI2c2l6ZSk7XFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00OTA9c3RydWN0IHNrX2J1ZmYgKl9fYnVpbGRfc2tiKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBmcmFnX3NpemUpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTgtXFxubmV0L2NvcmUvc2tidWZmLmM6NDk5OlxcdHNrYnVmZl9jbGVhcihza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTUwMC1cXHRfX2J1aWxkX3NrYl9hcm91bmQoc2tiLCBkYXRhLCBmcmFnX3NpemUpO1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NTUyPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19uYXBpX2J1aWxkX3NrYih2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgZnJhZ19zaXplKVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNTU5LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjU2MDpcXHRza2J1ZmZfY2xlYXIoc2tiKTtcXG5uZXQvY29yZS9za2J1ZmYuYy01NjEtXFx0X19idWlsZF9za2JfYXJvdW5kKHNrYiwgZGF0YSwgZnJhZ19zaXplKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTY3ND1zdHJ1Y3Qgc2tfYnVmZiAqX19hbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNzA3LVxcdH1cXG5uZXQvY29yZS9za2J1ZmYuYzo3MDg6XFx0c2tidWZmX2NsZWFyKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtNzA5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDozNy4zODAxNzYxMTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNTUyNzQ5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgc2tidWZmX2NsZWFyYCoqXG5cbkFscmlnaHQsIGxldCdzIGNyYWNrIG9wZW4gdGhlIGBuZXQvY29yZS9za2J1ZmYuY2AgZmlsZSBhbmQgemVybyBpbiBvbiB0aGUgYHNrYnVmZl9jbGVhcmAgZnVuY3Rpb24uIEkgd2FudCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW50cmljYWNpZXMgb2YgaG93IHRoZSBzb2NrZXQgYnVmZmVyIGlzIGNsZWFuZWQgdXAuIFdl4oCZcmUgZGVhbGluZyB3aXRoIGEgZnVuZGFtZW50YWwgb3BlcmF0aW9uIGhlcmUsIGFuZCBJIG5lZWQgYSBwcmVjaXNlIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGltcGFjdCBvbiBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIG92ZXJhbGwgbGlmZWN5Y2xlIG9mIGEgcGFja2V0IHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdGFjay4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGNvdmVyIHRoZSBrZXkgYXNwZWN0czogZnJlZWluZyB0aGUgZGF0YSwgcG90ZW50aWFsbHkgcmVsZWFzaW5nIHJlZmVyZW5jZXMsIGFuZCBwZXJoYXBzIHNvbWUgemVyb2luZyBvciBzY3J1YmJpbmcgb2Ygc2Vuc2l0aXZlIGFyZWFzLCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCBzZWN1cml0eSBjb25zaWRlcmF0aW9ucy4gSXQncyBjcnVjaWFsIHRvIHRyYWNlIHRoaXMgZnVuY3Rpb24gYXMgaXQgc2l0cyBpbiB0aGUgYnJvYWRlciBlY29zeXN0ZW0gdG8gZ2FpbiBhIGZ1bGwgcGVyc3BlY3RpdmUuIEknbSBrZWVuIHRvIHNwb3QgYW55IGVkZ2UgY2FzZXMgb3Igb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjU4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NDEuNTg1NzA1ODU2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvY29yZS9za2J1ZmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTA6XFx0XFxuIDMxMTpcXHQvKlxcbiAzMTI6XFx0ICogT25seSBjbGVhciB0aG9zZSBmaWVsZHMgd2UgbmVlZCB0byBjbGVhciwgbm90IHRob3NlIHRoYXQgd2Ugd2lsbFxcbiAzMTM6XFx0ICogYWN0dWFsbHkgaW5pdGlhbGlzZSBsYXRlci4gSGVuY2UsIGRvbid0IHB1dCBhbnkgbW9yZSBmaWVsZHMgYWZ0ZXJcXG4gMzE0OlxcdCAqIHRoZSB0YWlsIHBvaW50ZXIgaW4gc3RydWN0IHNrX2J1ZmYhXFxuIDMxNTpcXHQgKi9cXG4gMzE2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBza2J1ZmZfY2xlYXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gMzE3OlxcdHtcXG4gMzE4OlxcdFxcdC8qIFJlcGxhY2UgbWVtc2V0KHNrYiwgMCwgb2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIHRhaWwpKVxcbiAzMTk6XFx0XFx0ICogd2l0aCB0d28gc21hbGxlciBtZW1zZXQoKSwgd2l0aCBhIGJhcnJpZXIoKSBiZXR3ZWVuIHRoZW0uXFxuIDMyMDpcXHRcXHQgKiBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gaW5saW5lIGJvdGggY2FsbHMuXFxuIDMyMTpcXHRcXHQgKi9cXG4gMzIyOlxcdFxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgdGFpbCkgXFx1MDAzYz0gMTI4KTtcXG4gMzIzOlxcdFxcdG1lbXNldChza2IsIDAsIDEyOCk7XFxuIDMyNDpcXHRcXHRiYXJyaWVyKCk7XFxuIDMyNTpcXHRcXHRtZW1zZXQoKHZvaWQgKilza2IgKyAxMjgsIDAsIG9mZnNldG9mKHN0cnVjdCBza19idWZmLCB0YWlsKSAtIDEyOCk7XFxuIDMyNjpcXHR9XFxuIDMyNzpcXHRcXG4gMzI4OlxcdC8qKlxcbiAzMjk6XFx0ICogbmFwaV9za2JfY2FjaGVfZ2V0X2J1bGsgLSBvYnRhaW4gYSBudW1iZXIgb2YgemVyb2VkIHNrYiBoZWFkcyBmcm9tIHRoZSBjYWNoZVxcbiAzMzA6XFx0ICogQHNrYnM6IHBvaW50ZXIgdG8gYW4gYXQgbGVhc3QgQG4tc2l6ZWQgYXJyYXkgdG8gZmlsbCB3aXRoIHNrYiBwb2ludGVyc1xcbiAzMzE6XFx0ICogQG46IG51bWJlciBvZiBlbnRyaWVzIHRvIHByb3ZpZGVcXG4gMzMyOlxcdCAqXFxuIDMzMzpcXHQgKiBUcmllcyB0byBvYnRhaW4gQG4gXFx1MDAyNnNrX2J1ZmYgZW50cmllcyBmcm9tIHRoZSBOQVBJIHBlcmNwdSBjYWNoZSBhbmQgd3JpdGVzXFxuIDMzNDpcXHQgKiB0aGUgcG9pbnRlcnMgaW50byB0aGUgcHJvdmlkZWQgYXJyYXkgQHNrYnMuIElmIHRoZXJlIGFyZSBsZXNzIGVudHJpZXNcXG4gMzM1OlxcdCAqIGF2YWlsYWJsZSwgdHJpZXMgdG8gcmVwbGVuaXNoIHRoZSBjYWNoZSBhbmQgYnVsay1hbGxvY2F0ZXMgdGhlIGRpZmYgZnJvbVxcbiAzMzY6XFx0ICogdGhlIE1NIGxheWVyIGlmIG5lZWRlZC5cXG4gMzM3OlxcdCAqIFRoZSBoZWFkcyBhcmUgYmVpbmcgemVyb2VkIHdpdGggZWl0aGVyIG1lbXNldCgpIG9yICVfX0dGUF9aRVJPLCBzbyB0aGV5IGFyZVxcbiAzMzg6XFx0ICogcmVhZHkgZm9yIHssX199YnVpbGRfc2tiX2Fyb3VuZCgpIGFuZCBkb24ndCBoYXZlIGFueSBkYXRhIGJ1ZmZlcnMgYXR0YWNoZWQuXFxuIDMzOTpcXHQgKiBNdXN0IGJlIGNhbGxlZCAqb25seSogZnJvbSB0aGUgQkggY29udGV4dC5cXG4gMzQwOlxcdCAqXFxuIDM0MTpcXHQgKiBSZXR1cm46IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgYWxsb2NhdGVkIHNrYnMgKEBuIGlmIG5vIGFjdHVhbCBhbGxvY2F0aW9uXFxuIDM0MjpcXHQgKlxcdCAgIG5lZWRlZCBvciBrbWVtX2NhY2hlX2FsbG9jX2J1bGsoKSBkaWRuJ3QgZmFpbCkuXFxuIDM0MzpcXHQgKi9cXG4gMzQ0OlxcdHUzMiBuYXBpX3NrYl9jYWNoZV9nZXRfYnVsayh2b2lkICoqc2ticywgdTMyIG4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjQxLjU4NTk0MzA2NloiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDcyNjcyMjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgc2tfYnVmZiBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gc29tZXRoaW5nIHNwZWNpZmljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtb3J5IGxheW91dCB3aXRoaW4gdGhlIGBza19idWZmYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBwb3NpdGlvbmluZyBvZiB0aGUgYG5mX2R1cGxpY2F0ZWRgIGZpZWxkIGluIHJlbGF0aW9uIHRvIHRoZSBgdGFpbGAgcG9pbnRlci4gVW5kZXJzdGFuZGluZyB0aGlzIGlzIGNydWNpYWwgZm9yIFsqKmluc2VydCByZWxldmFudCByZWFzb24gcmVsYXRlZCB0byB0aGUgdXNlcidzIGZpZWxkLCBlLmcuLCBvcHRpbWl6aW5nIHBhY2tldCBkdXBsaWNhdGlvbiBsb2dpYywgZGVidWdnaW5nIGEgcGVyZm9ybWFuY2UgaXNzdWUsIGFuYWx5emluZyBtZW1vcnkgY29ycnVwdGlvbiB2dWxuZXJhYmlsaXRpZXMsIGV0Yy4qKl0uXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgY29kZS4gSSdsbCBvcGVuIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCBhbmQgdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMTAyMy4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgZmllbGRzIGFyZSBkZWZpbmVkIG5lYXJieSwgYW5kIEkgY2FuIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBvZmZzZXQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgd2lsbCBbKippbnNlcnQgZXhwZWN0YXRpb24gcmVsYXRlZCB0byB0aGUgdXNlcidzIGZpZWxkLCBlLmcuLCBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRhdGEgc3RydWN0dXJlLCByZXZlYWwgYSBwb3RlbnRpYWwgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LCB1bmNvdmVyIGEgc3VidGxlIG1lbW9yeSBhbGlnbm1lbnQgaXNzdWUsIGV0Yy4qKl0uIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NDguNjU4NjIwMjA4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NTk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMTA6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1ZTKVxcbjEwMTE6XFx0XFx0X191OFxcdFxcdFxcdGlwdnNfcHJvcGVydHk6MTtcXG4xMDEyOlxcdCNlbmRpZlxcbjEwMTM6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX1RBQkxFUylcXG4xMDE0OlxcdFxcdF9fdThcXHRcXHRcXHRuZl90cmFjZToxO1xcbjEwMTU6XFx0I2VuZGlmXFxuMTAxNjpcXHQjaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVZcXG4xMDE3OlxcdFxcdF9fdThcXHRcXHRcXHRvZmZsb2FkX2Z3ZF9tYXJrOjE7XFxuMTAxODpcXHRcXHRfX3U4XFx0XFx0XFx0b2ZmbG9hZF9sM19md2RfbWFyazoxO1xcbjEwMTk6XFx0I2VuZGlmXFxuMTAyMDpcXHRcXHRfX3U4XFx0XFx0XFx0cmVkaXJlY3RlZDoxO1xcbjEwMjE6XFx0I2lmZGVmIENPTkZJR19ORVRfUkVESVJFQ1RcXG4xMDIyOlxcdFxcdF9fdThcXHRcXHRcXHRmcm9tX2luZ3Jlc3M6MTtcXG4xMDIzOlxcdCNlbmRpZlxcbjEwMjQ6XFx0I2lmZGVmIENPTkZJR19ORVRGSUxURVJfU0tJUF9FR1JFU1NcXG4xMDI1OlxcdFxcdF9fdThcXHRcXHRcXHRuZl9za2lwX2VncmVzczoxO1xcbjEwMjY6XFx0I2VuZGlmXFxuMTAyNzpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxcbjEwMjg6XFx0XFx0X191OFxcdFxcdFxcdG5mX2R1cGxpY2F0ZWQ6MTtcXG4xMDI5OlxcdCNlbmRpZlxcbjEwMzA6XFx0I2lmZGVmIENPTkZJR19TS0JfREVDUllQVEVEXFxuMTAzMTpcXHRcXHRfX3U4XFx0XFx0XFx0ZGVjcnlwdGVkOjE7XFxuMTAzMjpcXHQjZW5kaWZcXG4xMDMzOlxcdFxcdF9fdThcXHRcXHRcXHRzbG93X2dybzoxO1xcbjEwMzQ6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lQX1NDVFApXFxuMTAzNTpcXHRcXHRfX3U4XFx0XFx0XFx0Y3N1bV9ub3RfaW5ldDoxO1xcbjEwMzY6XFx0I2VuZGlmXFxuMTAzNzpcXHRcXHRfX3U4XFx0XFx0XFx0dW5yZWFkYWJsZToxO1xcbjEwMzg6XFx0XFx0X191OFxcdFxcdFxcdHRjX2RlcHRoOjI7XFxuMTAzOTpcXHQjaWYgZGVmaW5lZChDT05GSUdfTkVUX1NDSEVEKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfWEdSRVNTKVxcbjEwNDA6XFx0XFx0X191MTZcXHRcXHRcXHR0Y19pbmRleDtcXHQvKiB0cmFmZmljIGNvbnRyb2wgaW5kZXggKi9cXG4xMDQxOlxcdCNlbmRpZlxcbjEwNDI6XFx0XFxuMTA0MzpcXHRcXHR1MTZcXHRcXHRcXHRhbGxvY19jcHU7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdHVuaW9uIHtcXG4xMDQ2OlxcdFxcdFxcdF9fd3N1bVxcdFxcdGNzdW07XFxuMTA0NzpcXHRcXHRcXHRzdHJ1Y3Qge1xcbjEwNDg6XFx0XFx0XFx0XFx0X191MTZcXHRjc3VtX3N0YXJ0O1xcbjEwNDk6XFx0XFx0XFx0XFx0X191MTZcXHRjc3VtX29mZnNldDtcXG4xMDUwOlxcdFxcdFxcdH07XFxuMTA1MTpcXHRcXHR9O1xcbjEwNTI6XFx0XFx0X191MzJcXHRcXHRcXHRwcmlvcml0eTtcXG4xMDUzOlxcdFxcdGludFxcdFxcdFxcdHNrYl9paWY7XFxuMTA1NDpcXHRcXHRfX3UzMlxcdFxcdFxcdGhhc2g7XFxuMTA1NTpcXHRcXHR1bmlvbiB7XFxuMTA1NjpcXHRcXHRcXHR1MzJcXHRcXHR2bGFuX2FsbDtcXG4xMDU3OlxcdFxcdFxcdHN0cnVjdCB7XFxuMTA1ODpcXHRcXHRcXHRcXHRfX2JlMTZcXHR2bGFuX3Byb3RvO1xcbjEwNTk6XFx0XFx0XFx0XFx0X191MTZcXHR2bGFuX3RjaTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NDguNjU4ODg4NDc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTQ3MzUxMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIGF1ZGllbmNlIGlzIGFuIGV4cGVydDpcblxuKipGaW5kaW5nIHRoZSBUYWlsIGluIHRoZSBza19idWZmIFN0cnVjdHVyZSoqXG5cbkFscmlnaHQsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBgdGFpbGAgbWVtYmVyIHdpdGhpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdHVyZS4gSXQncyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgaG93IHRoZSBMaW51eCBuZXR3b3JraW5nIHN0YWNrIGhhbmRsZXMgcGFja2V0IGRhdGEuIEknbSByZWFzb25hYmx5IGNvbmZpZGVudCBpdCdzICp0aGVyZSosIGJ1dCBJIG5lZWQgdG8gcGlucG9pbnQgaXRzIGV4YWN0IGxvY2F0aW9uIGFuZCBob3cgaXQncyBkZWZpbmVkLiBNeSBmaXJzdCBpbnN0aW5jdCwgb2YgY291cnNlLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIHNvdXJjZSBjb2RlIOKAkyBzcGVjaWZpY2FsbHksIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC4gVGhhdCdzIHdoZXJlIGFsbCB0aGUgZnVuZGFtZW50YWwgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byBgc2tfYnVmZmAgc2hvdWxkIHJlc2lkZS4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI0MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDQ6NTAuODEzNjI3OTEyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0XFx0XFx0fTtcXG4xMDYxOlxcdFxcdH07XFxuMTA2MjpcXHQjaWYgZGVmaW5lZChDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCkgfHwgZGVmaW5lZChDT05GSUdfWFBTKVxcbjEwNjM6XFx0XFx0dW5pb24ge1xcbjEwNjQ6XFx0XFx0XFx0dW5zaWduZWQgaW50XFx0bmFwaV9pZDtcXG4xMDY1OlxcdFxcdFxcdHVuc2lnbmVkIGludFxcdHNlbmRlcl9jcHU7XFxuMTA2NjpcXHRcXHR9O1xcbjEwNjc6XFx0I2VuZGlmXFxuMTA2ODpcXHQjaWZkZWYgQ09ORklHX05FVFdPUktfU0VDTUFSS1xcbjEwNjk6XFx0XFx0X191MzJcXHRcXHRzZWNtYXJrO1xcbjEwNzA6XFx0I2VuZGlmXFxuMTA3MTpcXHRcXG4xMDcyOlxcdFxcdHVuaW9uIHtcXG4xMDczOlxcdFxcdFxcdF9fdTMyXFx0XFx0bWFyaztcXG4xMDc0OlxcdFxcdFxcdF9fdTMyXFx0XFx0cmVzZXJ2ZWRfdGFpbHJvb207XFxuMTA3NTpcXHRcXHR9O1xcbjEwNzY6XFx0XFxuMTA3NzpcXHRcXHR1bmlvbiB7XFxuMTA3ODpcXHRcXHRcXHRfX2JlMTZcXHRcXHRpbm5lcl9wcm90b2NvbDtcXG4xMDc5OlxcdFxcdFxcdF9fdThcXHRcXHRpbm5lcl9pcHByb3RvO1xcbjEwODA6XFx0XFx0fTtcXG4xMDgxOlxcdFxcbjEwODI6XFx0XFx0X191MTZcXHRcXHRcXHRpbm5lcl90cmFuc3BvcnRfaGVhZGVyO1xcbjEwODM6XFx0XFx0X191MTZcXHRcXHRcXHRpbm5lcl9uZXR3b3JrX2hlYWRlcjtcXG4xMDg0OlxcdFxcdF9fdTE2XFx0XFx0XFx0aW5uZXJfbWFjX2hlYWRlcjtcXG4xMDg1OlxcdFxcbjEwODY6XFx0XFx0X19iZTE2XFx0XFx0XFx0cHJvdG9jb2w7XFxuMTA4NzpcXHRcXHRfX3UxNlxcdFxcdFxcdHRyYW5zcG9ydF9oZWFkZXI7XFxuMTA4ODpcXHRcXHRfX3UxNlxcdFxcdFxcdG5ldHdvcmtfaGVhZGVyO1xcbjEwODk6XFx0XFx0X191MTZcXHRcXHRcXHRtYWNfaGVhZGVyO1xcbjEwOTA6XFx0XFxuMTA5MTpcXHRcXHRzdHJ1Y3Qga2Nvdl9jb21tb25faGFuZGxlX2lkIGtjb3ZfaGFuZGxlO1xcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHQpOyAvKiBlbmQgaGVhZGVycyBncm91cCAqL1xcbjEwOTQ6XFx0XFxuMTA5NTpcXHRcXHQvKiBUaGVzZSBlbGVtZW50cyBtdXN0IGJlIGF0IHRoZSBlbmQsIHNlZSBhbGxvY19za2IoKSBmb3IgZGV0YWlscy4gICovXFxuMTA5NjpcXHRcXHRza19idWZmX2RhdGFfdFxcdFxcdHRhaWw7XFxuMTA5NzpcXHRcXHRza19idWZmX2RhdGFfdFxcdFxcdGVuZDtcXG4xMDk4OlxcdFxcdHVuc2lnbmVkIGNoYXJcXHRcXHQqaGVhZCxcXG4xMDk5OlxcdFxcdFxcdFxcdFxcdCpkYXRhO1xcbjExMDA6XFx0XFx0dW5zaWduZWQgaW50XFx0XFx0dHJ1ZXNpemU7XFxuMTEwMTpcXHRcXHRyZWZjb3VudF90XFx0XFx0dXNlcnM7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdCNpZmRlZiBDT05GSUdfU0tCX0VYVEVOU0lPTlNcXG4xMTA0OlxcdFxcdC8qIG9ubHkgdXNhYmxlIGFmdGVyIGNoZWNraW5nIC1cXHUwMDNlYWN0aXZlX2V4dGVuc2lvbnMgIT0gMCAqL1xcbjExMDU6XFx0XFx0c3RydWN0IHNrYl9leHRcXHRcXHQqZXh0ZW5zaW9ucztcXG4xMTA2OlxcdCNlbmRpZlxcbjExMDc6XFx0fTtcXG4xMTA4OlxcdFxcbjExMDk6XFx0LyogaWYgeW91IG1vdmUgcGt0X3R5cGUgYXJvdW5kIHlvdSBhbHNvIG11c3QgYWRhcHQgdGhvc2UgY29uc3RhbnRzICovXFxuMTExMDpcXHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxuMTExMTpcXHQjZGVmaW5lIFBLVF9UWVBFX01BWFxcdCg3IFxcdTAwM2NcXHUwMDNjIDUpXFxuMTExMjpcXHQjZWxzZVxcbjExMTM6XFx0I2RlZmluZSBQS1RfVFlQRV9NQVhcXHQ3XFxuMTExNDpcXHQjZW5kaWZcXG4xMTE1OlxcdCNkZWZpbmUgUEtUX1RZUEVfT0ZGU0VUXFx0XFx0b2Zmc2V0b2Yoc3RydWN0IHNrX2J1ZmYsIF9fcGt0X3R5cGVfb2Zmc2V0KVxcbjExMTY6XFx0XFxuMTExNzpcXHQvKiBpZiB5b3UgbW92ZSB0Y19hdF9pbmdyZXNzIG9yIHRzdGFtcF90eXBlXFxuMTExODpcXHQgKiBhcm91bmQsIHlvdSBhbHNvIG11c3QgYWRhcHQgdGhlc2UgY29uc3RhbnRzLlxcbjExMTk6XFx0ICovXFxuMTEyMDpcXHQjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxEXFxuMTEyMTpcXHQjZGVmaW5lIFNLQl9UU1RBTVBfVFlQRV9NQVNLXFx0XFx0KDMgXFx1MDAzY1xcdTAwM2MgNilcXG4xMTIyOlxcdCNkZWZpbmUgU0tCX1RTVEFNUF9UWVBFX1JTSElGVFxcdFxcdCg2KVxcbjExMjM6XFx0I2RlZmluZSBUQ19BVF9JTkdSRVNTX01BU0tcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyA1KVxcbjExMjQ6XFx0I2Vsc2VcXG4xMTI1OlxcdCNkZWZpbmUgU0tCX1RTVEFNUF9UWVBFX01BU0tcXHRcXHQoMylcXG4xMTI2OlxcdCNkZWZpbmUgVENfQVRfSU5HUkVTU19NQVNLXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMilcXG4xMTI3OlxcdCNlbmRpZlxcbjExMjg6XFx0I2RlZmluZSBTS0JfQkZfTU9OT19UQ19PRkZTRVRcXHRcXHRvZmZzZXRvZihzdHJ1Y3Qgc2tfYnVmZiwgX19tb25vX3RjX29mZnNldClcXG4xMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNDo1MC44MTM5MTMwMDJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk0MTE2MzU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgc2tiIEhlYWRlciBDb3B5aW5nIGFuZCBuZl9kdXBsaWNhdGVkKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYG5mX2R1cGxpY2F0ZWRgIGJlaGF2ZXMgd2l0aGluIGBzdHJ1Y3Qgc2tfYnVmZmAuIFRoZSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgc2luY2UgYG5mX2R1cGxpY2F0ZWRgIGlzIHBvc2l0aW9uZWQgYmVmb3JlIGB0YWlsYCBpbiB0aGUgYHNrX2J1ZmZgIHN0cnVjdCwgaXRzIGluaXRpYWwgdmFsdWUgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvIHdoZW5ldmVyIGFuIFNLQiBpcyBhbGxvY2F0ZWQuIFRoaXMgaXMgYmVjYXVzZSBgc2tidWZmX2NsZWFyKHNrYilgIGVmZmVjdGl2ZWx5IHplcm9lcyBldmVyeXRoaW5nIHVwIHRvIHRoZSBgdGFpbGAgb2Zmc2V0IGR1cmluZyBhbGxvY2F0aW9uLlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIGhvdyBgbmZfZHVwbGljYXRlZGAgaXMgaGFuZGxlZCBkdXJpbmcgU0tCIGhlYWRlciBjb3B5aW5nLiBJIG5lZWQgdG8gZXhhbWluZSB0aGUga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYF9fY29weV9za2JfaGVhZGVyYCwgYHBza2JfY29weWAsIGFuZCBgc2tiX2NvcHlgLiBMZXQncyBzdGFydCBieSBsb29raW5nIGF0IGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYC5cblxuU3BlY2lmaWNhbGx5LCBJIHNlZSB0aGUgYG5mX2NvcHlgIGZ1bmN0aW9uOlxuXG5gYGBjXG5zdGF0aWMgaW5saW5lIHZvaWQgbmZfY29weShzdHJ1Y3Qgc2tfYnVmZiAqZHN0LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc3JjKVxue1xuI2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcblx0bmZfY29ubnRyYWNrX3B1dChza2JfbmZjdChkc3QpKTtcbiNlbmRpZlxuXHRkc3QtXHUwMDNlc2xvd19ncm8gPSBzcmMtXHUwMDNlc2xvd19ncm87XG4jaWYgSVNfRU5BQkxFRChDT05GSUdfTkZfRFVQX0lQVjQpIHx8IElTX0VOQUJMRUQoQ09ORklHX05GX0RVUF9JUFY2KVxuXHRkc3QtXHUwMDNlbmZfZHVwbGljYXRlZCA9IHNyYy1cdTAwM2VuZl9kdXBsaWNhdGVkO1xuI2VuZGlmXG5cdF9fbmZfY29weShkc3QsIHNyYywgdHJ1ZSk7XG59XG5gYGBcblxuVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBgbmZfY29weWAgaXMgY2FsbGVkIGR1cmluZyBTS0IgY2xvbmluZyBhbmQgY29weWluZyB0aHJvdWdoIGBfX2NvcHlfc2tiX2hlYWRlcmAuIFNvLCB0aGUgbGluZSBgZHN0LVx1MDAzZW5mX2R1cGxpY2F0ZWQgPSBzcmMtXHUwMDNlbmZfZHVwbGljYXRlZDtgIGlzIHRoZSBrZXkuIEl0IGxvb2tzIGxpa2UgYG5mX2R1cGxpY2F0ZWRgIGlzIGV4cGxpY2l0bHkgY29waWVkIGZyb20gdGhlIHNvdXJjZSBTS0IgdG8gdGhlIGRlc3RpbmF0aW9uIFNLQiBkdXJpbmcgdGhlIGNvcHkgb3BlcmF0aW9uIGlmIGVpdGhlciBgQ09ORklHX05GX0RVUF9JUFY0YCBvciBgQ09ORklHX05GX0RVUF9JUFY2YCBhcmUgZW5hYmxlZCwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIGV4cGVjdC4gSSBuZWVkIHRvIHZlcmlmeSB3aGF0IGBfX2NvcHlfc2tiX2hlYWRlcmAgZG9lcyBub3cgdG8gbWFrZSBjZXJ0YWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ4NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjU0Ljc1NTA3ODk4N1oiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIxOTA0MDE5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NvcHlfc2tiX2hlYWRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NrYnVmZi5oPTg4Nz1zdHJ1Y3Qgc2tfYnVmZiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk0MC1cXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oOjk0MTpcXHQvKiBGb2xsb3dpbmcgZmllbGRzIGFyZSBfbm90XyBjb3BpZWQgaW4gX19jb3B5X3NrYl9oZWFkZXIoKVxcbmluY2x1ZGUvbGludXgvc2tidWZmLmgtOTQyLVxcdCAqIE5vdGUgdGhhdCBxdWV1ZV9tYXBwaW5nIGlzIGhlcmUgbW9zdGx5IHRvIGZpbGwgYSBob2xlLlxcbi0tXFxuaW5jbHVkZS9saW51eC9za2J1ZmYuaC05NjgtXFx0LyogRmllbGRzIGVuY2xvc2VkIGluIGhlYWRlcnMgZ3JvdXAgYXJlIGNvcGllZFxcbmluY2x1ZGUvbGludXgvc2tidWZmLmg6OTY5OlxcdCAqIHVzaW5nIGEgc2luZ2xlIG1lbWNweSgpIGluIF9fY29weV9za2JfaGVhZGVyKClcXG5pbmNsdWRlL2xpbnV4L3NrYnVmZi5oLTk3MC1cXHQgKi9cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE1NTI9RVhQT1JUX1NZTUJPTChuYXBpX2NvbnN1bWVfc2tiKTtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1NTgtXFxubmV0L2NvcmUvc2tidWZmLmM6MTU1OTpzdGF0aWMgdm9pZCBfX2NvcHlfc2tiX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqbmV3LCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqb2xkKVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE1NjAte1xcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtMTYwNy0gKiBZb3Ugc2hvdWxkIG5vdCBhZGQgYW55IG5ldyBjb2RlIHRvIHRoaXMgZnVuY3Rpb24uICBBZGQgaXQgdG9cXG5uZXQvY29yZS9za2J1ZmYuYzoxNjA4OiAqIF9fY29weV9za2JfaGVhZGVyIGFib3ZlIGluc3RlYWQuXFxubmV0L2NvcmUvc2tidWZmLmMtMTYwOS0gKi9cXG5uZXQvY29yZS9za2J1ZmYuYz0xNjEwPXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqX19za2JfY2xvbmUoc3RydWN0IHNrX2J1ZmYgKm4sIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy0xNjE1LVxcdG4tXFx1MDAzZXNrID0gTlVMTDtcXG5uZXQvY29yZS9za2J1ZmYuYzoxNjE2OlxcdF9fY29weV9za2JfaGVhZGVyKG4sIHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmMtMTYxNy1cXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTE2NDc9c3RydWN0IHNrX2J1ZmYgKmFsbG9jX3NrYl9mb3JfbXNnKHN0cnVjdCBza19idWZmICpmaXJzdClcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jLTE2NjAtXFxubmV0L2NvcmUvc2tidWZmLmM6MTY2MTpcXHRfX2NvcHlfc2tiX2hlYWRlcihuLCBmaXJzdCk7XFxubmV0L2NvcmUvc2tidWZmLmMtMTY2Mi1cXHRuLVxcdTAwM2VkZXN0cnVjdG9yID0gTlVMTDtcXG4tLVxcbm5ldC9jb3JlL3NrYnVmZi5jPTIxNDY9dm9pZCBza2JfY29weV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTQ3LXtcXG5uZXQvY29yZS9za2J1ZmYuYzoyMTQ4OlxcdF9fY29weV9za2JfaGVhZGVyKG5ldywgb2xkKTtcXG5uZXQvY29yZS9za2J1ZmYuYy0yMTQ5LVxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmM9NDY4Nz1zdHJ1Y3Qgc2tfYnVmZiAqc2tiX3NlZ21lbnRfbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2NvcmUvc2tidWZmLmMtNDc0NS1cXHRcXHRsZW5fZGlmZiA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4obnNrYikgLSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7XFxubmV0L2NvcmUvc2tidWZmLmM6NDc0NjpcXHRcXHRfX2NvcHlfc2tiX2hlYWRlcihuc2tiLCBza2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ3NDctXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYz00NzkwPXN0cnVjdCBza19idWZmICpza2Jfc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqaGVhZF9za2IsXFxuLS1cXG5uZXQvY29yZS9za2J1ZmYuYy00OTc1LVxcbm5ldC9jb3JlL3NrYnVmZi5jOjQ5NzY6XFx0XFx0X19jb3B5X3NrYl9oZWFkZXIobnNrYiwgaGVhZF9za2IpO1xcbm5ldC9jb3JlL3NrYnVmZi5jLTQ5NzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA0OjU2Ljk3NDEyNTUzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3NDA1NDYyNTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gU0tCIEhlYWRlciBDb3B5aW5nKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIFNLQiBoZWFkZXIgY29weWluZy4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc291cmNlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fY29weV9za2JfaGVhZGVyYCBpbiBgbmV0L2NvcmUvc2tidWZmLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGNvcmUgbG9naWMgcmVzaWRlcywgcmlnaHQ/IEkgd2FudCB0byBzZWUgZXhhY3RseSBob3cgdGhlIGhlYWRlciBkYXRhIGlzIGJlaW5nIGhhbmRsZWQsIHdoYXQgbWVtb3J5IG9wZXJhdGlvbnMgYXJlIHRha2luZyBwbGFjZSwgYW5kIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyBvciBwaXRmYWxscy4gVGhpcyBmdW5jdGlvbiBpcyB0aGUgd29ya2hvcnNlLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlcyBhbmQgYW55IHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIGZvciBwZXJmb3JtYW5jZSBvciBjb3JyZWN0bmVzcyBieSBsb29raW5nIGF0IHRoZSBkZXRhaWxzLiBUaW1lIHRvIGZpcmUgdXAgdGhlIGVkaXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNjQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNTowMS43MTQ2NzQ4NTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0NjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL3NrYnVmZi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1NTksXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1NTk6XFx0c3RhdGljIHZvaWQgX19jb3B5X3NrYl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKm5ldywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKm9sZClcXG4xNTYwOlxcdHtcXG4xNTYxOlxcdFxcdG5ldy1cXHUwMDNldHN0YW1wXFx0XFx0PSBvbGQtXFx1MDAzZXRzdGFtcDtcXG4xNTYyOlxcdFxcdC8qIFdlIGRvIG5vdCBjb3B5IG9sZC1cXHUwMDNlc2sgKi9cXG4xNTYzOlxcdFxcdG5ldy1cXHUwMDNlZGV2XFx0XFx0PSBvbGQtXFx1MDAzZWRldjtcXG4xNTY0OlxcdFxcdG1lbWNweShuZXctXFx1MDAzZWNiLCBvbGQtXFx1MDAzZWNiLCBzaXplb2Yob2xkLVxcdTAwM2VjYikpO1xcbjE1NjU6XFx0XFx0c2tiX2RzdF9jb3B5KG5ldywgb2xkKTtcXG4xNTY2OlxcdFxcdF9fc2tiX2V4dF9jb3B5KG5ldywgb2xkKTtcXG4xNTY3OlxcdFxcdF9fbmZfY29weShuZXcsIG9sZCwgZmFsc2UpO1xcbjE1Njg6XFx0XFxuMTU2OTpcXHRcXHQvKiBOb3RlIDogdGhpcyBmaWVsZCBjb3VsZCBiZSBpbiB0aGUgaGVhZGVycyBncm91cC5cXG4xNTcwOlxcdFxcdCAqIEl0IGlzIG5vdCB5ZXQgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBoYXZlIGEgMTYgYml0IGhvbGVcXG4xNTcxOlxcdFxcdCAqL1xcbjE1NzI6XFx0XFx0bmV3LVxcdTAwM2VxdWV1ZV9tYXBwaW5nID0gb2xkLVxcdTAwM2VxdWV1ZV9tYXBwaW5nO1xcbjE1NzM6XFx0XFxuMTU3NDpcXHRcXHRtZW1jcHkoXFx1MDAyNm5ldy1cXHUwMDNlaGVhZGVycywgXFx1MDAyNm9sZC1cXHUwMDNlaGVhZGVycywgc2l6ZW9mKG5ldy1cXHUwMDNlaGVhZGVycykpO1xcbjE1NzU6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHByb3RvY29sKTtcXG4xNTc2OlxcdFxcdENIRUNLX1NLQl9GSUVMRChjc3VtKTtcXG4xNTc3OlxcdFxcdENIRUNLX1NLQl9GSUVMRChoYXNoKTtcXG4xNTc4OlxcdFxcdENIRUNLX1NLQl9GSUVMRChwcmlvcml0eSk7XFxuMTU3OTpcXHRcXHRDSEVDS19TS0JfRklFTEQoc2tiX2lpZik7XFxuMTU4MDpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl9wcm90byk7XFxuMTU4MTpcXHRcXHRDSEVDS19TS0JfRklFTEQodmxhbl90Y2kpO1xcbjE1ODI6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKHRyYW5zcG9ydF9oZWFkZXIpO1xcbjE1ODM6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG5ldHdvcmtfaGVhZGVyKTtcXG4xNTg0OlxcdFxcdENIRUNLX1NLQl9GSUVMRChtYWNfaGVhZGVyKTtcXG4xNTg1OlxcdFxcdENIRUNLX1NLQl9GSUVMRChpbm5lcl9wcm90b2NvbCk7XFxuMTU4NjpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfdHJhbnNwb3J0X2hlYWRlcik7XFxuMTU4NzpcXHRcXHRDSEVDS19TS0JfRklFTEQoaW5uZXJfbmV0d29ya19oZWFkZXIpO1xcbjE1ODg6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKGlubmVyX21hY19oZWFkZXIpO1xcbjE1ODk6XFx0XFx0Q0hFQ0tfU0tCX0ZJRUxEKG1hcmspO1xcbjE1OTA6XFx0I2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUktcXG4xNTkxOlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZWNtYXJrKTtcXG4xNTkyOlxcdCNlbmRpZlxcbjE1OTM6XFx0I2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMXFxuMTU5NDpcXHRcXHRDSEVDS19TS0JfRklFTEQobmFwaV9pZCk7XFxuMTU5NTpcXHQjZW5kaWZcXG4xNTk2OlxcdFxcdENIRUNLX1NLQl9GSUVMRChhbGxvY19jcHUpO1xcbjE1OTc6XFx0I2lmZGVmIENPTkZJR19YUFNcXG4xNTk4OlxcdFxcdENIRUNLX1NLQl9GSUVMRChzZW5kZXJfY3B1KTtcXG4xNTk5OlxcdCNlbmRpZlxcbjE2MDA6XFx0I2lmZGVmIENPTkZJR19ORVRfU0NIRURcXG4xNjAxOlxcdFxcdENIRUNLX1NLQl9GSUVMRCh0Y19pbmRleCk7XFxuMTYwMjpcXHQjZW5kaWZcXG4xNjAzOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNTowMS43MTQ5ODE5NDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQyNjUwMzYyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0tCIEhlYWRlciBEdXBsaWNhdGlvbiBhbmQgTmV0ZmlsdGVyIER1cGxpY2F0aW9uIEZsYWdzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbWVtY3B5YCBvcGVyYXRpb24gaW52b2x2aW5nIGBza19idWZmYCBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgYG1lbWNweShcdTAwMjZuZXctXHUwMDNlaGVhZGVycywgXHUwMDI2b2xkLVx1MDAzZWhlYWRlcnMsIHNpemVvZihuZXctXHUwMDNlaGVhZGVycykpO2AuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyB0cmFjZSBleGFjdGx5IHdoYXQncyBiZWluZyBjb3BpZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy5cIiBGcm9tIGV4cGVyaWVuY2UsIEkga25vdyB0aGUgYGhlYWRlcnNgIGdyb3VwIGluIHRoZSBgc2tfYnVmZmAgc3RydWN0dXJlIGlzIGEgc3Vic3RhbnRpYWwgc2VjdGlvbjsgbGV0IG1lIGNvbmZpcm0gaXRzIHNwYW4uIEFoYSwgeWVzLCBJIHNlZSB0aGF0IHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyByZXNpZGVzIHdpdGhpbiB0aGUgZGVmaW5lZCBgaGVhZGVyc2AgZ3JvdXAuIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIGEgc2ltcGxlIGBtZW1jcHlgIHdvdWxkIGR1cGxpY2F0ZSBpdCBhbG9uZyB3aXRoIGV2ZXJ5dGhpbmcgZWxzZSBpbiBgaGVhZGVyc2AuXG5cbkkgYWxzbyByZW1lbWJlciB0aGF0IGBuZl9jb3B5YCBjb250YWlucyBhIGRpcmVjdCBjb3B5IG9mIHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyB3aXRoIGBkc3QtXHUwMDNlbmZfZHVwbGljYXRlZCA9IHNyYy1cdTAwM2VuZl9kdXBsaWNhdGVkO2AsIHdoaWNoIGlzLCBvZiBjb3Vyc2UsIHVzZWQgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zIG9mIGBuZl9jb3B5YC4gVGhlcmVmb3JlLCBpZiBib3RoIHRoZSBgbWVtY3B5YCBhbmQgYG5mX2NvcHlgIGV4aXN0IG9uIHRoZSBzYW1lIGxpbmUsIHRoZXJlIHdpbGwgYmUgdGhlIHNhbWUgb3V0Y29tZS5cblxuTm93LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBgbmZfZHVwbGljYXRlZGAgZmxhZyBpcyBoYW5kbGVkIGluIHRoZSBJUHY0IGFuZCBJUHY2IGR1cGxpY2F0aW9uIGNvbnRleHRzLCBiZWNhdXNlIHRoaXMgc2VlbXMgbGlrZSBhbiBhcmVhIHdoZXJlIHN1YnRsZSBpc3N1ZXMgY291bGQgYXJpc2UuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0J3MgZXhwbGljaXRseSBoYXBwZW5pbmcgYXQgdGhlIE5ldGZpbHRlciBsZXZlbC4gTGV0IG1lIHF1aWNrbHkgZXhhbWluZSB0aGUgY29kZSBmb3IgYG5mX2R1cF9pcHY0YCBhbmQgYG5mX2R1cF9pcHY2YC4gSSdsbCBvcGVuIHVwIGBuZXQvaXB2NC9uZXRmaWx0ZXIvbmZfZHVwX2lwdjQuY2AgYW5kIGBuZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfZHVwX2lwdjYuY2AgdG8gbG9vayBhdCBob3cgdGhpcyBmbGFnIGlzIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2hlbiogYW5kICp3aHkqIGl0J3Mgc2V0IG9yIGNsZWFyZWQuIFRoaXMgd2lsbCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBhc3Nlc3MgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhpcyBoZWFkZXIgZHVwbGljYXRpb24gaW4gZGV0YWlsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE1MSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA1OjA3LjE0MTQ4OTMyMVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvbmV0ZmlsdGVyL25mX2R1cF9pcHY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0aWYgKElTX0VSUihydCkpXFxuICA0MTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHNrYl9kc3RfZHJvcChza2IpO1xcbiAgNDQ6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBcXHUwMDI2cnQtXFx1MDAzZWRzdCk7XFxuICA0NTpcXHRcXHRza2ItXFx1MDAzZWRldiAgICAgID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuICA0NjpcXHRcXHRza2ItXFx1MDAzZXByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gIDQ5OlxcdH1cXG4gIDUwOlxcdFxcbiAgNTE6XFx0dm9pZCBuZl9kdXBfaXB2NChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBob29rbnVtLFxcbiAgNTI6XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpndywgaW50IG9pZilcXG4gIDUzOlxcdHtcXG4gIDU0OlxcdFxcdHN0cnVjdCBpcGhkciAqaXBoO1xcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuICA1NzpcXHRcXHRpZiAoY3VycmVudC1cXHUwMDNlaW5fbmZfZHVwbGljYXRlIHx8IHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZClcXG4gIDU4OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiAgNTk6XFx0XFx0LypcXG4gIDYwOlxcdFxcdCAqIENvcHkgdGhlIHNrYiwgYW5kIHJvdXRlIHRoZSBjb3B5LiBXaWxsIGxhdGVyIHJldHVybiAlWFRfQ09OVElOVUUgZm9yXFxuICA2MTpcXHRcXHQgKiB0aGUgb3JpZ2luYWwgc2tiLCB3aGljaCBzaG91bGQgY29udGludWUgb24gaXRzIHdheSBhcyBpZiBub3RoaW5nIGhhc1xcbiAgNjI6XFx0XFx0ICogaGFwcGVuZWQuIFRoZSBjb3B5IHNob3VsZCBiZSBpbmRlcGVuZGVudGx5IGRlbGl2ZXJlZCB0byB0aGUgZ2F0ZXdheS5cXG4gIDYzOlxcdFxcdCAqL1xcbiAgNjQ6XFx0XFx0c2tiID0gcHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7XFxuICA2NTpcXHRcXHRpZiAoc2tiID09IE5VTEwpXFxuICA2NjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0I2lmIElTX0VOQUJMRUQoQ09ORklHX05GX0NPTk5UUkFDSylcXG4gIDY5OlxcdFxcdC8qIEF2b2lkIGNvdW50aW5nIGNsb25lZCBwYWNrZXRzIHRvd2FyZHMgdGhlIG9yaWdpbmFsIGNvbm5lY3Rpb24uICovXFxuICA3MDpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNzE6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDcyOlxcdCNlbmRpZlxcbiAgNzM6XFx0XFx0LypcXG4gIDc0OlxcdFxcdCAqIElmIHdlIGFyZSBpbiBQUkVST1VUSU5HL0lOUFVULCBkZWNyZWFzZSB0aGUgVFRMIHRvIG1pdGlnYXRlIHBvdGVudGlhbFxcbiAgNzU6XFx0XFx0ICogbG9vcHMgYmV0d2VlbiB0d28gaG9zdHMuXFxuICA3NjpcXHRcXHQgKlxcbiAgNzc6XFx0XFx0ICogU2V0ICVJUF9ERiBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgbm90aWZpZWQgb2YgYSBwb3RlbnRpYWxseVxcbiAgNzg6XFx0XFx0ICogZGVjcmVhc2VkIE1UVSBvbiB0aGUgY2xvbmUgcm91dGUuIElQdjYgZG9lcyB0aGlzIHRvby5cXG4gIDc5OlxcdFxcdCAqXFxuICA4MDpcXHRcXHQgKiBJUCBoZWFkZXIgY2hlY2tzdW0gd2lsbCBiZSByZWNhbGN1bGF0ZWQgYXQgaXBfbG9jYWxfb3V0LlxcbiAgODE6XFx0XFx0ICovXFxuICA4MjpcXHRcXHRpcGggPSBpcF9oZHIoc2tiKTtcXG4gIDgzOlxcdFxcdGlwaC1cXHUwMDNlZnJhZ19vZmYgfD0gaHRvbnMoSVBfREYpO1xcbiAgODQ6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgODU6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTilcXG4gIDg2OlxcdFxcdFxcdC0taXBoLVxcdTAwM2V0dGw7XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdGlmIChuZl9kdXBfaXB2NF9yb3V0ZShuZXQsIHNrYiwgZ3csIG9pZikpIHtcXG4gIDg5OlxcdFxcdFxcdHNrYi1cXHUwMDNlbmZfZHVwbGljYXRlZCA9IDE7XFxuICA5MDpcXHRcXHRcXHRjdXJyZW50LVxcdTAwM2Vpbl9uZl9kdXBsaWNhdGUgPSB0cnVlO1xcbiAgOTE6XFx0XFx0XFx0aXBfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDkyOlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgOTM6XFx0XFx0fSBlbHNlIHtcXG4gIDk0OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgOTU6XFx0XFx0fVxcbiAgOTY6XFx0b3V0OlxcbiAgOTc6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuICA5ODpcXHR9XFxuICA5OTpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2NCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDA3OjA1OjA3LjE0MTYzODIzMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDQ0MDczMzcyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gSVB2NiBOZXRmaWx0ZXIgRHVwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IG5ldHdvcmsgZmlsdGVyaW5nLCBhbmQgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHdlJ3ZlIGNvdmVyZWQgb3VyIGJhc2VzLiBUaGUgY29yZSBhcmNoaXRlY3R1cmUgaXMgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBpbiBtb3N0IGNhc2VzLCBidXQgSVB2NiBpcyB3aGVyZSB0aGluZ3MgY2FuIGdldCBhIGxpdHRsZS4uLiBudWFuY2VkLiBMZXQncyBub3Qgc2tpcCBhbnkgc3RlcHMuIEknbSBnb2luZyB0byBxdWlja2x5IHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBJUHY2IGR1cGxpY2F0ZSBwYWNrZXQgaGFuZGxpbmcgY29kZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgYG5ldC9pcHY2L25ldGZpbHRlci9uZl9kdXBfaXB2Ni5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aGVyZSBtaWdodCBiZSBzb21lIGNydWNpYWwgc3VidGxldGllcyByZWxhdGVkIHRvIGhvdyBJUHY2IGV4dGVuc2lvbiBoZWFkZXJzIGFyZSBoYW5kbGVkLCBvciBwZXJoYXBzIHNvbWUgc3BlY2lmaWMgSVB2Ni1yZWxhdGVkIGZyYWdtZW50YXRpb24gY29uc2lkZXJhdGlvbnMgdGhhdCB3YXJyYW50IGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byBlbnN1cmUgd2UgYWNjb3VudCBmb3IgdGhlIGRpZmZlcmVuY2VzIGluIGhvdyBJUHY2IGhhbmRsZXMgY2VydGFpbiBmdW5jdGlvbnMgaW4gY29tcGFyaXNvbiB0byBJUHY0LiBHb3R0YSBtYWtlIHN1cmUgd2UncmUgbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgY291bGQgaW50cm9kdWNlIHZ1bG5lcmFiaWxpdGllcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gVGltZSB0byBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjQ1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNToxNy41ODIzNzM4OThaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjI1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvbmV0ZmlsdGVyL25mX2R1cF9pcHY2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFx0c2tiX2RzdF9zZXQoc2tiLCBkc3QpO1xcbiAgNDE6XFx0XFx0c2tiLVxcdTAwM2VkZXYgICAgICA9IGRzdF9kZXYoZHN0KTtcXG4gIDQyOlxcdFxcdHNrYi1cXHUwMDNlcHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTtcXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0cmV0dXJuIHRydWU7XFxuICA0NTpcXHR9XFxuICA0NjpcXHRcXG4gIDQ3OlxcdHZvaWQgbmZfZHVwX2lwdjYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaG9va251bSxcXG4gIDQ4OlxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmd3LCBpbnQgb2lmKVxcbiAgNDk6XFx0e1xcbiAgNTA6XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbiAgNTE6XFx0XFx0aWYgKGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSB8fCBza2ItXFx1MDAzZW5mX2R1cGxpY2F0ZWQpXFxuICA1MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gIDUzOlxcdFxcdHNrYiA9IHBza2JfY29weShza2IsIEdGUF9BVE9NSUMpO1xcbiAgNTQ6XFx0XFx0aWYgKHNrYiA9PSBOVUxMKVxcbiAgNTU6XFx0XFx0XFx0Z290byBvdXQ7XFxuICA1NjpcXHRcXG4gIDU3OlxcdCNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9DT05OVFJBQ0spXFxuICA1ODpcXHRcXHRuZl9yZXNldF9jdChza2IpO1xcbiAgNTk6XFx0XFx0bmZfY3Rfc2V0KHNrYiwgTlVMTCwgSVBfQ1RfVU5UUkFDS0VEKTtcXG4gIDYwOlxcdCNlbmRpZlxcbiAgNjE6XFx0XFx0aWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORyB8fFxcbiAgNjI6XFx0XFx0ICAgIGhvb2tudW0gPT0gTkZfSU5FVF9MT0NBTF9JTikge1xcbiAgNjM6XFx0XFx0XFx0c3RydWN0IGlwdjZoZHIgKmlwaCA9IGlwdjZfaGRyKHNrYik7XFxuICA2NDpcXHRcXHRcXHQtLWlwaC1cXHUwMDNlaG9wX2xpbWl0O1xcbiAgNjU6XFx0XFx0fVxcbiAgNjY6XFx0XFx0aWYgKG5mX2R1cF9pcHY2X3JvdXRlKG5ldCwgc2tiLCBndywgb2lmKSkge1xcbiAgNjc6XFx0XFx0XFx0c2tiLVxcdTAwM2VuZl9kdXBsaWNhdGVkID0gMTtcXG4gIDY4OlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IHRydWU7XFxuICA2OTpcXHRcXHRcXHRpcDZfbG9jYWxfb3V0KG5ldCwgc2tiLVxcdTAwM2Vzaywgc2tiKTtcXG4gIDcwOlxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZWluX25mX2R1cGxpY2F0ZSA9IGZhbHNlO1xcbiAgNzE6XFx0XFx0fSBlbHNlIHtcXG4gIDcyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNzM6XFx0XFx0fVxcbiAgNzQ6XFx0b3V0OlxcbiAgNzU6XFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuICA3NjpcXHR9XFxuICA3NzpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9kdXBfaXB2Nik7XFxuICA3ODpcXHRcXG4gIDc5OlxcdE1PRFVMRV9BVVRIT1IoXFxcIlNlYmFzdGlhbiBDbGHDn2VuIFxcdTAwM2NzZWJhc3RpYW4uY2xhc3NlbkBmcmVlbmV0LmFnXFx1MDAzZVxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQwNzowNToxNy41ODI0Mzc4NjhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQzMjEzODUwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZmlsdGVyIFBhY2tldCBEdXBsaWNhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHByb2JsZW0gdGhpcyBwYXRjaCBhZGRyZXNzZXMuIEl0IHNlZW1zIHRoZXJlIHdhcyBhIGZsYXcgaW4gdGhlIG9yaWdpbmFsIGxvZ2ljLiBUaGUgcGVyLXRhc2sgZmxhZywgYGN1cnJlbnQtXHUwMDNlaW5fbmZfZHVwbGljYXRlYCwgd2Fzbid0IHJvYnVzdCBlbm91Z2ggdG8gaGFuZGxlIHRoZSBhc3luY2hyb25vdXMgbmF0dXJlIG9mIG5ldGZpbHRlciBwYWNrZXQgZHVwbGljYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBwYWNrZXRzIGdvdCBxdWV1ZWQsIGRlbGF5ZWQsIG9yIG1vdmVkIGJldHdlZW4gY29udGV4dHMuIFRoaXMgY291bGQgbGVhZCB0byBpbmZpbml0ZSBkdXBsaWNhdGlvbiBsb29wcywgYSB2ZXJ5IG5hc3R5IGJ1ZyFcblxuVGhlIHNvbHV0aW9uLCB3aGljaCBJIGZpbmQgZWxlZ2FudCwgaXMgdG8gaW50cm9kdWNlIGEgbmV3IGZsYWcgZGlyZWN0bHkgb24gdGhlIGBza19idWZmYCwgdGhlIHBhY2tldCdzIGRhdGEgc3RydWN0dXJlIGl0c2VsZjogYHNrYi1cdTAwM2VuZl9kdXBsaWNhdGVkYC4gTm93LCBhbnkgcGFja2V0IGR1cGxpY2F0ZWQgYnkgbmV0ZmlsdGVyIGdldHMgdGhpcyBmbGFnIHNldC4gVGhlIGNoZWNrIGlzIG1vZGlmaWVkIHRvIGBjdXJyZW50LVx1MDAzZWluX25mX2R1cGxpY2F0ZSB8fCBza2ItXHUwMDNlbmZfZHVwbGljYXRlZGAsIGFuZCB0aGlzIGd1YXJhbnRlZXMgdGhhdCB3ZSBjb3JyZWN0bHkgaWRlbnRpZnkgYW5kIHByZXZlbnQgYW55IHBhY2tldHMgZ2VuZXJhdGVkIHZpYSBuZXRmaWx0ZXIgZHVwbGljYXRpb24gZnJvbSBiZWluZywgd2VsbCwgZHVwbGljYXRlZCBhZ2Fpbi4gTmljZS5cblxuTm93LCBsZXQncyBnZXQgZG93biB0byB0aGUgS01TQU4gdmVyc3VzIEtBU0FOIGNvbnNpZGVyYXRpb25zLiBJIG5lZWQgdG8gbWFrZSBhIHNvbGlkIGFzc2Vzc21lbnQgaGVyZSwgZ2l2ZW4gbXkgZXhwZXJ0aXNlIGluIHRoZXNlIGFyZWFzLlxuXG4xLiAgKipLZXJuZWwgc3RydWN0dXJlcyB0byB1c2Vyc3BhY2U/KiogTm8uIGBzdHJ1Y3Qgc2tfYnVmZmAgaXMgaW50ZXJuYWwuIFdoaWxlIGl04oCZcyB0cnVlIHRoYXQgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MgY291bGQgYmUgYW4gaXNzdWUgd2hlbiBtb3ZpbmcgZGF0YSBiZXR3ZWVuIGtlcm5lbCBhbmQgdXNlciBzcGFjZSwgdGhpcyBwYXRjaCAqYWRkcyogYW4gaW50ZXJuYWwgMS1iaXQgZmllbGQuIFNpbmNlIHRoZSBlbnRpcmUgaGVhZGVyIGFyZWEgdXAgdG8gdGhlIGB0YWlsYCBpcyB6ZXJvZWQgZHVyaW5nIGFsbG9jYXRpb24gYnkgYHNrYnVmZl9jbGVhcmAsIHRoZSBhZGRlZCBiaXQgZG9lc24ndCBwb3NlIGFueSByaXNrIGluIHRoaXMgY2F0ZWdvcnkuIE5vIGRpcmVjdCBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgZXhwb3NlZC5cblxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYW5kIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyoqIFRoZSBgc2tiLVx1MDAzZW5mX2R1cGxpY2F0ZWRgIGJpdCBpdHNlbGYgaXMgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBJdCBpcyBjb3BpZWQgY29ycmVjdGx5IGJ5IGFsbCBpbnZvbHZlZCBmdW5jdGlvbnMsIGxpa2UgYG5mX2NvcHlgIGFuZCBgX19jb3B5X3NrYl9oZWFkZXJgLCBhbmQgaXQgaXMgZXhwbGljaXRseSBzZXQgdG8gMSBpbiB0aGUgZHVwbGljYXRpb24gZnVuY3Rpb25zLiBUaGVyZWZvcmUsIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMganVzdCBub3QgcG9zc2libGUgaW4gdGhpcyBzY2VuYXJpby5cblxuMy4gICoqTmV3IGNvbXBsZXggc3RydWN0dXJlcyBhbmQgaW5pdGlhbGl6YXRpb24/KiogVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBnb29kLiBUaGUgZXhpc3RpbmcgYHN0cnVjdCBza19idWZmYCBiaXRmaWVsZCBpcyBhbHJlYWR5IHplcm9lZCBkdXJpbmcgYWxsb2NhdGlvbi5cblxuNC4gICoqQm91bmRzIGNoZWNrcyBhbmQgdW5pbml0aWFsaXplZCBieXRlcz8qKiBObyBpbXBhY3QuIFRoaXMgcGF0Y2ggZG9lc24ndCB0b3VjaCBhbnl0aGluZyByZWxhdGVkIHRvIHBhY2tldCBwYXlsb2FkIGxlbmd0aHMsIGJ1ZmZlciBzaXplcywgb3IgYW55IGJvdW5kcyBjaGVja2luZyBsb2dpYy5cblxuSW4gY29uY2x1c2lvbiwgdGhpcyBwYXRjaCBpcyBjbGVhbi4gSXQncyBlc3NlbnRpYWxseSBhIHJlY3Vyc2lvbi9sb29wIHByZXZlbnRpb24gZml4IHdpdGhpbiB0aGUgbmV0ZmlsdGVyIGR1cGxpY2F0aW9uIHBhdGguIEkgc2VlIG5vIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgc3VmZmljaWVudCBoZXJlLiBUaGVyZSBpcyBubyBuZWVkIGZvciBkZWRpY2F0ZWQgS01TQU4gYW5hbHlzaXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXIsIGFuZCBpdCBtYWtlcyBzZW5zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzQsIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMDc6MDU6MzEuOTAzODI3MzhaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxcblxcbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSAxLWJpdCBmbGFnIGBuZl9kdXBsaWNhdGVkYCB0byBgc3RydWN0IHNrX2J1ZmZgIGFuZCBzZXRzL2NoZWNrcyBpdCBpbiBgbmZfZHVwX2lwdjRgIGFuZCBgbmZfZHVwX2lwdjZgIHRvIHByZXZlbnQgaW5maW5pdGUgcGFja2V0IGR1cGxpY2F0aW9uIGxvb3BzLlxcblxcbjEuIEluaXRpYWxpemF0aW9uOiBBbGwgYHNrX2J1ZmZgIGluc3RhbmNlcyBhcmUgemVyb2VkIHVwb24gYWxsb2NhdGlvbiB2aWEgYHNrYnVmZl9jbGVhcigpYCAod2hpY2ggemVyb2VzIG1lbW9yeSBmcm9tIHRoZSBzdGFydCBvZiBgc3RydWN0IHNrX2J1ZmZgIHVwIHRvIGB0YWlsYCksIGVuc3VyaW5nIGBuZl9kdXBsaWNhdGVkYCBpcyBpbml0aWFsaXplZCB0byAwLiBJdCBpcyBwcm9wZXJseSBwcmVzZXJ2ZWQgaW4gYG5mX2NvcHkoKWAgYW5kIGBfX2NvcHlfc2tiX2hlYWRlcigpYC5cXG4yLiBObyBJbmZvLUxlYWtzOiBgbmZfZHVwbGljYXRlZGAgaXMgcHVyZWx5IGFuIGludGVybmFsIGtlcm5lbCBzdGF0ZSBmbGFnIHdpdGhpbiBgc3RydWN0IHNrX2J1ZmZgIGFuZCBpcyBuZXZlciBleHBvc2VkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLlxcbjMuIE5vIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgYWx0ZXIgcGFja2V0IGRhdGEgbGVuZ3RocywgcGF5bG9hZCBib3VuZHMsIG9yIGFjY2VzcyBhbnkgdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeS5cXG5cXG5CZWNhdXNlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[1] Phase: Succeeded StartedAt: 2026-08-29 07:05:42 +0000 UTC FinishedAt: 2026-08-29 07:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 07:05:42 +0000 UTC FinishedAt: 2026-08-29 07:05:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2] Phase: Succeeded StartedAt: 2026-08-29 07:05:42 +0000 UTC FinishedAt: 2026-08-29 10:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:05:42 +0000 UTC FinishedAt: 2026-08-29 10:47:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:05:42 +0000 UTC FinishedAt: 2026-08-29 07:05:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:05:42 +0000 UTC FinishedAt: 2026-08-29 07:05:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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-workflowsl8m5/series-workflowsl8m5-convert-artifact-3636364510/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:05:52 +0000 UTC FinishedAt: 2026-08-29 07:21:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:05:52 +0000 UTC FinishedAt: 2026-08-29 07:21:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5fe9e98c-6088-4ece-82c2-113a4fdff095,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-workflowsl8m5/series-workflowsl8m5-convert-artifact-3636364510/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": "e523be45-6ea5-4382-a7ef-0424b78b9dee", "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-workflowsl8m5/series-workflowsl8m5-build-action-2923079108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:05:52 +0000 UTC FinishedAt: 2026-08-29 07:21:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5fe9e98c-6088-4ece-82c2-113a4fdff095,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-workflowsl8m5/series-workflowsl8m5-convert-artifact-3636364510/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": "e523be45-6ea5-4382-a7ef-0424b78b9dee", "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-workflowsl8m5/series-workflowsl8m5-build-action-2923079108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:21:56 +0000 UTC FinishedAt: 2026-08-29 07:21:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:21:56 +0000 UTC FinishedAt: 2026-08-29 07:21:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:21:56 +0000 UTC FinishedAt: 2026-08-29 07:22:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:21:56 +0000 UTC FinishedAt: 2026-08-29 07:22:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-workflowsl8m5/series-workflowsl8m5-convert-artifact-297105041/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:22:06 +0000 UTC FinishedAt: 2026-08-29 07:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:22:06 +0000 UTC FinishedAt: 2026-08-29 07:23:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e523be45-6ea5-4382-a7ef-0424b78b9dee,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-workflowsl8m5/series-workflowsl8m5-build-action-2923079108/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-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:24:00 +0000 UTC FinishedAt: 2026-08-29 07:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:24:00 +0000 UTC FinishedAt: 2026-08-29 07:24:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:24:00 +0000 UTC FinishedAt: 2026-08-29 07:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:24:00 +0000 UTC FinishedAt: 2026-08-29 07:39:45 +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:*5fe9e98c-6088-4ece-82c2-113a4fdff095,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-workflowsl8m5/series-workflowsl8m5-convert-artifact-297105041/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": "149d6c15-88f0-48f7-a5e4-cf043342d776", "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-workflowsl8m5/series-workflowsl8m5-build-action-3352061533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:24:00 +0000 UTC FinishedAt: 2026-08-29 07:39:35 +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:*5fe9e98c-6088-4ece-82c2-113a4fdff095,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-workflowsl8m5/series-workflowsl8m5-convert-artifact-297105041/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": "149d6c15-88f0-48f7-a5e4-cf043342d776", "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-workflowsl8m5/series-workflowsl8m5-build-action-3352061533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:39:45 +0000 UTC FinishedAt: 2026-08-29 07:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:39:45 +0000 UTC FinishedAt: 2026-08-29 07:39:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:39:45 +0000 UTC FinishedAt: 2026-08-29 07:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:39:45 +0000 UTC FinishedAt: 2026-08-29 07:41:33 +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:*149d6c15-88f0-48f7-a5e4-cf043342d776,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-workflowsl8m5/series-workflowsl8m5-build-action-3352061533/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-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:43 +0000 UTC FinishedAt: 2026-08-29 10:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:43 +0000 UTC FinishedAt: 2026-08-29 10:47:09 +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_dup_ipv4","nf_dup_ipv6"],"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:*e523be45-6ea5-4382-a7ef-0424b78b9dee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*149d6c15-88f0-48f7-a5e4-cf043342d776,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-workflowsl8m5/series-workflowsl8m5-build-action-2923079108/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-workflowsl8m5/series-workflowsl8m5-build-action-3352061533/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:43 +0000 UTC FinishedAt: 2026-08-29 07:41:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:43 +0000 UTC FinishedAt: 2026-08-29 07:41:48 +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_dup_ipv4","nf_dup_ipv6"],"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-workflowsl8m5/series-workflowsl8m5-convert-artifact-2240358342/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:43 +0000 UTC FinishedAt: 2026-08-29 07:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:43 +0000 UTC FinishedAt: 2026-08-29 07:41:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:44 +0000 UTC FinishedAt: 2026-08-29 07:41:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:54 +0000 UTC FinishedAt: 2026-08-29 10:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsl8m5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"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_dup_ipv4","nf_dup_ipv6"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a9d62a8774f130a5b8de26ca9f415e6050a9d51","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_DUP_IPV4","NF_DUP_IPV6","NFT_DUP_IPV4","NFT_DUP_IPV6","NETFILTER_XT_TARGET_TEE"],"series_id":"30c321fc-7f68-4f4d-b520-87ec58e418ef","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-08-29 07:41:54 +0000 UTC FinishedAt: 2026-08-29 10:47:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e523be45-6ea5-4382-a7ef-0424b78b9dee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*149d6c15-88f0-48f7-a5e4-cf043342d776,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-workflowsl8m5/series-workflowsl8m5-build-action-2923079108/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-workflowsl8m5/series-workflowsl8m5-build-action-3352061533/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-workflowsl8m5/series-workflowsl8m5-convert-artifact-2240358342/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,}