Name: series-workflowbmrnf Phase: Succeeded StartedAt: 2026-08-18 09:03:54 +0000 UTC FinishedAt: 2026-08-18 12:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[0] Phase: Succeeded StartedAt: 2026-08-18 09:03:54 +0000 UTC FinishedAt: 2026-08-18 09:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 09:03:54 +0000 UTC FinishedAt: 2026-08-18 09:09:25 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG" ], "series_id": "1b97fac1-9baf-4427-ae79-2a61cecdaf04" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "online_pages", "offline_pages", "move_pfn_range_to_zone", "remove_pfn_range_from_zone", "__add_pages", "__remove_pages", "adjust_present_page_count" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b25saW5lX3BhZ2VzJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAgICYjMzQ7bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgY29udGlndW91cyB6b25lcyBhcmUgdHJhY2tlZCwgcmVwbGFjaW5nIGFuIE8oTikgcGFnZWJsb2NrIGl0ZXJhdGlvbiB3aXRoIGFuIE8oMSkgY2hlY2sgdXNpbmcgYSBuZXcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgY291bnRlciBpbiBgc3RydWN0IHpvbmVgLiBUaGlzIGNvdW50ZXIgaXMgdXBkYXRlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuaW5kZXggYjc2MTgzNTQ1ZTViZi4uY2VlYTZjOGIyN2NjMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5AQCAtNDgzLDYgJiM0Mzs0ODMsMTIgQEAgR2VuZXJhbFxuICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdFxuICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC5cbiBcbiYjNDM7YGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYFxuJiM0MzsgIFBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUgYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kXG4mIzQzOyAgbWVtb3J5IGhvbGVzIHdob3NlIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kXG4mIzQzOyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yXG4mIzQzOyAgYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCBpbiBgYGluY2x1ZGUvbGludXgvbW16b25lLmhgYCBmb3IgbW9yZSBkZXRhaWxzLlxuJiM0MztcbiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYFxuICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZVxuICAgZWFybHkgYm9vdCwgZXhjbHVkaW5nIGhvdHBsdWdnZWQgbWVtb3J5LiBEZWZpbmVkIG9ubHkgd2hlblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuaW5kZXggYmNmZTJkOWY0YWRiZC4uOTc2OTliZTlhMzU3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5AQCAtMjQ2LDYgJiM0MzsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbiYjNDM7XHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcykge1xuIFx0XHRyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7XG4gXHRcdGlmIChyZXQpXG5AQCAtMjcwLDYgJiM0MzsyNzEsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFxuIFx0bWVtLVx1MDAzZXpvbmUgPSB6b25lO1xuIG91dDpcbiYjNDM7XHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjk1LDYgJiM0MzsyOTcsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cdTAwM2VhbHRtYXAtXHUwMDNlZnJlZTtcbiBcbiBcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG4mIzQzO1x0Y2xlYXJfem9uZV9jb250aWd1b3VzKG1lbS1cdTAwM2V6b25lKTtcbiBcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuIFx0XHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS1cdTAwM2Vncm91cCxcbiBcdFx0XHRcdFx0ICAtbnJfdm1lbW1hcF9wYWdlcyk7XG5AQCAtMzEyLDggJiM0MzszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0bWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7XG4gXG4tXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuJiM0MztcdHNldF96b25lX2NvbnRpZ3VvdXMobWVtLVx1MDAzZXpvbmUpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWVtLVx1MDAzZXpvbmUgPSBOVUxMO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICYjNDM7MTAzMiwyMSBAQCBzdHJ1Y3Qgem9uZSB7XG4gXHQgKiBjbWEgcGFnZXMgaXMgcHJlc2VudCBwYWdlcyB0aGF0IGFyZSBhc3NpZ25lZCBmb3IgQ01BIHVzZVxuIFx0ICogKE1JR1JBVEVfQ01BKS5cbiBcdCAqXG4mIzQzO1x0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwIHRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlXG4mIzQzO1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZVxuJiM0MztcdCAqIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHBmbl90b19vbmxpbmVfcGFnZSgpXG4mIzQzO1x0ICogc3VjY2VlZHMuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PSBwYWdlc193aXRoX29ubGluZV9tZW1tYXAsXG4mIzQzO1x0ICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55XG4mIzQzO1x0ICogUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhblxuJiM0MztcdCAqIG9ubGluZSBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhblxuJiM0MztcdCAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZlxuJiM0MztcdCAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvXG4mIzQzO1x0ICogY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sgbWF5IHJlc3VsdCBpbiBhXG4mIzQzO1x0ICogXCYjMzQ7dG9vIHNtYWxsXCYjMzQ7IHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cyBkZXRlY3RpbmcgYVxuJiM0MztcdCAqIGNvbnRpZ3VvdXMgem9uZS5cbiYjNDM7XHQgKlxuIFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcbiBcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcbiBcdCAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkXG5AQCAtMTA1Niw2ICYjNDM7MTA3MSw3IEBAIHN0cnVjdCB6b25lIHtcbiBcdGF0b21pY19sb25nX3RcdFx0bWFuYWdlZF9wYWdlcztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0c3Bhbm5lZF9wYWdlcztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cHJlc2VudF9wYWdlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcDtcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXG4gXHR1bnNpZ25lZCBsb25nXHRcdHByZXNlbnRfZWFybHlfcGFnZXM7XG4gI2VuZGlmXG5AQCAtMTY4MSw2ICYjNDM7MTY5NywzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6b25lX2lzX2NvbnRpZ3VvdXMgLSB0ZXN0IHdoZXRoZXIgYSB6b25lIGlzIGNvbnRpZ3VvdXNcbiYjNDM7ICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIEluIGEgY29udGlndW91cyB6b25lLCBpdCBpcyB2YWxpZCB0byBjYWxsIHBmbl90b19wYWdlKCkgb24gYW55IFBGTiBpbiB0aGVcbiYjNDM7ICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZSB0aGF0IG1pc3Npbmcgc3luY2hyb25pemF0aW9uIHdpdGggbWVtb3J5IG9mZmxpbmluZyBtYWtlcyBhbnkgUEZOXG4mIzQzOyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy5cbiYjNDM7ICpcbiYjNDM7ICogWk9ORV9ERVZJQ0Ugem9uZXMgYXJlIGFsd2F5cyBtYXJrZWQgbm9uLWNvbnRpZ3VvdXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBjb250aWd1b3VzLCBvdGhlcndpc2UgZmFsc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRSh6b25lLVx1MDAzZWNvbnRpZ3VvdXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7e1xuJiM0MztcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4mIzQzO1x0XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIGEgem9uZSBoYXMgcGFnZXMgbWFuYWdlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yLlxuICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwLi5mOTMyYjc1NzdjOTJhIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTgwNSwyMSAmIzQzOzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbiYjNDM7XHRpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKVxuIFx0XHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcbiBcbiBcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuIH1cbiBcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR6b25lLVx1MDAzZWNvbnRpZ3VvdXMgPSBmYWxzZTtcbi19XG4tXG4gZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHQgICAgaW50IG10KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMi4uOGRiZDUwZDg4MTU1YSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC00MjIsNDkgJiM0Mzs0MjIsMzkgQEAgaW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4mIzQzO3N0YXRpYyBib29sIHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICYjNDM7PSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xuLVx0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IEFMSUdOX0RPV04ocGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTik7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IFBBR0VTX1BFUl9TVUJTRUNUSU9OIC0gMTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdC8qIEFsbCBwYWdlcyBpbiBhIHN1YnNlY3Rpb24gYXJlIGVpdGhlciBvbmxpbmUgb3Igb2ZmbGluZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdC8qIENoZWNraW5nIHN0YXJ0JiM0MztlbmQgaXMgc3VmZmljaWVudC4gKi9cbiYjNDM7XHRyZXR1cm4gem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkgfHxcbiYjNDM7XHQgICAgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UoZW5kX3BmbikpO1xuJiM0Mzt9XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4mIzQzOy8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4mIzQzO3tcbiYjNDM7XHRmb3IgKDsgc3RhcnRfcGZuIFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4mIzQzO1x0XHRpZiAoc3Vic2VjdGlvbl9vdmVybGFwc196b25lKHN0YXJ0X3Bmbiwgem9uZSkpXG4mIzQzO1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4gXHR9XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogZmluZCB0aGUgYmlnZ2VzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pLiAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHQvKiBwZm4gaXMgdGhlIGVuZCBwZm4gb2YgYSBtZW1vcnkgc2VjdGlvbi4gKi9cbi1cdHBmbiA9IGVuZF9wZm4gLSAxO1xuLVx0Zm9yICg7IHBmbiBcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChwZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0cmV0dXJuIHBmbjtcbiYjNDM7XHRmb3IgKDsgZW5kX3BmbiBcdTAwM2U9IHN0YXJ0X3BmbjsgZW5kX3BmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xuJiM0MztcdFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpXG4mIzQzO1x0XHRcdHJldHVybiBlbmRfcGZuIC0gMTtcbiBcdH1cbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00NzIsNyAmIzQzOzQ2Miw2IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0aW50IG5pZCA9IHpvbmVfdG9fbmlkKHpvbmUpO1xuIFxuIFx0aWYgKHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gPT0gc3RhcnRfcGZuKSB7XG4gXHRcdC8qXG5AQCAtNDgxLDcgJiM0Mzs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxuIFx0XHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcbiYjNDM7XHRcdHBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oem9uZSwgZW5kX3BmbixcbiBcdFx0XHRcdFx0XHR6b25lX2VuZF9wZm4oem9uZSkpO1xuIFx0XHRpZiAocGZuKSB7XG4gXHRcdFx0em9uZS1cdTAwM2VzcGFubmVkX3BhZ2VzID0gem9uZV9lbmRfcGZuKHpvbmUpIC0gcGZuO1xuQEAgLTQ5Nyw3ICYjNDM7NDg2LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdCAqIEluIHRoaXMgY2FzZSwgd2UgZmluZCBzZWNvbmQgYmlnZ2VzdCB2YWxpZCBtZW1fc2VjdGlvbiBmb3JcbiBcdFx0ICogc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4obmlkLCB6b25lLCB6b25lLVx1MDAzZXpvbmVfc3RhcnRfcGZuLFxuJiM0MztcdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgICAgICBzdGFydF9wZm4pO1xuIFx0XHRpZiAocGZuKVxuIFx0XHRcdHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gJiM0MzsgMTtcbkBAIC01NTcsMTggJiM0Mzs1NDYsMTMgQEAgdm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdC8qXG4gXHQgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvXG4tXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXNcbi1cdCAqIHNldF96b25lX2NvbnRpZ3VvdXMoKSBjYW5ub3QgZGVhbCB3aXRoIFpPTkVfREVWSUNFIGVpdGhlciB3YXkuXG4mIzQzO1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXMpO1xuIFx0dXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpO1xuLVxuLVx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiB9XG4gXG4gLyoqXG5AQCAtNzQ2LDggJiM0Mzs3MzAsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuIFxuLVx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuLVxuIFx0aWYgKHpvbmVfaXNfZW1wdHkoem9uZSkpXG4gXHRcdGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG4gXHRyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcbkBAIC03NzUsOCAmIzQzOzc1Nyw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiAmIzQzOzEwNTIsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuIFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxuIFx0XHR6b25lLVx1MDAzZXByZXNlbnRfZWFybHlfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gbnJfcGFnZXM7XG4gXHR6b25lLVx1MDAzZXpvbmVfcGdkYXQtXHUwMDNlbm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIuLmQ2M2VlNTU0ZDdlYjggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTc5OSw2ICYjNDM7Nzk5LDI4IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBcbiYjNDM7c3RhdGljIGJvb2wgX19pbml0IHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3Rfc3Vic2VjdGlvbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdWJzZWN0aW9uID0gcGZuIFx1MDAyNiBQQUdFX1NVQlNFQ1RJT05fTUFTSztcbiYjNDM7XG4mIzQzO1x0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xuJiM0MztcdFx0KmlzX29ubGluZSA9ICEhcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4mIzQzO1x0XHQqbGFzdF9zdWJzZWN0aW9uID0gc3Vic2VjdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuICppc19vbmxpbmU7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3Rfc3Vic2VjdGlvbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qXG4gICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxuICAqIGFyZSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIGJ5IGdvaW5nIHRocm91Z2ggX19pbml0X3NpbmdsZV9wYWdlKCkgZHVyaW5nXG5AQCAtODIyLDIyICYjNDM7ODQ0LDI3IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxuICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxuLVx0XHRcdFx0XHQgIGludCB6b25lLCBpbnQgbm9kZSlcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHU2NCBwZ2NudCA9IDA7XG4mIzQzO1x0dTY0IHBnY250ID0gMCwgb25saW5lX3BnY250ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxhc3Rfc3Vic2VjdGlvbiA9IC0xO1xuJiM0MztcdGJvb2wgaXNfb25saW5lID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XG4gXHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xuIFx0XHRfX1NldFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTtcbiYjNDM7XHRcdGlmICh1bmF2YWlsYWJsZV9wZm5faXNfb25saW5lKHBmbiwgXHUwMDI2bGFzdF9zdWJzZWN0aW9uLCBcdTAwMjZpc19vbmxpbmUpKVxuJiM0MztcdFx0XHRvbmxpbmVfcGdjbnQmIzQzOyYjNDM7O1xuIFx0XHRwZ2NudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRpZiAocGdjbnQpXG4gXHRcdHByX2luZm8oXCYjMzQ7T24gbm9kZSAlZCwgem9uZSAlczogJWxsZCBwYWdlcyBpbiB1bmF2YWlsYWJsZSByYW5nZXNcXG5cJiMzNDssXG4gXHRcdFx0bm9kZSwgem9uZV9uYW1lc1t6b25lXSwgcGdjbnQpO1xuJiM0MztcdHJldHVybiBvbmxpbmVfcGdjbnQ7XG4gfVxuIFxuIC8qXG5AQCAtOTM0LDkgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShlbmRfcGZuIC0gc3RhcnRfcGZuLCBuaWQsIHpvbmVfaWQsIHN0YXJ0X3BmbixcbiBcdFx0XHQgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgbXQsIGZhbHNlKTtcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCpob2xlX3BmbiBcdTAwM2Mgc3RhcnRfcGZuKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZ2NudDtcbiBcbi1cdGlmICgqaG9sZV9wZm4gXHUwMDNjIHN0YXJ0X3Bmbilcbi1cdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZSgqaG9sZV9wZm4sIHN0YXJ0X3Bmbiwgem9uZV9pZCwgbmlkKTtcbiYjNDM7XHRcdGlmIChob2xlX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9zdGFydF9wZm4pIHtcbiYjNDM7XHRcdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgem9uZV9zdGFydF9wZm4sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgem9uZV9pZCwgbmlkKTtcbiYjNDM7XHRcdFx0aG9sZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBnY250ID0gaW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgc3RhcnRfcGZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHpvbmVfaWQsIG5pZCk7XG4mIzQzO1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gcGdjbnQ7XG4mIzQzO1x0fVxuIFxuIFx0KmhvbGVfcGZuID0gZW5kX3BmbjtcbiB9XG5AQCAtMjE5NSwyOCAmIzQzOzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbi1cbi1cdFx0YmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpO1xuLVxuLVx0XHRpZiAoIV9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKGJsb2NrX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0ICAgICBibG9ja19lbmRfcGZuLCB6b25lKSlcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0fVxuLVxuLVx0LyogV2UgY29uZmlybSB0aGF0IHRoZXJlIGlzIG5vIGhvbGUgKi9cbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IHRydWU7XG4tfVxuLVxuIC8qXG4gICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZVxuICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b25saW5lX3BhZ2VzJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAgICYjMzQ7bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgY29udGlndW91cyB6b25lcyBhcmUgdHJhY2tlZCwgcmVwbGFjaW5nIGFuIE8oTikgcGFnZWJsb2NrIGl0ZXJhdGlvbiB3aXRoIGFuIE8oMSkgY2hlY2sgdXNpbmcgYSBuZXcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgY291bnRlciBpbiBgc3RydWN0IHpvbmVgLiBUaGlzIGNvdW50ZXIgaXMgdXBkYXRlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0CmluZGV4IGI3NjE4MzU0NWU1YmYuLmNlZWE2YzhiMjdjYzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKQEAgLTQ4Myw2ICYjNDM7NDgzLDEyIEBAIEdlbmVyYWwKICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdAogICBpcyBpbml0aWFsaXplZCBieSBgYGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoKWBgLgogCiYjNDM7YGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYAomIzQzOyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmQKJiM0MzsgIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZAomIzQzOyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yCiYjNDM7ICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuCiYjNDM7CiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYAogICBUaGUgcHJlc2VudCBwYWdlcyBleGlzdGluZyB3aXRoaW4gdGhlIHpvbmUgbG9jYXRlZCBvbiBtZW1vcnkgYXZhaWxhYmxlIHNpbmNlCiAgIGVhcmx5IGJvb3QsIGV4Y2x1ZGluZyBob3RwbHVnZ2VkIG1lbW9yeS4gRGVmaW5lZCBvbmx5IHdoZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCBiY2ZlMmQ5ZjRhZGJkLi45NzY5OWJlOWEzNTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC0yNDYsNiAmIzQzOzI0Niw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJCW5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tJmd0O2FsdG1hcC0mZ3Q7ZnJlZTsKIAogCW1lbV9ob3RwbHVnX2JlZ2luKCk7CiYjNDM7CWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKIAlpZiAobnJfdm1lbW1hcF9wYWdlcykgewogCQlyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7CiAJCWlmIChyZXQpCkBAIC0yNzAsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAKIAltZW0tJmd0O3pvbmUgPSB6b25lOwogb3V0OgomIzQzOwlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogCW1lbV9ob3RwbHVnX2RvbmUoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjk1LDYgJiM0MzsyOTcsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSkKIAkJbnJfdm1lbW1hcF9wYWdlcyA9IG1lbS0mZ3Q7YWx0bWFwLSZndDtmcmVlOwogCiAJbWVtX2hvdHBsdWdfYmVnaW4oKTsKJiM0MzsJY2xlYXJfem9uZV9jb250aWd1b3VzKG1lbS0mZ3Q7em9uZSk7CiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpCiAJCWFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgbWVtLSZndDtncm91cCwKIAkJCQkJICAtbnJfdm1lbW1hcF9wYWdlcyk7CkBAIC0zMTIsOCAmIzQzOzMxNSwxMCBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSkKIAlpZiAobnJfdm1lbW1hcF9wYWdlcykKIAkJbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7CiAKLQltZW0tJmd0O3pvbmUgPSBOVUxMOwogb3V0OgomIzQzOwlzZXRfem9uZV9jb250aWd1b3VzKG1lbS0mZ3Q7em9uZSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJbWVtLSZndDt6b25lID0gTlVMTDsKIAltZW1faG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTAzMiw2ICYjNDM7MTAzMiwyMSBAQCBzdHJ1Y3Qgem9uZSB7CiAJICogY21hIHBhZ2VzIGlzIHByZXNlbnQgcGFnZXMgdGhhdCBhcmUgYXNzaWduZWQgZm9yIENNQSB1c2UKIAkgKiAoTUlHUkFURV9DTUEpLgogCSAqCiYjNDM7CSAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZQomIzQzOwkgKiBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmQgbWVtb3J5IGhvbGVzIHdob3NlCiYjNDM7CSAqIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHBmbl90b19vbmxpbmVfcGFnZSgpCiYjNDM7CSAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLAomIzQzOwkgKiBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnkKJiM0MzsJICogUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuCiYjNDM7CSAqIG9ubGluZSBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhbgomIzQzOwkgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2YKJiM0MzsJICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG8KJiM0MzsJICogY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sgbWF5IHJlc3VsdCBpbiBhCiYjNDM7CSAqICYjMzQ7dG9vIHNtYWxsJiMzNDsgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhCiYjNDM7CSAqIGNvbnRpZ3VvdXMgem9uZS4KJiM0MzsJICoKIAkgKiBTbyBwcmVzZW50X3BhZ2VzIG1heSBiZSB1c2VkIGJ5IG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBwb3dlcgogCSAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmcKIAkgKiAocHJlc2VudF9wYWdlcyAtIG1hbmFnZWRfcGFnZXMpLiBBbmQgbWFuYWdlZF9wYWdlcyBzaG91bGQgYmUgdXNlZApAQCAtMTA1Niw2ICYjNDM7MTA3MSw3IEBAIHN0cnVjdCB6b25lIHsKIAlhdG9taWNfbG9uZ190CQltYW5hZ2VkX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcJCXNwYW5uZWRfcGFnZXM7CiAJdW5zaWduZWQgbG9uZwkJcHJlc2VudF9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZwkJcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwOwogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQogCXVuc2lnbmVkIGxvbmcJCXByZXNlbnRfZWFybHlfcGFnZXM7CiAjZW5kaWYKQEAgLTE2ODEsNiAmIzQzOzE2OTcsMzggQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiB9CiAjZW5kaWYKIAomIzQzOy8qKgomIzQzOyAqIHpvbmVfaXNfY29udGlndW91cyAtIHRlc3Qgd2hldGhlciBhIHpvbmUgaXMgY29udGlndW91cwomIzQzOyAqIEB6b25lOiB0aGUgem9uZSB0byB0ZXN0LgomIzQzOyAqCiYjNDM7ICogSW4gYSBjb250aWd1b3VzIHpvbmUsIGl0IGlzIHZhbGlkIHRvIGNhbGwgcGZuX3RvX3BhZ2UoKSBvbiBhbnkgUEZOIGluIHRoZQomIzQzOyAqIHNwYW5uZWQgem9uZSB3aXRob3V0IHJlcXVpcmluZyBwZm5fdmFsaWQoKSBvciBwZm5fdG9fb25saW5lX3BhZ2UoKSBjaGVja3MuCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gd2l0aCBtZW1vcnkgb2ZmbGluaW5nIG1ha2VzIGFueSBQRk4KJiM0MzsgKiB0cmF2ZXJzYWwgcHJvbmUgdG8gcmFjZXMuCiYjNDM7ICoKJiM0MzsgKiBaT05FX0RFVklDRSB6b25lcyBhcmUgYWx3YXlzIG1hcmtlZCBub24tY29udGlndW91cy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBjb250aWd1b3VzLCBvdGhlcndpc2UgZmFsc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfY29udGlndW91cyhjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoem9uZS0mZ3Q7Y29udGlndW91cyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJaWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICh6b25lLSZndDtzcGFubmVkX3BhZ2VzID09IHpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCkKJiM0MzsJCVdSSVRFX09OQ0Uoem9uZS0mZ3Q7Y29udGlndW91cywgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwlXUklURV9PTkNFKHpvbmUtJmd0O2NvbnRpZ3VvdXMsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmV0dXJucyB0cnVlIGlmIGEgem9uZSBoYXMgcGFnZXMgbWFuYWdlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yLgogICogQWxsIHRoZSByZWNsYWltIGRlY2lzaW9ucyBoYXZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxODFlNzlmMWQ2YTIwLi5mOTMyYjc1NzdjOTJhIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTgwNSwyMSAmIzQzOzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpCiB7Ci0JaWYgKHpvbmUtJmd0O2NvbnRpZ3VvdXMpCiYjNDM7CWlmICh6b25lX2lzX2NvbnRpZ3VvdXMoem9uZSkpCiAJCXJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pOwogCiAJcmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7CiB9CiAKLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7CiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0Jem9uZS0mZ3Q7Y29udGlndW91cyA9IGZhbHNlOwotfQotCiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQkJCSAgICBpbnQgbXQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMi4uOGRiZDUwZDg4MTU1YSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC00MjIsNDkgJiM0Mzs0MjIsMzkgQEAgaW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCXJldHVybiBlcnI7CiB9CiAKLS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKJiM0MztzdGF0aWMgYm9vbCBzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCB6b25lICp6b25lKQogewotCWZvciAoOyBzdGFydF9wZm4gJmx0OyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7Ci0JCWlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKQotCQkJY29udGludWU7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gQUxJR05fRE9XTihwZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKTsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IFBBR0VTX1BFUl9TVUJTRUNUSU9OIC0gMTsKIAotCQlpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpCi0JCQljb250aW51ZTsKJiM0MzsJLyogQWxsIHBhZ2VzIGluIGEgc3Vic2VjdGlvbiBhcmUgZWl0aGVyIG9ubGluZSBvciBvZmZsaW5lLiAqLwomIzQzOwlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCQlpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpCi0JCQljb250aW51ZTsKJiM0MzsJLyogQ2hlY2tpbmcgc3RhcnQmIzQzO2VuZCBpcyBzdWZmaWNpZW50LiAqLwomIzQzOwlyZXR1cm4gem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkgfHwKJiM0MzsJICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTsKJiM0Mzt9CiAKLQkJcmV0dXJuIHN0YXJ0X3BmbjsKJiM0MzsvKiBmaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiYjNDM7ewomIzQzOwlmb3IgKDsgc3RhcnRfcGZuICZsdDsgZW5kX3Bmbjsgc3RhcnRfcGZuICYjNDM7PSBQQUdFU19QRVJfU1VCU0VDVElPTikgewomIzQzOwkJaWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShzdGFydF9wZm4sIHpvbmUpKQomIzQzOwkJCXJldHVybiBzdGFydF9wZm47CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZpbmQgdGhlIGJpZ2dlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKS4gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JLyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovCi0JcGZuID0gZW5kX3BmbiAtIDE7Ci0JZm9yICg7IHBmbiAmZ3Q7PSBzdGFydF9wZm47IHBmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikgewotCQlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldHVybiBwZm47CiYjNDM7CWZvciAoOyBlbmRfcGZuICZndDs9IHN0YXJ0X3BmbjsgZW5kX3BmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikgewomIzQzOwkJaWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpCiYjNDM7CQkJcmV0dXJuIGVuZF9wZm4gLSAxOwogCX0KLQogCXJldHVybiAwOwogfQogCkBAIC00NzIsNyAmIzQzOzQ2Miw2IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JaW50IG5pZCA9IHpvbmVfdG9fbmlkKHpvbmUpOwogCiAJaWYgKHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuID09IHN0YXJ0X3BmbikgewogCQkvKgpAQCAtNDgxLDcgJiM0Mzs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvbgogCQkgKiBmb3Igc2hyaW5raW5nIHpvbmUuCiAJCSAqLwotCQlwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbiwKJiM0MzsJCXBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oem9uZSwgZW5kX3BmbiwKIAkJCQkJCXpvbmVfZW5kX3Bmbih6b25lKSk7CiAJCWlmIChwZm4pIHsKIAkJCXpvbmUtJmd0O3NwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47CkBAIC00OTcsNyAmIzQzOzQ4Niw3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkgKiBJbiB0aGlzIGNhc2UsIHdlIGZpbmQgc2Vjb25kIGJpZ2dlc3QgdmFsaWQgbWVtX3NlY3Rpb24gZm9yCiAJCSAqIHNocmlua2luZyB6b25lLgogCQkgKi8KLQkJcGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgem9uZS0mZ3Q7em9uZV9zdGFydF9wZm4sCiYjNDM7CQlwZm4gPSBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oem9uZSwgem9uZS0mZ3Q7em9uZV9zdGFydF9wZm4sCiAJCQkJCSAgICAgICBzdGFydF9wZm4pOwogCQlpZiAocGZuKQogCQkJem9uZS0mZ3Q7c3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuICYjNDM7IDE7CkBAIC01NTcsMTggJiM0Mzs1NDYsMTMgQEAgdm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAogCS8qCiAJICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTbwotCSAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgdGhlIHpvbmVzIC0gd2hpY2ggaXMgb2theSBhcwotCSAqIHNldF96b25lX2NvbnRpZ3VvdXMoKSBjYW5ub3QgZGVhbCB3aXRoIFpPTkVfREVWSUNFIGVpdGhlciB3YXkuCiYjNDM7CSAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgaXQuCiAJICovCiAJaWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpCiAJCXJldHVybjsKIAotCWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKLQogCXNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXMpOwogCXVwZGF0ZV9wZ2RhdF9zcGFuKHBnZGF0KTsKLQotCXNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiB9CiAKIC8qKgpAQCAtNzQ2LDggJiM0Mzs3MzAsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLSZndDt6b25lX3BnZGF0OwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKIAotCWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKLQogCWlmICh6b25lX2lzX2VtcHR5KHpvbmUpKQogCQlpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCXJlc2l6ZV96b25lX3JhbmdlKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwpAQCAtNzc1LDggJiM0Mzs3NTcsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCW1lbW1hcF9pbml0X3JhbmdlKG5yX3BhZ2VzLCBuaWQsIHpvbmVfaWR4KHpvbmUpLCBzdGFydF9wZm4sIDAsCiAJCQkgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLAogCQkJIGlzb2xhdGVfcGFnZWJsb2NrKTsKLQotCXNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiB9CiAKIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMgewpAQCAtMTA3Miw2ICYjNDM7MTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsCiAJaWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKQogCQl6b25lLSZndDtwcmVzZW50X2Vhcmx5X3BhZ2VzICYjNDM7PSBucl9wYWdlczsKIAl6b25lLSZndDtwcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlczsKJiM0MzsJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBucl9wYWdlczsKIAl6b25lLSZndDt6b25lX3BnZGF0LSZndDtub2RlX3ByZXNlbnRfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzOwogCiAJaWYgKGdyb3VwICZhbXA7JmFtcDsgbW92YWJsZSkKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBmMWFmZTAyM2U0ZTcyLi5kNjNlZTU1NGQ3ZWI4IDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC03OTksNiAmIzQzOzc5OSwyOCBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAJX19pbml0X2RlZmVycmVkX3BhZ2UocGZuLCBuaWQpOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUAomIzQzO3N0YXRpYyBib29sIF9faW5pdCB1bmF2YWlsYWJsZV9wZm5faXNfb25saW5lKHVuc2lnbmVkIGxvbmcgcGZuLAomIzQzOwkJCQkJICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sCiYjNDM7CQkJCQkgICAgIGJvb2wgKmlzX29ubGluZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3Vic2VjdGlvbiA9IHBmbiAmYW1wOyBQQUdFX1NVQlNFQ1RJT05fTUFTSzsKJiM0MzsKJiM0MzsJaWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikgewomIzQzOwkJKmlzX29ubGluZSA9ICEhcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CQkqbGFzdF9zdWJzZWN0aW9uID0gc3Vic2VjdGlvbjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gKmlzX29ubGluZTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLAomIzQzOwkJCQkJICAgICBib29sICppc19vbmxpbmUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeQogICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmcKQEAgLTgyMiwyMiAmIzQzOzg0NCwyNyBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdAogICogICBzZWN0aW9uIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgem9uZS9ub2RlIGJlbG93LgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBlcGZuLAotCQkJCQkgIGludCB6b25lLCBpbnQgbm9kZSkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyBlcGZuLAomIzQzOwkJCQkJCSAgIGludCB6b25lLCBpbnQgbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1NjQgcGdjbnQgPSAwOwomIzQzOwl1NjQgcGdjbnQgPSAwLCBvbmxpbmVfcGdjbnQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGxhc3Rfc3Vic2VjdGlvbiA9IC0xOwomIzQzOwlib29sIGlzX29ubGluZSA9IGZhbHNlOwogCiAJZm9yX2VhY2hfdmFsaWRfcGZuKHBmbiwgc3BmbiwgZXBmbikgewogCQlfX2luaXRfc2luZ2xlX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwgcGZuLCB6b25lLCBub2RlKTsKIAkJX19TZXRQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7CiYjNDM7CQlpZiAodW5hdmFpbGFibGVfcGZuX2lzX29ubGluZShwZm4sICZhbXA7bGFzdF9zdWJzZWN0aW9uLCAmYW1wO2lzX29ubGluZSkpCiYjNDM7CQkJb25saW5lX3BnY250JiM0MzsmIzQzOzsKIAkJcGdjbnQmIzQzOyYjNDM7OwogCX0KIAogCWlmIChwZ2NudCkKIAkJcHJfaW5mbygmIzM0O09uIG5vZGUgJWQsIHpvbmUgJXM6ICVsbGQgcGFnZXMgaW4gdW5hdmFpbGFibGUgcmFuZ2VzXG4mIzM0OywKIAkJCW5vZGUsIHpvbmVfbmFtZXNbem9uZV0sIHBnY250KTsKJiM0MzsJcmV0dXJuIG9ubGluZV9wZ2NudDsKIH0KIAogLyoKQEAgLTkzNCw5ICYjNDM7OTYxLDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLAogCiAJbWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sCiAJCQkgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgbXQsIGZhbHNlKTsKJiM0MzsJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwomIzQzOwomIzQzOwlpZiAoKmhvbGVfcGZuICZsdDsgc3RhcnRfcGZuKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuOwomIzQzOwkJdW5zaWduZWQgbG9uZyBwZ2NudDsKIAotCWlmICgqaG9sZV9wZm4gJmx0OyBzdGFydF9wZm4pCi0JCWluaXRfdW5hdmFpbGFibGVfcmFuZ2UoKmhvbGVfcGZuLCBzdGFydF9wZm4sIHpvbmVfaWQsIG5pZCk7CiYjNDM7CQlpZiAoaG9sZV9zdGFydF9wZm4gJmx0OyB6b25lX3N0YXJ0X3BmbikgewomIzQzOwkJCWluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHpvbmVfc3RhcnRfcGZuLAomIzQzOwkJCQkJICAgICAgIHpvbmVfaWQsIG5pZCk7CiYjNDM7CQkJaG9sZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjsKJiM0MzsJCX0KJiM0MzsJCXBnY250ID0gaW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgc3RhcnRfcGZuLAomIzQzOwkJCQkJICAgICAgIHpvbmVfaWQsIG5pZCk7CiYjNDM7CQl6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXAgJiM0Mzs9IHBnY250OwomIzQzOwl9CiAKIAkqaG9sZV9wZm4gPSBlbmRfcGZuOwogfQpAQCAtMjE5NSwyOCAmIzQzOzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCiB9CiAjZW5kaWYKIAotdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQotewotCXVuc2lnbmVkIGxvbmcgYmxvY2tfc3RhcnRfcGZuID0gem9uZS0mZ3Q7em9uZV9zdGFydF9wZm47Ci0JdW5zaWduZWQgbG9uZyBibG9ja19lbmRfcGZuOwotCi0JYmxvY2tfZW5kX3BmbiA9IHBhZ2VibG9ja19lbmRfcGZuKGJsb2NrX3N0YXJ0X3Bmbik7Ci0JZm9yICg7IGJsb2NrX3N0YXJ0X3BmbiAmbHQ7IHpvbmVfZW5kX3Bmbih6b25lKTsKLQkJCWJsb2NrX3N0YXJ0X3BmbiA9IGJsb2NrX2VuZF9wZm4sCi0JCQkgYmxvY2tfZW5kX3BmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7Ci0KLQkJYmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpOwotCi0JCWlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLAotCQkJCQkgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKQotCQkJcmV0dXJuOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0KLQkvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqLwotCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSB0cnVlOwotfQotCiAvKgogICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZQogICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFNjb3BlKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcgYXR0ZW50aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdHBsdWcsIHdoaWNoIGFsd2F5cyByYWlzZXMgYSBmbGFnLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyB0aGUgdHJhY2tpbmcgb2YgY29udGlndW91cyBtZW1vcnkgem9uZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIGNhbGN1bGF0aW9uIG9mIGB6b25lLSZndDtjb250aWd1b3VzYC4gSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlYmxvY2tzLCBpdCYjMzk7cyBub3cgdXNpbmcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgYW5kIGludHJvZHVjaW5nIGB6b25lX2lzX2NvbnRpZ3VvdXMoKWAsIGBzZXRfem9uZV9jb250aWd1b3VzKClgLCBhbmQgYGNsZWFyX3pvbmVfY29udGlndW91cygpYCB3aGljaCBpcyBtb3JlIGVmZmljaWVudCwgZXNwZWNpYWxseSBpbiBsYXJnZXIgem9uZXMuCgpTcGVjaWZpY2FsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG86CgoqICAgYGluY2x1ZGUvbGludXgvbW16b25lLmhgOiBEZWZpbmluZyB0aGUgbmV3IGRhdGEgYW5kIGZ1bmN0aW9ucy4KKiAgIGBtbS9pbnRlcm5hbC5oYDogUmVwbGFjaW5nIHNvbWUgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlIG5ldyBoZWxwZXIgZnVuY3Rpb25zLgoqICAgYG1tL21lbW9yeV9ob3RwbHVnLmNgOiBVcGRhdGluZyBzb21lIG9mIHRoZSBob3RwbHVnIHJvdXRpbmVzIGFuZCBpbnRyb2R1Y2luZyBoZWxwZXIgZnVuY3Rpb25zLgoqICAgYG1tL21tX2luaXQuY2A6IEluaXRpYWxpemluZyB0aGluZ3MgZm9yIGhvdHBsdWcgd2l0aCB0aGlzIHVwZGF0ZWQgaW1wbGVtZW50YXRpb24uCiogICBgZHJpdmVycy9iYXNlL21lbW9yeS5jYDogQW5kIGltcG9ydGFudGx5LCBjaGFuZ2luZyBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAsIHdoaWNoIGFyZSBzeXNmcyBleHBvc2VkLCBzbyBpbnRlcmVzdGluZy4KClRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IGNvbnRpZ3VvdXMgbWVtb3J5IGlzIG1hbmFnZWQuIEl0JiMzOTtzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcGVyZm9ybWFuY2UsIHRoYXQgaXMgd29ydGggYW5hbHl6aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBldmVuIHBlcmZvcm1hbmNlLXJlbGF0ZWQgY2hhbmdlcyBjYW4gaGF2ZSBzdWJ0bGUgZWZmZWN0cyBvbiB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEtWTSwgb3IgZXZlbiBBQ1BJIG1lbW9yeSBob3RwbHVnIG9yIHZpcnRpby1tZW0uCgpUaGUgYG1tX2luaXQuY2AgY2hhbmdlcyBtZWFuIHRoaXMgd2lsbCBhbHNvIGJlIGV4ZWN1dGVkIGF0IGJvb3QgdGltZSwgYW5kIHRoYXQmIzM5O3Mgc29tZXRoaW5nIGVsc2UgdG8ga2VlcCBpbiBtaW5kLgoKTXkgdGhvdWdodCBwcm9jZXNzIGlzOiB3aGF0IHBhcnRzIGFyZSBtb3N0IGludGVyZXN0aW5nIHRvIGxvb2sgYXQ/CgpgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgYXJlIHRyaWdnZXJlZCB2aWEgc3lzZnMsIG1ha2luZyB0aGVtIHByaW1lIGZ1enppbmcgdGFyZ2V0cyBkdWUgdG8gdGhlaXIgZXh0ZXJuYWwgaW50ZXJmYWNlLiBBbHNvLCBgX19hZGRfcGFnZXNgIGFuZCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGFuZCBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAsIHVzZWQgaW4gbWVtb3J5IGhvdHBsdWcuIExldCYjMzk7cyBzZWUgaWYgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIHNldDsgc2luY2UgdGhpcyBpcyBrZXJuZWwsIGl0JiMzOTtzIHByb2JhYmx5IGFsbW9zdCBhbHdheXMgZW5hYmxlZCBmb3IgZnV6emluZyBrZXJuZWxzLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgbWVtb3J5X2Jsb2NrX29ubGluZWAuIFNpbmNlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgY2FsbGluZyBjb250ZXh0cyBhcmUgbGltaXRlZCwgYnV0IGZpbmRpbmcgdGhlbSBpcyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9ibG9ja19vbmxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTIxNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtYmxrX25yX3BvaXNvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyMy0gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyMjQ6c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yMjUte1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zMzE9bWVtb3J5X2Jsb2NrX2FjdGlvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzYtXHRjYXNlIE1FTV9PTkxJTkU6XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzM3Olx0XHRyZXQgPSBtZW1vcnlfYmxvY2tfb25saW5lKG1lbSk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzM4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IFN1YnN5c3RlbSBPbmxpbmUgVHJpZ2dlcioqCgpSaWdodCwgc28gYG1lbW9yeV9ibG9ja19hY3Rpb25gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHVsdGltYXRlbHkgYmVpbmcgY2FsbGVkIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGtleSBvcGVyYXRpb24uIEFuZCB3aGVyZSYjMzk7cyBpdCBjb21pbmcgZnJvbT8gQWgsIGl0JiMzOTtzIGJlaW5nIHRyaWdnZXJlZCB2aWEgYG1lbW9yeV9zdWJzeXNfb25saW5lYC4gSW50ZXJlc3RpbmcuIGBtZW1vcnlfc3Vic3lzX29ubGluZWAgaXRzZWxmIGlzIGluaXRpYXRlZCBieSBhIHN5c2ZzIGV2ZW50LgoKU28sIHRoZSBjYXVzYWwgY2hhaW4gaXM6IHN5c2ZzIGV2ZW50IC0mZ3Q7IGBtZW1vcnlfc3Vic3lzX29ubGluZWAgLSZndDsgYG1lbW9yeV9ibG9ja19hY3Rpb25gLiBHaXZlbiB0aGF0LCBteSBmb2N1cyBub3cgbmVlZHMgdG8gYmUgb24gYG1lbW9yeV9zdWJzeXNfb25saW5lYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGl0JiMzOTtzIGRvaW5nLCAqd2h5KiBpdCYjMzk7cyBkb2luZyBpdCwgYW5kICpob3cqIHRoYXQgcmVsYXRlcyB0byB0aGUgc3lzZnMgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJcyB0aGlzIGEgaG90cGx1ZyBzY2VuYXJpbz8gRHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG1lbW9yeV9zdWJzeXNfb25saW5lYCBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgb25saW5lIHByb2NlZHVyZSB0byBiZSBhYmxlIHRvIHByZWRpY3Qgd2hhdCBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAgd2lsbCBldmVudHVhbGx5IGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9zdWJzeXNfb25saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYz01Mz1FWFBPUlRfU1lNQk9MKHNlY3Rpb25zX3Blcl9ibG9jayk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTQtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NTU6c3RhdGljIGludCBtZW1vcnlfc3Vic3lzX29ubGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTU2LXN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vZmZsaW5lKHN0cnVjdCBkZXZpY2UgKmRldik7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbWVtb3J5X3N1YnN5cyA9IHtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjAtXHQuZGV2X25hbWUgPSBNRU1PUllfQ0xBU1NfTkFNRSxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MTpcdC5vbmxpbmUgPSBtZW1vcnlfc3Vic3lzX29ubGluZSxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02Mi1cdC5vZmZsaW5lID0gbWVtb3J5X3N1YnN5c19vZmZsaW5lLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zNTE9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfY2hhbmdlX3N0YXRlKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSxcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzY4LS8qIFRoZSBkZXZpY2UgbG9jayBzZXJpYWxpemVzIG9wZXJhdGlvbnMgb24gbWVtb3J5X3N1YnN5c19bb25saW5lfG9mZmxpbmVdICovXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzY5OnN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vbmxpbmUoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTM3MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3lzdGVtIFRyaWdnZXIqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcyDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgdGhlIG1lY2hhbmlzbSBiZWluZyB1c2VkLCBvciBpZiBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHRyaWdnZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHN5c2ZzLCBvciBpZiBpdCYjMzk7cyBldmVuIHBhcnQgb2YgdGhlIGN1cnJlbnQgcHJvYmxlbS4gUGVyaGFwcyB0aGUgcXVlc3Rpb24gaXNuJiMzOTt0IHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCwgYnV0IGhvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NzExPXN0YXRpYyBpbmxpbmUgdm9pZCBzZWN0aW9uX3RhaW50X3pvbmVfZGV2aWNlKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI0LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzo3MjU6dm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA2ND1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNzMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNzQ6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfVU5NT1ZBQkxFLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDc1LVx0XHRcdCAgICAgICBmYWxzZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTQ1LVx0LyogYXNzb2NpYXRlIHBmbiByYW5nZSB3aXRoIHRoZSB6b25lICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjExNDY6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE0Ny1cdFx0XHQgICAgICAgdHJ1ZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTY2PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3MS1cdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJiMzOTt0XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxNzI6XHQgKiBvZmZsaW5lIGl0LiBBIG5vZGUgc3BhbnMgbWVtb3J5IGFmdGVyIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoKSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3My1cdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yMjgtXHRcdHpvbmUgPSBcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXTtcbm1tL21lbXJlbWFwLmM6MjI5Olx0XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbm1tL21lbXJlbWFwLmMtMjMwLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2VfbGVuKHJhbmdlKSksIHBhcmFtcy1cdTAwM2VhbHRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVudGFsIFdhbGt0aHJvdWdoIG9mIE1lbW9yeSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBtZW1vcnkgaG90cGx1ZyBpbXBsZW1lbnRhdGlvbi4gSSBzZWUgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGJlaW5nIGNhbGxlZCDigJMgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgb2J2aW91c2x5IOKAkyBhbmQgaXQgbG9va3MgbGlrZSB0aGUgbWFpbiBwYXRocyB0byBpdCBhcmUgdGhyb3VnaCBgb25saW5lX3BhZ2VzYCBhbmQgYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgLiBSaWdodCwgbWFrZXMgc2Vuc2Ugc28gZmFyLiBOb3csIGBvbmxpbmVfcGFnZXNgIGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgYG1lbW9yeV9ibG9ja19vbmxpbmVgLiBBaGEhIFRoYXQgdGVsbHMgbWUgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBieSBleHRlbnNpb24sIGl0cyBjb3VudGVycGFydCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBkZWFsaW5nIHdpdGggdGhpcyB3aG9sZSBob3RwbHVnIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuIFdhaXQgYSBzZWNvbmQsIGRpZG4mIzM5O3QgSSBub3RpY2UgdGhhdCBgbWVtb3J5X2Jsb2NrX29ubGluZWAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IFRoYXQmIzM5O3PigKYgaW50ZXJlc3RpbmcuIEl0IGxpbWl0cyBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSwgZm9yIHN1cmUuIFNvLCB0aGVuIHdoYXQgYWJvdXQgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYD8gSSBuZWVkIHRvIGdvIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGVpciByb2xlIGluIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB0cmFjZSB0aG9zZSBjYWxscyB0byBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvbmxpbmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz02MzM9RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19vbmxpbmVfcGFnZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTYzNC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NjM1OnN0YXRpYyB2b2lkIG9ubGluZV9wYWdlc19yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjM2LXtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTkzNz1zdGF0aWMgc3RydWN0IHpvbmUgKmF1dG9fbW92YWJsZV96b25lX2Zvcl9wZm4oaW50IG5pZCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk0MS17XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjk0MjpcdHVuc2lnbmVkIGxvbmcgb25saW5lX3BhZ2VzID0gMCwgbWF4X3BhZ2VzLCBlbmRfcGZuO1xubW0vbWVtb3J5X2hvdHBsdWcuYy05NDMtXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk0OS1cdFx0bWF4X3BhZ2VzID0gZ3JvdXAtXHUwMDNlcy5tYXhfcGFnZXM7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjk1MDpcdFx0b25saW5lX3BhZ2VzID0gZ3JvdXAtXHUwMDNlcHJlc2VudF9tb3ZhYmxlX3BhZ2VzO1xubW0vbWVtb3J5X2hvdHBsdWcuYy05NTEtXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy05NzMtXHRcdFx0XHRnb3RvIGtlcm5lbF96b25lO1xubW0vbWVtb3J5X2hvdHBsdWcuYzo5NzQ6XHRcdFx0b25saW5lX3BhZ2VzICYjNDM7PSBQQUdFU19QRVJfU0VDVElPTjtcbm1tL21lbW9yeV9ob3RwbHVnLmMtOTc1LVx0XHR9XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy05ODItXHQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6OTgzOlx0bnJfcGFnZXMgPSBtYXhfcGFnZXMgLSBvbmxpbmVfcGFnZXM7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk4NC1cdGlmICghYXV0b19tb3ZhYmxlX2Nhbl9vbmxpbmVfbW92YWJsZShOVU1BX05PX05PREUsIGdyb3VwLCBucl9wYWdlcykpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDk1PXZvaWQgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExNy0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTExODppbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTE5LVx0XHQgICAgICAgc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4MC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MTpcdG9ubGluZV9wYWdlc19yYW5nZShwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4Mi1cdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMjItZmFpbGVkX2FkZGl0aW9uOlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjIzOlx0cHJfZGVidWcoXCYjMzQ7b25saW5lX3BhZ2VzIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdIGZhaWxlZFxcblwmIzM0Oyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyNC1cdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpIHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE0NzU9aW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NTMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NTQ6XHQvKiBkZXZpY2Vfb25saW5lKCkgd2lsbCB0YWtlIHRoZSBsb2NrIHdoZW4gY2FsbGluZyBvbmxpbmVfcGFnZXMoKSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTU1LVx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg4Mz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MTYtXHQgKiBDb25zZXF1ZW50bHksIG1lbW9yeSBibG9ja3Mgd2l0aCBob2xlcyBjYW4gbmV2ZXIgZ2V0IG9ubGluZWRcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTkxNzpcdCAqIHZpYSB0aGUgaG90cGx1ZyBwYXRoIC0gb25saW5lX3BhZ2VzKCkgLSBhcyBob3RwbHVnZ2VkIG1lbW9yeSBoYXNcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkxOC1cdCAqIG5vIGhvbGVzLiBUaGlzIHdheSwgd2UgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgbWVtb3J5IGhvbGVzLFxuLS1cbm1tL21tX2luaXQuYz0xNTIzPXZvaWQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vbW1faW5pdC5jLTE1NTQtXHQgKiBjbGVhciBhbGwgem9uZXMmIzM5OyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXG5tbS9tbV9pbml0LmM6MTU1NTpcdCAqIGJlIHVwZGF0ZWQgaW4gb25saW5lX3BhZ2VzKCkgYW5kIG9mZmxpbmVfcGFnZXMoKS5cbm1tL21tX2luaXQuYy0xNTU2LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzM1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgU3RhdGljIENvbnRlbnQgJmFtcDsgRXhwb3J0ZWQgRGF0YSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIHByZXNlbnRhdGlvbiBvZiBvdXIgZGF0YS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwb3J0ZWQsIG9yIG5vbi1zdGF0aWMsIGNvbXBvbmVudHMgcmVwcmVzZW50ZWQgYnkgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIHByb3Blcmx5IGFjY291bnRlZCBmb3IsIGFuZCB0aGF0IHRoZSBleHBvcnQgcHJvY2VzcyBpcyByb2J1c3QuIFNpbmNlIGJvdGggYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYCBhcmUgbm9uLXN0YXRpYyBhbmQgcHJvYmFibHkgY29udGFpbiB1c2VmdWwgaW5mb3JtYXRpb24sIEkgc2hvdWxkIGNoZWNrIG9uIHRoZSBgb2ZmbGluZV9wYWdlc2AgY29tcG9uZW50IGFzIHdlbGwuIExldCYjMzk7cyBtYWtlIHN1cmUgaXTigJlzIGhhbmRsZWQganVzdCBhcyBjYXJlZnVsbHkgYXMgdGhlIG9ubGluZSBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz01Mjg9dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU2Ny0gKiBzdXJlIHRoYXQgcGFnZXMgYXJlIG1hcmtlZCByZXNlcnZlZCBhbmQgem9uZXMgYXJlIGFkanVzdCBwcm9wZXJseSBieVxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Njg6ICogY2FsbGluZyBvZmZsaW5lX3BhZ2VzKCkuXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU2OS0gKi9cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4NzE9c3RhdGljIGludCBjb3VudF9zeXN0ZW1fcmFtX3BhZ2VzX2NiKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg4Mi0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTg4MzppbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg4NC1cdFx0XHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXG4tLVxubW0vbW1faW5pdC5jPTE1MjM9dm9pZCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9tbV9pbml0LmMtMTU1NC1cdCAqIGNsZWFyIGFsbCB6b25lcyYjMzk7IHByZXNlbnRfcGFnZXMgYW5kIG1hbmFnZWRfcGFnZXMgYmVjYXVzZSB0aGV5IHdpbGxcbm1tL21tX2luaXQuYzoxNTU1Olx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxubW0vbW1faW5pdC5jLTE1NTYtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgY2FuZGlkYXRlcyBmb3IgZnV6emluZzoKCioqTXkgRnV6emluZyBUYXJnZXQgQnJhaW5zdG9ybSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzIHN5c3RlbSwgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYCBsb29rIGxpa2UgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGF0dGFjay4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cyB3aGVyZSBkYXRhIGludGVyYWN0aW9uIGlzIGxpa2VseS4gQmV5b25kIHRob3NlLCBJJiMzOTttIGFsc28gZXllaW5nIG1ldGhvZHMgbGlrZSBgX19hZGRfcGFnZXNgIGFuZCBgX19yZW1vdmVfcGFnZXNgLiBUaG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMgY291bGQgYmUgc3VzY2VwdGlibGUgdG8gYnVmZmVyIG92ZXJmbG93cyBvciB1bmV4cGVjdGVkIGlucHV0IHNjZW5hcmlvcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19hZGRfcGFnZXNgIGZpcnN0OyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FkZF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTM3OT1FWFBPUlRfU1lNQk9MX0dQTChwZm5fdG9fb25saW5lX3BhZ2UpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0zODAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjM4MTppbnQgX19hZGRfcGFnZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTM4Mi1cdFx0c3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQ2hlY2tpbmcgdGhlIFBhZ2UgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgc28gYF9fYWRkX3BhZ2VzYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGFjY2Vzc2liaWxpdHkuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY291bnRlcnBhcnQuIExldCYjMzk7cyBtb3ZlIG9uIHRvIGNoZWNraW5nIHRoZSBhdmFpbGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgYF9fcmVtb3ZlX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvbXBsZXRlIGFuZCBzeW1tZXRyaWMgaW4gaXRzIHBhZ2UgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHN5c3RlbSByZWxpYWJpbGl0eSBhbmQgcHJlZGljdGFibGUgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgaWYgYF9fcmVtb3ZlX3BhZ2VzYCBpcyBhbHNvIGV4cG9ydGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSYjMzk7cyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmVtb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NTI4PXZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01NTgtLyoqXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU1OTogKiBfX3JlbW92ZV9wYWdlcygpIC0gcmVtb3ZlIHNlY3Rpb25zIG9mIHBhZ2VzXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU2MC0gKiBAcGZuOiBzdGFydGluZyBwYWdlZnJhbWUgKG11c3QgYmUgYWxpZ25lZCB0byBzdGFydCBvZiBhIHNlY3Rpb24pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01NjktICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU3MDp2b2lkIF9fcmVtb3ZlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NzEtXHRcdCAgICBzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbi0tXG5tbS9tZW1yZW1hcC5jPTg2PXN0YXRpYyB2b2lkIHBhZ2V1bm1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgcmFuZ2VfaWQpXG4tLVxubW0vbWVtcmVtYXAuYy05OC1cdGlmIChwZ21hcC1cdTAwM2V0eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSkge1xubW0vbWVtcmVtYXAuYzo5OTpcdFx0X19yZW1vdmVfcGFnZXMoUEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxubW0vbWVtcmVtYXAuYy0xMDAtXHRcdFx0ICAgICAgIFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpLCBOVUxMLCBwZ21hcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gYF9fcmVtb3ZlX3BhZ2VzYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGtleSBmb3IgYSBzcGVjaWZpYyB0eXBlIG9mIG1lbW9yeSByZWNsYW1hdGlvbi4gQnV0IG5vdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgb3BlcmF0aW9uc+KApiB3aGF0IGFib3V0IGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBhbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYD8gVGhleSYjMzk7cmUgY2xlYXJseSBpbnRlbmRlZCBmb3IgbWFuaXB1bGF0aW5nIHBhZ2UgZnJhbWUgbnVtYmVycyAoUEZOcykgYW5kIHRoZWlyIGFsbG9jYXRpb24gc3RhdHVzIHdpdGhpbiBkaWZmZXJlbnQgbWVtb3J5IHpvbmVzLiBBcmUgdGhvc2UgZXhwb3J0ZWQgYXMgd2VsbD8gSSBjYW4gc2VlIGEgZmV3IHVzZS1jYXNlcyBmb3IgdGhhdCwgYW5kIGl0IHdvdWxkIHJlYWxseSBvcGVuIHVwIHNvbWUgcG9zc2liaWxpdGllcy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnQgdGFibGVzLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIGluIHNvbWUgaGlnaGVyLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGV5IG9ubHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzYWdlIHdpdGhpbiB0aGUga2VybmVsLCBvciBhcmUgdGhleSBwb3RlbnRpYWxseSB1c2VkIGJ5IHNvbWUgZHJpdmVycyB0b28/IEkgd2FudCB0byBkZXRlcm1pbmUgdGhlaXIgYXZhaWxhYmlsaXR5LiBJdCBzZWVtcyB0aGVpciBleHBvc3VyZSBkaWN0YXRlcyBhIGxvdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NzExPXN0YXRpYyBpbmxpbmUgdm9pZCBzZWN0aW9uX3RhaW50X3pvbmVfZGV2aWNlKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI0LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzo3MjU6dm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA2ND1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNzMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNzQ6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfVU5NT1ZBQkxFLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDc1LVx0XHRcdCAgICAgICBmYWxzZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTQ1LVx0LyogYXNzb2NpYXRlIHBmbiByYW5nZSB3aXRoIHRoZSB6b25lICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjExNDY6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE0Ny1cdFx0XHQgICAgICAgdHJ1ZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTY2PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3MS1cdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJiMzOTt0XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxNzI6XHQgKiBvZmZsaW5lIGl0LiBBIG5vZGUgc3BhbnMgbWVtb3J5IGFmdGVyIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoKSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3My1cdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yMjgtXHRcdHpvbmUgPSBcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXTtcbm1tL21lbXJlbWFwLmM6MjI5Olx0XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbm1tL21lbXJlbWFwLmMtMjMwLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2VfbGVuKHJhbmdlKSksIHBhcmFtcy1cdTAwM2VhbHRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDA4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipFeGFtaW5pbmcgUEZOIFJhbmdlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGlzbiYjMzk7dCBhIHN5bWJvbCBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIHRoZSBrZXJuZWwgbW9kdWxlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSBzaG93c3RvcHBlci4gV2hhdCBJICpyZWFsbHkqIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyBob3cgbWVtb3J5IHJhbmdlcyBhcmUgYmVpbmcgbWFuYWdlZCBhdCB0aGUgem9uZSBsZXZlbCwgd2hpY2ggaXMgd2h5IHRoaXMgY2FtZSB0byBtaW5kIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoeSBJIHdhbnRlZCB0byBzdHVkeSB0aGlzIGZ1bmN0aW9uIGNhbGwsIG5vdyB1bmF2YWlsYWJsZSB0byBtZS4KClNpbmNlIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpcyBpbmFjY2Vzc2libGUsIGxldCYjMzk7cyBwaXZvdCBhbmQgbG9vayBhdCBpdHMgcG90ZW50aWFsIGNvdW50ZXJwYXJ0IGZ1bmN0aW9uLiBUaGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGRpZyBpcyBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHBhaXJlZCBmdW5jdGlvbiBsaWtlIHRoaXMgZXhpc3RzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcmV2ZXJzZSBvcGVyYXRpb24gd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBvbmUgaXMgZXhwb3NlZCwgYW5kIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb3VsZCBpbGx1bWluYXRlIHRoZSBsYXJnZXIgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTUwMD1zdGF0aWMgdm9pZCB1cGRhdGVfcGdkYXRfc3BhbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNTI3LVxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Mjg6dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTI5LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDk1PXZvaWQgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExMC1cdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxMTExOlx0cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUocGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpLCBwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExMi1cdGthc2FuX3JlbW92ZV96ZXJvX3NoYWRvdyhfX3ZhKFBGTl9QSFlTKHBmbikpLCBQRk5fUEhZUyhucl9wYWdlcykpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTExOD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyOC1cdFx0bm9kZV9ub3RpZnkoTk9ERV9DQU5DRUxfQURESU5HX0ZJUlNUX01FTU9SWSwgXHUwMDI2bm9kZV9hcmcpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjI5Olx0cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoem9uZSwgcGZuLCBucl9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMzAtXHRyZXR1cm4gcmV0O1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg4Mz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwODAtXHRtZW1vcnlfbm90aWZ5KE1FTV9PRkZMSU5FLCBcdTAwMjZtZW1fYXJnKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA4MTpcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDgyLVx0cmV0dXJuIDA7XG4tLVxubW0vbWVtcmVtYXAuYz04Nj1zdGF0aWMgdm9pZCBwYWdldW5tYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IHJhbmdlX2lkKVxuLS1cbm1tL21lbXJlbWFwLmMtOTUtXHRtZW1faG90cGx1Z19iZWdpbigpO1xubW0vbWVtcmVtYXAuYzo5NjpcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHBhZ2Vfem9uZShmaXJzdF9wYWdlKSwgUEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxubW0vbWVtcmVtYXAuYy05Ny1cdFx0XHRcdCAgIFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgdGFyZ2V0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RwbHVnIE9wdGltaXphdGlvbiBQb2ludHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBpbXByb3ZpbmcgbWVtb3J5IGhvdHBsdWcgaGFuZGxpbmcuIEltbWVkaWF0ZWx5LCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgYW5kIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAgYXJlIHN0YW5kaW5nIG91dCBhcyBwcmltZSBjYW5kaWRhdGVzLiBUaGV5JiMzOTtyZSBjbGVhcmx5IGF0IHRoZSBjb3JlIG9mIG1hbmlwdWxhdGluZyBtZW1vcnkgcmVnaW9ucywgYW5kIGFueSBlZmZpY2llbmN5IGdhaW5zIHRoZXJlIHdvdWxkIGJlIHNpZ25pZmljYW50LiBJJiMzOTttIGFsc28gYWRkaW5nIGBvbmxpbmVfcGFnZXNgIGFuZCBgb2ZmbGluZV9wYWdlc2AgdG8gdGhlIG1peCDigJMgdGhlc2UgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIHRoZSBob3RwbHVnIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByb3V0aW5lcyBpbnRlcmFjdCBhbmQgd2hlcmUgdGhlIGJvdHRsZW5lY2tzIG1pZ2h0IGxpZS4KCk5vdywgYSBrZXkgZmFjdG9yIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLiBJcyBpdCBlbmFibGVkPyBUaGF04oCZcyBteSBzdGFydGluZyBwb2ludC4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIHdpbGwgZGljdGF0ZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggYW5kIHRoZSBzdWJzZXF1ZW50IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIEkmIzM5O2xsIG5lZWQgdG8gdXNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnRleHQgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIGJlIGltcGFjdGluZyB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IEhvdHBsdWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1PUllfSE9UUExVR2AuIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0aGVyZSDigJMgc3BlY2lmaWNhbGx5LCB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIHN5bWJvbHMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgTUVNT1JZX0hPVFBMVUdgIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIE5VTUEsIEFDUEksIG9yIGFueXRoaW5nIHRoYXQgdG91Y2hlcyBvbiBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFx0Ym9vbFxuIDUyMTpcdFxuIDUyMjpcdCMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xuIDUyMzpcdG1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbiA1MjQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiA1MjU6XHRcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4gNTI2Olx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gNTI3Olx0XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gNTI4Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gNTI5Olx0XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuIDUzMDpcdFxuIDUzMTpcdGlmIE1FTU9SWV9IT1RQTFVHXG4gNTMyOlx0XG4gNTMzOlx0Y2hvaWNlXG4gNTM0Olx0XHRwcm9tcHQgXCYjMzQ7TWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVwmIzM0O1xuIDUzNTpcdFx0ZGVmYXVsdCBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXG4gNTM2Olx0XHRoZWxwXG4gNTM3Olx0XHQgIERlZmF1bHQgbWVtb3J5IHR5cGUgZm9yIGhvdHBsdWdnZWQgbWVtb3J5LlxuIDUzODpcdFxuIDUzOTpcdFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg1OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgYW5kIEluaXRpYWxpemF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBNRU1PUllfSE9UUExVR2AsIGFuZCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGVuYWJsZSBgU1BBUlNFTUVNX1ZNRU1NQVBgIHNpbmNlIGl0JiMzOTtzIGEgZGVwZW5kZW5jeS4gQWN0dWFsbHksIGlzbiYjMzk7dCBgU1BBUlNFTUVNX1ZNRU1NQVBgIHVzdWFsbHkgZW5hYmxlZCBhbnl3YXk/IExldCBtZSBkb3VibGUtY2hlY2suCgpSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIGBtbS9tbV9pbml0LmNgLiBBaCwgSSBzZWUgYHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmVgIGlzIHVzZWQgaW4gYGluaXRfdW5hdmFpbGFibGVfcmFuZ2VgLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbWVtbWFwX2luaXRfem9uZV9yYW5nZWAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgZnJvbSBgZnJlZV9hcmVhX2luaXRfbm9kZWAgZHVyaW5nIGJvb3QuIE9rYXksIHNvIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGV4ZWN1dGVkIGR1cmluZyBib290IGlmIHRoZXJlIGFyZSB1bmF2YWlsYWJsZSBtZW1vcnkgcmFuZ2VzLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga25vdy4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IG1lbW9yeSBob3RwbHVnIHdvcmtzLCBhbG9uZ3NpZGUgaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZC4gUmVwbGFjaW5nIHRoZSBvbGQgYHNldF96b25lX2NvbnRpZ3VvdXNgIGNhbGwgd2l0aCBhIHNpbXBsZXIgY2hlY2sgdXNpbmcgYHpvbmUtJmd0O3NwYW5uZWRfcGFnZXMgPT0gem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBkZXRlcm1pbmUgbWVtb3J5IHN0YXRlIGlzIGRlZmluaXRlbHkgYW4gaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBhIGZ1enplciBhdC4KCkxldCYjMzk7cyBsaXN0IHRoZSBrZXkgc3ltYm9scyBvZiBpbnRlcmVzdC4gSSYjMzk7bSBmb2N1c2luZyBvbjogYG9ubGluZV9wYWdlc2AsIGBvZmZsaW5lX3BhZ2VzYCwgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgX19hZGRfcGFnZXNgLCBhbmQgYF9fcmVtb3ZlX3BhZ2VzYC4KCkkgc2hvdWxkIGNoZWNrIGlmIGBvbmxpbmVfcGFnZXNgIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIGV4cG9ydGVkLiBJcyBgb25saW5lX3BhZ2VzYCBleHBvcnRlZD8gTm8sIGJ1dCBJIGtub3cgYGdlbmVyaWNfb25saW5lX3BhZ2VgIGlzIGV4cG9ydGVkLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qb25saW5lX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgcHJvYmxlbSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbW9tZW50IHRvIHN1cnZleSB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBvZmZsaW5lX3BhZ2VzYC4gR2l2ZW4gdGhlIGNvbnRleHQg4oCTIHdoYXRldmVyIHRoZSB1c2VyJiMzOTtzIGlzc3VlIG1pZ2h0IGJlIOKAkyB0aGlzIGlzIGEgbG9naWNhbCBmaXJzdCBzdGVwLiBPZmZsaW5lIGZ1bmN0aW9uYWxpdHkgaXMgYSBjb21tb24gc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBwZXJzaXN0ZW5jZSwgY2FjaGluZywgb3IgaW50ZXJhY3Rpb25zIHRoYXQgKnNob3VsZCogYmUgYXZhaWxhYmxlIHdoZW4gZGlzY29ubmVjdGVkLiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBtb2R1bGUgYW5kIHVzdWFsbHkgcmV2ZWFscyBmb3VuZGF0aW9uYWwgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciB3aGVuIG9mZmxpbmUuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgbWVjaGFuaWNzIG9mIHByb3ZpZGluZywgc3luY2luZywgc3RvcmluZyBhbmQgcmVtb3Zpbmcgb2ZmbGluZSBjb250ZW50LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBhc3N1bXB0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdGhlcmUsIHNvLCBiZWZvcmUgZXZlbiBjb25zaWRlcmluZyB0aGUgcHJvYmxlbSwgdW5kZXJzdGFuZGluZyB0aGlzIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipvZmZsaW5lX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipJbnRlcm5hbCBBdWRpdCAmYW1wOyBDb2RlIFJldmlldyoqCgpSaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgdXN1YWxseSBtZWFucyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgbW9kdWxlIG9yIGxpYnJhcnksIG5vdCBmb3IgZGlyZWN0IGV4dGVybmFsIGludGVyYWN0aW9uLiBCdXQsIHRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgZ2xvYmFsIGZ1bmN0aW9ucyByYWlzZXMgYSBmbGFnLiBFdmVuIHdpdGhvdXQgZXhwbGljaXQgZXhwb3J0aW5nLCB0aGVpciBnbG9iYWwgc2NvcGUgbWVhbnMgdGhleSYjMzk7cmUgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIGFueXdoZXJlIHdpdGhpbiB0aGUgcHJvZ3JhbSYjMzk7cyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvciBhbmQgaW1wYWN0LCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhvc2UgZnVuY3Rpb24gbmFtZXMg4oCTIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSAqYWN0dWFsbHkqIHVzZWQsIGFuZCBpbiB3aGF0IHdheXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHVuc2FmZSBtZW1vcnkgbWFuaXB1bGF0aW9uLCB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cywgb3IgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGFjY2VzcyBvciBtb2RpZmljYXRpb24gb2YgZGF0YS4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19hZGRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIGtlcm5lbCBjb2RlOgoKKipDaGVja2luZyBUaGF0IFBhZ2UgQWRkaXRpb24qKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJIHN3ZWFyIEkgc2F3IHRoYXQgYEVYUE9SVF9TWU1CT0xfR1BMKHBmbl90b19vbmxpbmVfcGFnZSlgIGRlY2xhcmF0aW9uICpiZWZvcmUqIHRoYXQgYF9fYWRkX3BhZ2VzYCBmdW5jdGlvbiBjYWxsLiBTb21ldGhpbmcgZmVlbHMgb2ZmIGFib3V0IHRoZSBvcmRlciwgb3IgcGVyaGFwcyB0aGUgaW50ZW5kZWQgdXNlLiBMZXQgbWUganVzdCBxdWlja2x5IGdvIGJhY2sgYW5kIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fYWRkX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhZ2UgYWxsb2NhdGlvbiBhbmQgc3ltYm9sIGV4cG9ydHMgY29ycmVjdGx5LCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3IgdXNhZ2UgcGF0dGVybi4gSXQmIzM5O3MgdGhhdCBuYWdnaW5nIGZlZWxpbmcuLi4gZ290dGEgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUgd2F5IHRoZXNlIHBhZ2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQuIEl0IGNvdWxkIGJlIGltcG9ydGFudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphZGRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRnVuY3Rpb24gQXZhaWxhYmlsaXR5KioKCkFoLCB0aGUgZnVuY3Rpb24gYGFkZF9wYWdlc2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgZ29vZCwgZ29vZCEgSXQgbWVhbnMgaXQmIzM5O3MgYXZhaWxhYmxlIGZvciBtZSB0byBkaXJlY3RseSBjYWxsIGFuZCB1c2Ugd2l0aGluIG15IG93biBjb2RlIG9yIGluIG90aGVyIG1vZHVsZXMuIFRoaXMgb3BlbnMgdXAgYSBsb3Qgb2YgcG9zc2liaWxpdGllcyBmb3IgbW9kdWxhcml0eSBhbmQgaW50ZWdyYXRpb24uIEkgY2FuIG5vdyBzdGFydCB0byB0aGluayBhYm91dCBob3cgSSBjYW4gbGV2ZXJhZ2UgdGhpcyBmdW5jdGlvbiBpbiBteSBjdXJyZW50IHByb2plY3QsIHBlcmhhcHMgdG8gYXV0b21hdGUgYSByZXBldGl0aXZlIHRhc2ssIGVuaGFuY2UgYW4gZXhpc3RpbmcgcHJvY2Vzcywgb3IgZXZlbiBidWlsZCBhIHNtYWxsIHV0aWxpdHkgYXJvdW5kIGl0LiBUaGUgaW1wbGljYXRpb25zIGZvciB3b3JrZmxvdyBvcHRpbWl6YXRpb24gYXJlIGNlcnRhaW5seSB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkb2N1bWVudGF0aW9uIHRvIGNvbmZpcm0gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlIGJ1dCB0aGlzIGZpcnN0IG9ic2VydmF0aW9uIGlzIHByb21pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTM3OT1FWFBPUlRfU1lNQk9MX0dQTChwZm5fdG9fb25saW5lX3BhZ2UpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0zODAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjM4MTppbnQgX19hZGRfcGFnZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTM4Mi1cdFx0c3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBNb2R1bGUmIzM5O3MgUGFnZSBBZGRpdGlvbiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGludGVybmFsIGBfX2FkZF9wYWdlc2AgbWV0aG9kIHdhcyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBwYWdlIGFkZGl0aW9uIGxvZ2ljIHdpdGhpbiB0aGlzIG1vZHVsZS4gQnV0LCB3YWl0Li4uIEkganVzdCByZWFsaXplZCBJIGNhbiYjMzk7dCBkaXJlY3RseSBhY2Nlc3MgaXQuIFRoYXQmIzM5O3Mgb2RkLiBJdCYjMzk7cyBub3QgZXhwb3J0ZWQuIENvdWxkIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9uIGJlIGBhZGRfcGFnZXNgIHRoZW4/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiAqdGhhdCogb25lIGlzIGV4cG9ydGVkLCBhbmQgaWYgc28sIHVuZGVyc3RhbmQgaG93IHRoZSBwdWJsaWMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIGFueSBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gd2hpY2ggZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3NlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphZGRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBIFF1aWNrIEpvbHQgb2YgUmVhbGl6YXRpb24qKgoKV2FpdCBhIHNlY29uZC4uLiBgYWRkX21lbW9yeWAgaXMgKmV4cG9ydGVkKj8gVGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcgYXQgYWxsLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoaXMgd2FzIGdvaW5nIHRvIGJlIGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24sIHBlcmhhcHMgcGFydCBvZiBhIHByaXZhdGUgQVBJIHdpdGhpbiB0aGUgbW9kdWxlLiBNeSBpbml0aWFsIGFzc3VtcHRpb25zIHdlcmUgY2xlYXJseSBvZmYtYmFzZS4gVGhhdCBleHBvcnQgc3RhdHVzIGRyYW1hdGljYWxseSBzaGlmdHMgbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGNvbXBvbmVudCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBpbW1lZGlhdGVseSByZWNvbnNpZGVyIG15IHByZXZpb3VzIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNjb3BlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHB1YmxpYyBmYWNpbmcgZ3VhcmFudGVlcyB0aGF0IG1pZ2h0IGNvbWUgd2l0aCBpdHMgZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eS4gVGhpcyB3YXJyYW50cyBhIG1vcmUgaW4tZGVwdGggbG9vayBhdCB0aGUgbW9kdWxlJiMzOTtzIGRvY3VtZW50YXRpb24gYW5kIGV4dGVybmFsIEFQSSBjb250cmFjdHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphZGRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTE1OTg9aW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYwNy19XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MDg6RVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MDktXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNjMxPWludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjU3LX1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY1ODpFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgc28gYGFkZF9tZW1vcnlgICppcyogZXhwb3J0ZWQsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IHJlYWxseSBtYXR0ZXIgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFdlIGNhbiByZWFjaCBub24tZXhwb3J0ZWQgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNjYWxscyBvciBzeXNmcywgd2hpY2ggaXMgZ3JlYXQuIEkgd2FzIHRoaW5raW5nIHRoYXQgc3l6a2FsbGVyIGNvdWxkIGRlZmluaXRlbHkgZnV6eiBgb25saW5lX3BhZ2VzYCB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgdG8gcmVhbGx5IGhvbmUgaW4gb24gc3BlY2lmaWMgYXJlYXMsIGxldCYjMzk7cyBsb29rIGF0IG1vcmUgc3BlY2lmaWMgb3B0aW9ucyB0byBmb2N1cyBvbjogYG9ubGluZV9wYWdlc2AsIGBvZmZsaW5lX3BhZ2VzYCwgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLCBhbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBgb25saW5lX3BhZ2VzYCBpcyBhIHZpYWJsZSBmb2N1cyBzeW1ib2wsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGlzbiYjMzk7dCBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBrZWVwIGdvaW5nIGFuZCBjaGVjayB0aGUgb3RoZXJzLiBgb2ZmbGluZV9wYWdlc2AgYWxzbyBpc24mIzM5O3Qgc3RhdGljLiBIb3cgYWJvdXQgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgPyBOb3BlLCBub3Qgc3RhdGljLiBBbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYD8gTm8sIHN0aWxsIG5vdCBzdGF0aWMuCgpOb3csIG9uIHRoZSBvdGhlciBoYW5kLCBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgYXJlIHN0YXRpYy4gU28gd2UmIzM5O3JlIG5vdCBnb2luZyB0byBiZSB1c2luZyB0aGVtIGFzIGZvY3VzIHN5bWJvbHMsIHNpbmNlIHRoZXkgd291bGRuJiMzOTt0IGJlIGFjY2Vzc2libGUgdG8gc3l6a2FsbGVyIGRpcmVjdGx5LgoKTGV0JiMzOTtzIHBpdm90IGFuZCBjaGVjayBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAgYW5kIGBtaHBfZGVpbml0X21lbW1hcF9vbl9tZW1vcnlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTEwNDI9dm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNjQ6aW50IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjUtXHRcdFx0ICAgICAgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqTXkgRmx1aWQgRnJhbWV3b3JrOiBDb25zdGFudCBFdm9sdXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZy4uLiB0aGlzIGlzbiYjMzk7dCBhIHNpbXBsZSwgc3RhdGljIHNpdHVhdGlvbi4gRXZlcnl0aGluZyBJIGRlYWwgd2l0aCBpbiB0aGlzIGFyZWEgaXMgZHluYW1pYywgY29uc3RhbnRseSBzaGlmdGluZy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcy4gVGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcyBtaWdodCByZW1haW4sIGJ1dCB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBzcGVjaWZpY3MgYXJlIGFsd2F5cyBldm9sdmluZywgYW5kIEkgbmVlZCB0byBiZSByZWFkeSB0byBhZGFwdCBteSBtZW50YWwgbW9kZWwgYW5kIG15IGFwcHJvYWNoLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIHBhcnRpY3VsYXIgYXNwZWN0LiBMZXQmIzM5O3Mgc2VlLi4uICpzaHJpbmtcX3pvbmVcX3NwYW4qLiBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgYXQgcGxheSBoZXJlLCBhbmQgaXRzIHN0YXRlIGlzIGxpa2VseSBjcml0aWNhbC4gSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgaG93IHRoYXQmIzM5O3MgYmVoYXZpbmcuIExldCBtZSBmb2N1cyBvbiB0aGF0IGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIHRlbGxpbmcgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua196b25lX3NwYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NDUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTQ2MC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NDYxOnN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy00NjItXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz01Mjg9dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU1My1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NTU0Olx0c2hyaW5rX3pvbmVfc3Bhbih6b25lLCBzdGFydF9wZm4sIHN0YXJ0X3BmbiAmIzQzOyBucl9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU1NS1cdHVwZGF0ZV9wZ2RhdF9zcGFuKHBnZGF0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKioKCk9rYXksIHRoaXMgZmVlbHMgcHJldHR5IHN0YXRpYywgbm90IGEgbG90IG9mIGR5bmFtaWMgaW50ZXJwbGF5IGhhcHBlbmluZywgd2hpY2ggaXMgaGVscGZ1bCBmb3IgZm9jdXNlZCBhbmFseXNpcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIG9uZXMgdGhhdCBqdW1wIG91dCBhcyBjcml0aWNhbCBhcmU6IGBvbmxpbmVfcGFnZXNgLCBgb2ZmbGluZV9wYWdlc2AsIHRoZSB6b25lIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGFuZCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBhbmQgdGhlIHBhZ2UgYWRkaXRpb24vcmVtb3ZhbCBwcmltaXRpdmVzIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBjb3JlIG9wZXJhdGlvbnMgaW4gcGxheSBoZXJlLgoKTm93LCBJIGFsc28gc2VlIHRoaXMgYE1FTU9SWV9IT1RQTFVHYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZsb2F0aW5nIGFyb3VuZC4gSG1tLCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGltcG9ydGFudC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IG15IGFzc3VtcHRpb25zIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFllcywgYG1tL21lbW9yeV9ob3RwbHVnLmNgIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBzZXQuIFNvLCB0aGlzIGNvZGUgYmxvY2sgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBob3RwbHVnZ2luZywgYXMgZXhwZWN0ZWQuIEdvb2QsIGNvbmZpcm1hdGlvbiBpcyBrZXkuIFRoaXMgZ2l2ZXMgbWUgYSBmcmFtZXdvcmsgZm9yIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkIG9uLXRoZS1mbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9ob3RwbHVnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NjI9cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSAmIzQzOz0gc2h1ZmZsZS5vXG4tLVxubW0vTWFrZWZpbGUtNjQtIyBHaXZlICYjMzk7bWVtb3J5X2hvdHBsdWcmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG5tbS9NYWtlZmlsZTo2NTptZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeV9ob3RwbHVnLm9cbm1tL01ha2VmaWxlLTY2LVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUyPXN0YXRpYyBpbnQgZ2V0X29ubGluZV9wb2xpY3koY2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1Ny0vKlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTg6ICogbWVtb3J5X2hvdHBsdWcub25saW5lX3BvbGljeTogY29uZmlndXJlIG9ubGluZSBiZWhhdmlvciB3aGVuIG9ubGluaW5nIHdpdGhvdXRcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU5LSAqIHNwZWNpZnlpbmcgYSB6b25lIChNTU9QX09OTElORSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNYWtlZmlsZSBDb25mdXNpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IGBtbS9NYWtlZmlsZWAgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgY2xpY2tpbmcuIEkgc2VlIGBtZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeV9ob3RwbHVnLm9gLCB3aGljaCBzZWVtcyBzdGFuZGFyZCBlbm91Z2guIEJ1dCB0aGVuLCAqcmlnaHQgYWZ0ZXIgdGhhdCosIEkmIzM5O20gc2VlaW5nIGBvYmoteSAmIzQzOz0gbWVtb3J5LWhvdHBsdWcub2AuIFRoYXQmIzM5O3MuLi4gcmVkdW5kYW50LCByaWdodD8gU3VyZWx5LCB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCBzaG91bGQgaGFuZGxlIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGJvdGggYXJlIHByZXNlbnQuIElzIHRoZXJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggYENPTkZJR19NRU1PUllfSE9UUExVR2AgdGhhdCBJJiMzOTttIG1pc3Npbmc/IE9yIGlzIHRoaXMgYSBsZWdhY3kgdGhpbmcsIG1heWJlIHNvbWUgb3B0aW1pemF0aW9uIG9yIGEgc3BlY2lmaWMgYnVpbGQgc2NlbmFyaW8gSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3Bpbmc/IFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYG1tL01ha2VmaWxlYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeS1ob3RwbHVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NjI9cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSAmIzQzOz0gc2h1ZmZsZS5vXG4tLVxubW0vTWFrZWZpbGUtNjQtIyBHaXZlICYjMzk7bWVtb3J5X2hvdHBsdWcmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG5tbS9NYWtlZmlsZTo2NTptZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeV9ob3RwbHVnLm9cbm1tL01ha2VmaWxlLTY2LVxuLS1cbm1tL01ha2VmaWxlPTcwPW9iai15ICYjNDM7PSBtZW1ibG9jay5vXG5tbS9NYWtlZmlsZTo3MTpvYmoteSAmIzQzOz0gJChtZW1vcnktaG90cGx1Zy15KVxubW0vTWFrZWZpbGUtNzItb2JqLXkgJiM0Mzs9IHNsdWIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gZ29pbmcgd2l0aC4gRG91YmxlLWNoZWNraW5nIGlzbiYjMzk7dCBhIGJhZCBpZGVhLCB0aG91Z2guIEhtbSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZmFjdG9yIGluIGhlcmU/IEFoIHllcywgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhhdCYjMzk7cyBhIGRlcGVuZGVuY3kgb2YgYE1FTU9SWV9IT1RQTFVHYCwgaXNuJiMzOTt0IGl0PyBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhY2sgdG8gYG1tL0tjb25maWdgIGZvciBhbm90aGVyIHF1aWNrIHNjYW4sIGp1c3QgdG8gYmUgdGhvcm91Z2guIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4tLVxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICYjMzk7c2VsZWN0IFNQQVJTRU1FTSYjMzk7XG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyNC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgU1BBUlNFTUVNX1ZNRU1NQVAgYW5kIE1lbW9yeSBIb3RwbHVnKioKCk9rYXksIGxldCYjMzk7cyBzZWUgYWJvdXQgdGhpcyBgU1BBUlNFTUVNX1ZNRU1NQVBgIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkLCBnaXZlbiB0aGF0IGBNRU1PUllfSE9UUExVR2AgZGVwZW5kcyBvbiBpdC4gVGhlIEtidWlsZCBzeXN0ZW0gc2hvdWxkIHRoZW9yZXRpY2FsbHkgaGFuZGxlIHRoaXMgZGVwZW5kZW5jeSBjb3JyZWN0bHk7IGlmIEkgZW5hYmxlIGBNRU1PUllfSE9UUExVR2AsIEtidWlsZCAqc2hvdWxkKiBhbHNvIGVuc3VyZSBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGVuYWJsZWQuIEJ1dCwgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCBzYWZlIGlzIGJldHRlciB0aGFuIHNvcnJ5LiBJIHNob3VsZCBwcm9iYWJseSBleHBsaWNpdGx5IHNwZWNpZnkgYFNQQVJTRU1FTV9WTUVNTUFQYCBhbG9uZ3NpZGUgYE1FTU9SWV9IT1RQTFVHYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEhhbmcgb24uLi4gaXNuJiMzOTt0IGBTUEFSU0VNRU1fVk1FTU1BUGAgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQgYXJjaGl0ZWN0dXJlcz8gVGhhdCByaW5ncyBhIGJlbGwuIE9rYXksIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgYFNQQVJTRU1FTV9WTUVNTUFQYC4gQmV0dGVyIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24gdGhhbiB0byBwcm9jZWVkIGJhc2VkIG9uIGEgcG90ZW50aWFsbHkgaW5jb3JyZWN0IHJlY29sbGVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBWYWxpZGl0eSBvZiBhIENvbmZpZ3VyYXRpb24gU2V0dGluZyoqCgpSaWdodCwgYGRlZl9ib29sIHlgLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm8gbmVlZCBmb3IgZnVydGhlciBwYXJzaW5nIG9yIGRlZXBlciBhbmFseXNpcyBoZXJlOyBhIGBkZWZfYm9vbGAgd2l0aCBhIHZhbHVlIG9mICYjMzk7eSYjMzk7IGluZGljYXRlcyB0aGF0IGEgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5pdGVseSAqZW5hYmxlZCouIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGFuZCBkZXNpcmVkIHN0YXRlLiBJdCYjMzk7cyBhIGNsZWFuIGFuZCBjbGVhciBhZmZpcm1hdGlvbiBvZiBpdHMgc3RhdHVzLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBhbm90aGVyIHJlbGF0ZWQgdmFyaWFibGUgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQgdW5leHBlY3RlZGx5LCBvciBpbnRyb2R1Y2VkIGEgY29uZmxpY3QuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHYC4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IGhvdHBsdWcgaXMgZW5hYmxlZCBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTY9Y29uZmlnIEhBVkVfQk9PVE1FTV9JTkZPX05PREVcbi0tXG5tbS9LY29uZmlnLTUxOC1cbm1tL0tjb25maWc6NTE5OmNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRyaXZlbiBieSBhcmNoaXRlY3R1cmFsIGNob2ljZXMsIHdoaWNoIG1lYW5zIGBNRU1PUllfSE9UUExVR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIHdhdGNoLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIG5ldyBmaWVsZCwgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIHRvIHRoZSBgc3RydWN0IHpvbmVgLiBUaGUgcG9pbnQgaXMgdG8gbWFrZSB0aGUgYHpvbmVfaXNfY29udGlndW91cygpYCBjaGVjayBtdWNoIGZhc3RlciDigJMgTygxKSBub3cgYnkgY29tcGFyaW5nIGBzcGFubmVkX3BhZ2VzYCBhbmQgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIGluc3RlYWQgb2YgdGhlIG9sZCBPKE4pIGBzZXRfem9uZV9jb250aWd1b3VzKClgIHdoaWNoIHdhcyBpdGVyYXRpbmcgb3ZlciBwYWdlYmxvY2tzLiBBIHByZXR0eSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSB3aW4sIGlmIGl0IHdvcmtzIGFzIGFkdmVydGlzZWQuCgpFc3NlbnRpYWxseSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgbWVtb3J5IGhvdHBsdWcgd29ya3MuIFRoYXQgbWFrZXMgdGhpcyBwYXRjaCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZywgc2luY2UgdGhlIHJlYWNoIGlzIHNvIGJyb2FkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scy4gV2UmIzM5O3ZlIGdvdDoKCiogICBgb25saW5lX3BhZ2VzYAoqICAgYG9mZmxpbmVfcGFnZXNgCiogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAKKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAKKiAgIGBfX2FkZF9wYWdlc2AKKiAgIGBfX3JlbW92ZV9wYWdlc2AKCkNoZWNraW5nIHRoZW0sIGl0JiMzOTtzIGFsbCBnb29kLiBgb25saW5lX3BhZ2VzYCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBvbmxpbmluZywgYG9mZmxpbmVfcGFnZXNgIGR1cmluZyBvZmZsaW5pbmcuIFRoZSBvdGhlciBmb3VyIGNvdmVyIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKQWxyaWdodCwgd2hhdCBlbHNlIGlzIGluIGhlcmU/IExldCYjMzk7cyBxdWlja2x5IGNoZWNrIG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBMb29rcyBsaWtlIGBpbml0X3VuYXZhaWxhYmxlX3JhbmdlYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgIGFyZSBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIGF0IGJvb3QsIHNvIHdlIGNhbiBpZ25vcmUgdGhlbS4gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGlzIG5vdCBzdGF0aWMsIHNvIGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xMDIyPXN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLCBpbnQgbmlkLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA0MS0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTA0Mjp2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDQzLVx0XHRcdCAgICAgICBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTExOD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4MS1cdG9ubGluZV9wYWdlc19yYW5nZShwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MjpcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4My1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4ODM9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDQzLVx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCAtbWFuYWdlZF9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIwNDQ6XHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIGdyb3VwLCAtbnJfcGFnZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDQ1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNhbGxzLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqVW5kZXJzdGFuZGluZyB0aGUgT3JpZ2lucyBvZiBUaGlzIEZ1bmN0aW9uJiMzOTtzIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgdmVyc2F0aWxlLCBiZWluZyB1dGlsaXplZCBpbiBhIGZldyBrZXkgYXJlYXMgb2YgdGhlIHN5c3RlbS4gSSBzZWUgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSBib3RoIHRoZSBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIHN1YnN5c3RlbXMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcm9sZSBpbiBwYWdlIG1hbmFnZW1lbnQsIHBlcmhhcHMgaW4gdHJhbnNpdGlvbmluZyBwYWdlcyBiZXR3ZWVuIG9ubGluZSBhbmQgb2ZmbGluZSBzdGF0ZXMsIG9yIHNvbWUga2luZCBvZiBwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MgcmVsYXRlZCB0byB0aGVzZSB0d28gcGFnZSBsaXN0cy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBib3RoIG9ubGluZSBhbmQgb2ZmbGluZSBwYWdlcyBpbmRpY2F0ZXMgaXQmIzM5O3MgY2VudHJhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuCgpOb3csIHRoZSBwbG90IHRoaWNrZW5zIGEgYml0LiBJIGFsc28gc2VlIGEgY2FsbCBmcm9tIHdpdGhpbiBgZHJpdmVycy9iYXNlL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGZyb20gYSBmdW5jdGlvbiBuYW1lZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLiBUaGlzIGlzIHBvdGVudGlhbGx5IGNydWNpYWwuICYjMzQ7ZHJpdmVycyYjMzQ7IGltcGxpZXMgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuLi4gb2theSwgdGhhdCBhbG1vc3QgY2VydGFpbmx5IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgd2hlbiBhIG1lbW9yeSBibG9jayBpcyBiZWluZyB0YWtlbiBvZmZsaW5lLiBUaGF0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBOVU1BIG5vZGUgbWFuYWdlbWVudCwgbWVtb3J5IGhvdHBsdWdnaW5nLCBvciBwZXJoYXBzIGV2ZW4gaGFuZGxpbmcgbWVtb3J5IGZhaWx1cmVzLiBJdCYjMzk7cyB3b3JraW5nIGF0IGEgbG93ZXIgbGV2ZWwgbm93LCBtYW5hZ2luZyBwYWdlcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHVuaXQgb2YgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqaG93KiBpdCYjMzk7cyBpbnZvbHZlZCwgYnV0IHRoYXQgYWxvbmUgc3VnZ2VzdHMgaXQmIzM5O3MgbW9yZSB0aGFuIGp1c3QgYSBzaW1wbGUgcGFnZSBtYW5pcHVsYXRvciwgYnV0IGNyaXRpY2FsIHRvIHRoZSBtZW1vcnkgc3RhdGUsIGFuZCBob3cgdGhlIE9TIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9MjI0PXN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI2OC1cdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI2OTpcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjcwLVx0XHRcdFx0XHQgIG5yX3ZtZW1tYXBfcGFnZXMpO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMS1cdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAzLVx0XHRcdFx0XHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA5LVx0XHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMTA6XHRcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMxMS1cdFx0XHRcdFx0XHQgIG1lbS1cdTAwM2Vncm91cCwgbnJfdm1lbW1hcF9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFRhcmdldHMqKgoKUmlnaHQsIHNvIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YCBsb29rcyBsaWtlIGFub3RoZXIgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgYSBsaWtlbHkgdGFyZ2V0IGZvciBpbnZlc3RpZ2F0aW9uLiBUaGUgbWVtb3J5IG1hcHBpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBzcGVjaWZpY2FsbHkgYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgIGFuZCBgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5YCwgYXJlIGFsc28gY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZXhhbWluZSBpbiB0aGlzIGNvbnRleHQuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBjb250YWluIGtleSBsb2dpYyByZWxhdGVkIHRvIG1hbmFnaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGhlIG1lbW9yeSBtYXAuIFRoZXkgaGF2ZSB0byBiZSBjb25zaWRlcmVkIGFzIHBvdGVudGlhbCBmb2NhbCBwb2ludHMgZm9yIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjUwLVx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyNTE6XHRcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTItXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDQ5CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlJlZmxlY3Rpbmcgb24gTWVtb3J5IE1hbmFnZW1lbnQgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIG9ic2VydmluZyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgb25saW5lIGFuZCBvZmZsaW5lIHByb2NlZHVyZXMuIFRoZSBrZXkgZnVuY3Rpb25zLCBvciByYXRoZXIsIHRoZSBzeW1ib2xzIHRoYXQgZGVmaW5lIHRoZWlyIGNvcmUgb3BlcmF0aW9ucywgc2VlbSB0byBiZTogYG9ubGluZV9wYWdlc2AsIGBvZmZsaW5lX3BhZ2VzYCwgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgX19hZGRfcGFnZXNgLCBgX19yZW1vdmVfcGFnZXNgLCBhbmQgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgLgoKVGhlc2Ugc3ltYm9scyBwb2ludCB0byB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIG1vdmVtZW50IG9mIHBoeXNpY2FsIHBhZ2UgZnJhbWVzIChQRk5zKSBiZXR3ZWVuIHpvbmVzLCBhbmQgdGhlIGFjY291bnRpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIE5vdyB0aGF0IEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludm9sdmVkIGZ1bmN0aW9uIHN5bWJvbHMgYW5kIHRoZWlyIGNvbnRleHQsIEkmIzM5O20gcmVhZHkgdG8gYXNzaWduIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29ubGluZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDssCiAgICAmIzM0O21vdmVfcGZuX3JhbmdlX3RvX3pvbmUmIzM0OywKICAgICYjMzQ7cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUmIzM0OywKICAgICYjMzQ7X19hZGRfcGFnZXMmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfcGFnZXMmIzM0OywKICAgICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvbmxpbmVfcGFnZXMmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7LAogICAgJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgICAmIzM0O3JlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lJiMzNDssCiAgICAmIzM0O19fYWRkX3BhZ2VzJiMzNDssCiAgICAmIzM0O19fcmVtb3ZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FkanVzdF9wcmVzZW50X3BhZ2VfY291bnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBjb250aWd1b3VzIHpvbmVzIGFyZSB0cmFja2VkLCByZXBsYWNpbmcgYW4gTyhOKSBwYWdlYmxvY2sgaXRlcmF0aW9uIHdpdGggYW4gTygxKSBjaGVjayB1c2luZyBhIG5ldyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCBjb3VudGVyIGluIGBzdHJ1Y3Qgem9uZWAuIFRoaXMgY291bnRlciBpcyB1cGRhdGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkMTQzY2E2ZmFmZDM4MjU2ODZkYjJjYWY5MTE4MGViNmQwYmZmYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTowNjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdAppbmRleCBiNzYxODM1NDVlNWJmLi5jZWVhNmM4YjI3Y2MxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0CkBAIC00ODMsNiAmIzQzOzQ4MywxMiBAQCBHZW5lcmFsCiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXQKICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC4KIAomIzQzO2BgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYGAKJiM0MzsgIFBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUgYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kCiYjNDM7ICBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQKJiM0MzsgIGBgcGZuX3RvX29ubGluZV9wYWdlKClgYCBzdWNjZWVkcy4gU2VlIHRoZSBjb21tZW50IGZvcgomIzQzOyAgYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCBpbiBgYGluY2x1ZGUvbGludXgvbW16b25lLmhgYCBmb3IgbW9yZSBkZXRhaWxzLgomIzQzOwogYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGAKICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZQogICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggYmNmZTJkOWY0YWRiZC4uOTc2OTliZTlhMzU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtMjQ2LDYgJiM0MzsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKQogCQlucl92bWVtbWFwX3BhZ2VzID0gbWVtLSZndDthbHRtYXAtJmd0O2ZyZWU7CiAKIAltZW1faG90cGx1Z19iZWdpbigpOwomIzQzOwljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHsKIAkJcmV0ID0gbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMsIHpvbmUpOwogCQlpZiAocmV0KQpAQCAtMjcwLDYgJiM0MzsyNzEsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKQogCiAJbWVtLSZndDt6b25lID0gem9uZTsKIG91dDoKJiM0MzsJc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIAltZW1faG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5NSw2ICYjNDM7Mjk3LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJCW5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tJmd0O2FsdG1hcC0mZ3Q7ZnJlZTsKIAogCW1lbV9ob3RwbHVnX2JlZ2luKCk7CiYjNDM7CWNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tJmd0O3pvbmUpOwogCWlmIChucl92bWVtbWFwX3BhZ2VzKQogCQlhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS0mZ3Q7Z3JvdXAsCiAJCQkJCSAgLW5yX3ZtZW1tYXBfcGFnZXMpOwpAQCAtMzEyLDggJiM0MzszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpCiAJCW1ocF9kZWluaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMpOwogCi0JbWVtLSZndDt6b25lID0gTlVMTDsKIG91dDoKJiM0MzsJc2V0X3pvbmVfY29udGlndW91cyhtZW0tJmd0O3pvbmUpOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCW1lbS0mZ3Q7em9uZSA9IE5VTEw7CiAJbWVtX2hvdHBsdWdfZG9uZSgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBjYTI3MTIxODcxNDc1Li41OGYzNDJkZTNiYWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTEwMzIsNiAmIzQzOzEwMzIsMjEgQEAgc3RydWN0IHpvbmUgewogCSAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlCiAJICogKE1JR1JBVEVfQ01BKS4KIAkgKgomIzQzOwkgKiBwYWdlc193aXRoX29ubGluZV9tZW1tYXAgdHJhY2tzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUKJiM0MzsJICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZQomIzQzOwkgKiBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZCBwZm5fdG9fb25saW5lX3BhZ2UoKQomIzQzOwkgKiBzdWNjZWVkcy4gV2hlbiBzcGFubmVkX3BhZ2VzID09IHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCwKJiM0MzsJICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55CiYjNDM7CSAqIFBGTiB3aXRoaW4gdGhlIHpvbmUgc3Bhbi4KJiM0MzsJICoKJiM0MzsJICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhbgomIzQzOwkgKiBvbmxpbmUgbWVtb3J5IG1hcCBleGlzdCBvdXRzaWRlIHRoZSBjdXJyZW50IHpvbmUgc3Bhbi4gVGhpcyBjYW4KJiM0MzsJICogb25seSBoYXBwZW4gZHVyaW5nIGJvb3QsIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgbWFwIG9mCiYjNDM7CSAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvCiYjNDM7CSAqIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrIG1heSByZXN1bHQgaW4gYQomIzQzOwkgKiAmIzM0O3RvbyBzbWFsbCYjMzQ7IHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cyBkZXRlY3RpbmcgYQomIzQzOwkgKiBjb250aWd1b3VzIHpvbmUuCiYjNDM7CSAqCiAJICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXIKIAkgKiBtYW5hZ2VtZW50IGxvZ2ljIHRvIGZpZ3VyZSBvdXQgdW5tYW5hZ2VkIHBhZ2VzIGJ5IGNoZWNraW5nCiAJICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWQKQEAgLTEwNTYsNiAmIzQzOzEwNzEsNyBAQCBzdHJ1Y3Qgem9uZSB7CiAJYXRvbWljX2xvbmdfdAkJbWFuYWdlZF9wYWdlczsKIAl1bnNpZ25lZCBsb25nCQlzcGFubmVkX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcJCXByZXNlbnRfcGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcDsKICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykKIAl1bnNpZ25lZCBsb25nCQlwcmVzZW50X2Vhcmx5X3BhZ2VzOwogI2VuZGlmCkBAIC0xNjgxLDYgJiM0MzsxNjk3LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKQogfQogI2VuZGlmCiAKJiM0MzsvKioKJiM0MzsgKiB6b25lX2lzX2NvbnRpZ3VvdXMgLSB0ZXN0IHdoZXRoZXIgYSB6b25lIGlzIGNvbnRpZ3VvdXMKJiM0MzsgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC4KJiM0MzsgKgomIzQzOyAqIEluIGEgY29udGlndW91cyB6b25lLCBpdCBpcyB2YWxpZCB0byBjYWxsIHBmbl90b19wYWdlKCkgb24gYW55IFBGTiBpbiB0aGUKJiM0MzsgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IG1pc3Npbmcgc3luY2hyb25pemF0aW9uIHdpdGggbWVtb3J5IG9mZmxpbmluZyBtYWtlcyBhbnkgUEZOCiYjNDM7ICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLgomIzQzOyAqCiYjNDM7ICogWk9ORV9ERVZJQ0Ugem9uZXMgYXJlIGFsd2F5cyBtYXJrZWQgbm9uLWNvbnRpZ3VvdXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgY29udGlndW91cywgb3RoZXJ3aXNlIGZhbHNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHpvbmUtJmd0O2NvbnRpZ3VvdXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSkKJiM0Mzt7CiYjNDM7CWlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoem9uZS0mZ3Q7c3Bhbm5lZF9wYWdlcyA9PSB6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXApCiYjNDM7CQlXUklURV9PTkNFKHpvbmUtJmd0O2NvbnRpZ3VvdXMsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRSh6b25lLSZndDtjb250aWd1b3VzLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci4KICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMC4uZjkzMmI3NTc3YzkyYSAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC04MDUsMjEgJiM0Mzs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKQogewotCWlmICh6b25lLSZndDtjb250aWd1b3VzKQomIzQzOwlpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKQogCQlyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKIAogCXJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpOwogfQogCi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpOwogYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQotewotCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSBmYWxzZTsKLX0KLQogZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkgICAgaW50IG10KTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDdhYzE5ZmFiMjI2MzIuLjhkYmQ1MGQ4ODE1NWEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtNDIyLDQ5ICYjNDM7NDIyLDM5IEBAIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBmaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiYjNDM7c3RhdGljIGJvb2wgc3Vic2VjdGlvbl9vdmVybGFwc196b25lKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKLQlmb3IgKDsgc3RhcnRfcGZuICZsdDsgZW5kX3Bmbjsgc3RhcnRfcGZuICYjNDM7PSBQQUdFU19QRVJfU1VCU0VDVElPTikgewotCQlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSkKLQkJCWNvbnRpbnVlOwomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IEFMSUdOX0RPV04ocGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTik7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHN0YXJ0X3BmbiAmIzQzOyBQQUdFU19QRVJfU1VCU0VDVElPTiAtIDE7CiAKLQkJaWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKQotCQkJY29udGludWU7CiYjNDM7CS8qIEFsbCBwYWdlcyBpbiBhIHN1YnNlY3Rpb24gYXJlIGVpdGhlciBvbmxpbmUgb3Igb2ZmbGluZS4gKi8KJiM0MzsJaWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQkJaWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKQotCQkJY29udGludWU7CiYjNDM7CS8qIENoZWNraW5nIHN0YXJ0JiM0MztlbmQgaXMgc3VmZmljaWVudC4gKi8KJiM0MzsJcmV0dXJuIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpIHx8CiYjNDM7CSAgICAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShlbmRfcGZuKSk7CiYjNDM7fQogCi0JCXJldHVybiBzdGFydF9wZm47CiYjNDM7LyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQomIzQzO3sKJiM0MzsJZm9yICg7IHN0YXJ0X3BmbiAmbHQ7IGVuZF9wZm47IHN0YXJ0X3BmbiAmIzQzOz0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHsKJiM0MzsJCWlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoc3RhcnRfcGZuLCB6b25lKSkKJiM0MzsJCQlyZXR1cm4gc3RhcnRfcGZuOwogCX0KLQogCXJldHVybiAwOwogfQogCiAvKiBmaW5kIHRoZSBiaWdnZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLAomIzQzOwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQotCS8qIHBmbiBpcyB0aGUgZW5kIHBmbiBvZiBhIG1lbW9yeSBzZWN0aW9uLiAqLwotCXBmbiA9IGVuZF9wZm4gLSAxOwotCWZvciAoOyBwZm4gJmd0Oz0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHsKLQkJaWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAodW5saWtlbHkocGZuX3RvX25pZChwZm4pICE9IG5pZCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpCi0JCQljb250aW51ZTsKLQotCQlyZXR1cm4gcGZuOwomIzQzOwlmb3IgKDsgZW5kX3BmbiAmZ3Q7PSBzdGFydF9wZm47IGVuZF9wZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHsKJiM0MzsJCWlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoZW5kX3BmbiAtIDEsIHpvbmUpKQomIzQzOwkJCXJldHVybiBlbmRfcGZuIC0gMTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDcyLDcgJiM0Mzs0NjIsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewogCXVuc2lnbmVkIGxvbmcgcGZuOwotCWludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTsKIAogCWlmICh6b25lLSZndDt6b25lX3N0YXJ0X3BmbiA9PSBzdGFydF9wZm4pIHsKIAkJLyoKQEAgLTQ4MSw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCSAqIEluIHRoaXMgY2FzZSwgd2UgZmluZCBzZWNvbmQgc21hbGxlc3QgdmFsaWQgbWVtX3NlY3Rpb24KIAkJICogZm9yIHNocmlua2luZyB6b25lLgogCQkgKi8KLQkJcGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihuaWQsIHpvbmUsIGVuZF9wZm4sCiYjNDM7CQlwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKHpvbmUsIGVuZF9wZm4sCiAJCQkJCQl6b25lX2VuZF9wZm4oem9uZSkpOwogCQlpZiAocGZuKSB7CiAJCQl6b25lLSZndDtzcGFubmVkX3BhZ2VzID0gem9uZV9lbmRfcGZuKHpvbmUpIC0gcGZuOwpAQCAtNDk3LDcgJiM0Mzs0ODYsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBiaWdnZXN0IHZhbGlkIG1lbV9zZWN0aW9uIGZvcgogCQkgKiBzaHJpbmtpbmcgem9uZS4KIAkJICovCi0JCXBmbiA9IGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihuaWQsIHpvbmUsIHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuLAomIzQzOwkJcGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuLAogCQkJCQkgICAgICAgc3RhcnRfcGZuKTsKIAkJaWYgKHBmbikKIAkJCXpvbmUtJmd0O3NwYW5uZWRfcGFnZXMgPSBwZm4gLSB6b25lLSZndDt6b25lX3N0YXJ0X3BmbiAmIzQzOyAxOwpAQCAtNTU3LDE4ICYjNDM7NTQ2LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsCiAKIAkvKgogCSAqIFpvbmUgc2hyaW5raW5nIGNvZGUgY2Fubm90IHByb3Blcmx5IGRlYWwgd2l0aCBaT05FX0RFVklDRS4gU28KLQkgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXMKLQkgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LgomIzQzOwkgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIGl0LgogCSAqLwogCWlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKQogCQlyZXR1cm47CiAKLQljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7Ci0KIAlzaHJpbmtfem9uZV9zcGFuKHpvbmUsIHN0YXJ0X3Bmbiwgc3RhcnRfcGZuICYjNDM7IG5yX3BhZ2VzKTsKIAl1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7Ci0KLQlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogfQogCiAvKioKQEAgLTc0Niw4ICYjNDM7NzMwLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS0mZ3Q7em9uZV9wZ2RhdDsKIAlpbnQgbmlkID0gcGdkYXQtJmd0O25vZGVfaWQ7CiAKLQljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7Ci0KIAlpZiAoem9uZV9pc19lbXB0eSh6b25lKSkKIAkJaW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIAlyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKQEAgLTc3NSw4ICYjNDM7NzU3LDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAltZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLAogCQkJIE1FTUlOSVRfSE9UUExVRywgYWx0bWFwLCBtaWdyYXRldHlwZSwKIAkJCSBpc29sYXRlX3BhZ2VibG9jayk7Ci0KLQlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogfQogCiBzdHJ1Y3QgYXV0b19tb3ZhYmxlX3N0YXRzIHsKQEAgLTEwNzIsNiAmIzQzOzEwNTIsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLAogCWlmIChlYXJseV9zZWN0aW9uKF9fcGZuX3RvX3NlY3Rpb24ocGFnZV90b19wZm4ocGFnZSkpKSkKIAkJem9uZS0mZ3Q7cHJlc2VudF9lYXJseV9wYWdlcyAmIzQzOz0gbnJfcGFnZXM7CiAJem9uZS0mZ3Q7cHJlc2VudF9wYWdlcyAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CXpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gbnJfcGFnZXM7CiAJem9uZS0mZ3Q7em9uZV9wZ2RhdC0mZ3Q7bm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlczsKIAogCWlmIChncm91cCAmYW1wOyZhbXA7IG1vdmFibGUpCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggZjFhZmUwMjNlNGU3Mi4uZDYzZWU1NTRkN2ViOCAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtNzk5LDYgJiM0Mzs3OTksMjggQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogCV9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLAomIzQzOwkJCQkJICAgICBib29sICppc19vbmxpbmUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHN1YnNlY3Rpb24gPSBwZm4gJmFtcDsgUEFHRV9TVUJTRUNUSU9OX01BU0s7CiYjNDM7CiYjNDM7CWlmIChzdWJzZWN0aW9uICE9ICpsYXN0X3N1YnNlY3Rpb24pIHsKJiM0MzsJCSppc19vbmxpbmUgPSAhIXBmbl90b19vbmxpbmVfcGFnZShwZm4pOwomIzQzOwkJKmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247CiYjNDM7CX0KJiM0MzsJcmV0dXJuICppc19vbmxpbmU7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBib29sIHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7CQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3Rfc3Vic2VjdGlvbiwKJiM0MzsJCQkJCSAgICAgYm9vbCAqaXNfb25saW5lKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnkKICAqIGFyZSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIGJ5IGdvaW5nIHRocm91Z2ggX19pbml0X3NpbmdsZV9wYWdlKCkgZHVyaW5nCkBAIC04MjIsMjIgJiM0Mzs4NDQsMjcgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogICogICB6b25lL25vZGUgYWJvdmUgdGhlIGhvbGUgZXhjZXB0IGZvciB0aGUgdHJhaWxpbmcgcGFnZXMgaW4gdGhlIGxhc3QKICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgZXBmbiwKLQkJCQkJICBpbnQgem9uZSwgaW50IG5vZGUpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLAomIzQzOwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXBmbiwKJiM0MzsJCQkJCQkgICBpbnQgem9uZSwgaW50IG5vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JdTY0IHBnY250ID0gMDsKJiM0MzsJdTY0IHBnY250ID0gMCwgb25saW5lX3BnY250ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTsKJiM0MzsJYm9vbCBpc19vbmxpbmUgPSBmYWxzZTsKIAogCWZvcl9lYWNoX3ZhbGlkX3BmbihwZm4sIHNwZm4sIGVwZm4pIHsKIAkJX19pbml0X3NpbmdsZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIHBmbiwgem9uZSwgbm9kZSk7CiAJCV9fU2V0UGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOwomIzQzOwkJaWYgKHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUocGZuLCAmYW1wO2xhc3Rfc3Vic2VjdGlvbiwgJmFtcDtpc19vbmxpbmUpKQomIzQzOwkJCW9ubGluZV9wZ2NudCYjNDM7JiM0Mzs7CiAJCXBnY250JiM0MzsmIzQzOzsKIAl9CiAKIAlpZiAocGdjbnQpCiAJCXByX2luZm8oJiMzNDtPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xuJiMzNDssCiAJCQlub2RlLCB6b25lX25hbWVzW3pvbmVdLCBwZ2NudCk7CiYjNDM7CXJldHVybiBvbmxpbmVfcGdjbnQ7CiB9CiAKIC8qCkBAIC05MzQsOSAmIzQzOzk2MSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXRfem9uZV9yYW5nZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAogCW1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLAogCQkJICB6b25lX2VuZF9wZm4sIE1FTUlOSVRfRUFSTFksIE5VTEwsIG10LCBmYWxzZSk7CiYjNDM7CXpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKJiM0MzsKJiM0MzsJaWYgKCpob2xlX3BmbiAmbHQ7IHN0YXJ0X3BmbikgewomIzQzOwkJdW5zaWduZWQgbG9uZyBob2xlX3N0YXJ0X3BmbiA9ICpob2xlX3BmbjsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGdjbnQ7CiAKLQlpZiAoKmhvbGVfcGZuICZsdDsgc3RhcnRfcGZuKQotCQlpbml0X3VuYXZhaWxhYmxlX3JhbmdlKCpob2xlX3Bmbiwgc3RhcnRfcGZuLCB6b25lX2lkLCBuaWQpOwomIzQzOwkJaWYgKGhvbGVfc3RhcnRfcGZuICZsdDsgem9uZV9zdGFydF9wZm4pIHsKJiM0MzsJCQlpbml0X3VuYXZhaWxhYmxlX3JhbmdlKGhvbGVfc3RhcnRfcGZuLCB6b25lX3N0YXJ0X3BmbiwKJiM0MzsJCQkJCSAgICAgICB6b25lX2lkLCBuaWQpOwomIzQzOwkJCWhvbGVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47CiYjNDM7CQl9CiYjNDM7CQlwZ2NudCA9IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHN0YXJ0X3BmbiwKJiM0MzsJCQkJCSAgICAgICB6b25lX2lkLCBuaWQpOwomIzQzOwkJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBwZ2NudDsKJiM0MzsJfQogCiAJKmhvbGVfcGZuID0gZW5kX3BmbjsKIH0KQEAgLTIxOTUsMjggJiM0MzsyMjM0LDYgQEAgdm9pZCBfX2luaXQgaW5pdF9jbWFfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKQogfQogI2VuZGlmCiAKLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuOwotCXVuc2lnbmVkIGxvbmcgYmxvY2tfZW5kX3BmbjsKLQotCWJsb2NrX2VuZF9wZm4gPSBwYWdlYmxvY2tfZW5kX3BmbihibG9ja19zdGFydF9wZm4pOwotCWZvciAoOyBibG9ja19zdGFydF9wZm4gJmx0OyB6b25lX2VuZF9wZm4oem9uZSk7Ci0JCQlibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLAotCQkJIGJsb2NrX2VuZF9wZm4gJiM0Mzs9IHBhZ2VibG9ja19ucl9wYWdlcykgewotCi0JCWJsb2NrX2VuZF9wZm4gPSBtaW4oYmxvY2tfZW5kX3Bmbiwgem9uZV9lbmRfcGZuKHpvbmUpKTsKLQotCQlpZiAoIV9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKGJsb2NrX3N0YXJ0X3BmbiwKLQkJCQkJICAgICBibG9ja19lbmRfcGZuLCB6b25lKSkKLQkJCXJldHVybjsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JfQotCi0JLyogV2UgY29uZmlybSB0aGF0IHRoZXJlIGlzIG5vIGhvbGUgKi8KLQl6b25lLSZndDtjb250aWd1b3VzID0gdHJ1ZTsKLX0KLQogLyoKICAqIENoZWNrIGlmIGEgUEZOIHJhbmdlIGludGVyc2VjdHMgbXVsdGlwbGUgem9uZXMgb24gb25lIG9yIG1vcmUKICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTc5CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBNZW1vcnkgSG90cGx1ZyBhbmQgQ29udGlndW91cyBab25lIExvZ2ljIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyBtZXNzaW5nIHdpdGggbWVtb3J5IGhvdHBsdWcgYW5kIHRoZSBsb2dpYyBhcm91bmQgY29udGlndW91cyB6b25lcywgc3BlY2lmaWNhbGx5IGJ5IGFkZGluZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byB0aGUgYHN0cnVjdCB6b25lYCBhbmQgY2hhbmdpbmcgaG93IHdlIGRldGVybWluZSBpZiBhIHpvbmUgaXMgY29udGlndW91cy4gSXQgYWxzbyB0b3VjaGVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGxpa2UgYG1lbW9yeV9ibG9ja19vbmxpbmVgLCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBhbmQgdmFyaW91cyBQRk4gbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2g/CgpMZXQmIzM5O3MgbG9vayBhdCB0aGUga2V5IGNoYW5nZXM6IGFkZGluZyBhIGNvdW50ZXIsIGFsdGVyaW5nIGEgYm9vbGVhbiBmbGFnLCBhbmQgdXBkYXRpbmcgYSBmZXcgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUga2VybmVsIGFuZCBwb3RlbnRpYWxseSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBvYnZpb3VzIGF2ZW51ZXMgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXNlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCB0cmFja2luZyBvbmxpbmUgcGFnZXMgYW5kIGNoZWNraW5nIGZvciBjb250aWd1aXR5IHdpdGhpbiBtZW1vcnkgem9uZXMsIG5vdCBuZXcgYWxsb2NhdGlvbiBvciBoYW5kbGluZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgb24gdGhlIHN0YWNrIG9yIGhlYXAuCgpJZiB0aGVyZSYjMzk7cyBhIGJ1ZyBoZXJlLCBJIHN1c3BlY3QgaXQmIzM5O3MgZ29pbmcgdG8gbWFuaWZlc3QgYXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBhbiBpbnZhbGlkIHBhZ2UgYWNjZXNzIOKAkyBsaWtlIHRyeWluZyB0byB1c2UgYSBwYWdlIHN0cnVjdHVyZSB0aGF0IGRvZXNuJiMzOTt0IGV4aXN0IG9yIGhhc24mIzM5O3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4gS0FTQU4gaXMgYWxyZWFkeSBnb2luZyB0byBiZSBteSBwcmltYXJ5IHRvb2wgdG8gYWRkcmVzcyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMsIHdoaWNoIGFyZSB0aGUgbWFpbiByaXNrcyBoZXJlLCBzaW5jZSBpdCBpcyB0YWlsb3JlZCB0byBmaW5kaW5nIHRoZXNlIGlzc3Vlcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGNvdWxkIGNhdXNlIGEgc2VjdXJpdHkgcmlzaywgcGFydGljdWxhcmx5IGlmIHRoYXQgbWVtb3J5IGlzIGxlYWtlZC4gQnV0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBjaGFuZ2luZyBob3cgd2UgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcGFnZSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgcmVnaW9ucywgb25seSBob3cgd2UgdHJhY2sgdGhlaXIgc3RhdHVzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjaywgdGhvdWdoLCB0byBiZSBzYWZlLiBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCBpcyBhIHNpbXBsZSBjb3VudGVyLiBgem9uZS0mZ3Q7Y29udGlndW91c2AgaXMgYSBib29sZWFuLiBgaW5pdF91bmF2YWlsYWJsZV9yYW5nZWAgaW5pdGlhbGl6ZXMgcGFnZXMgdXNpbmcgYF9faW5pdF9zaW5nbGVfcGFnZWAgYW5kIGBfX1NldFBhZ2VSZXNlcnZlZGAuIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgY3JpdGljYWwsIGFuZCB0aGVzZSBwYWdlcyB3aWxsIGJlIGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGluZywgb3IgdGhleSB3aWxsIGJlIHplcm9lZC4gVGhlIHBhdGNoIHVwZGF0ZXMgdGhlc2UgY291bnRlcnMgYW5kIGZsYWdzIGFuZCBtYW5pcHVsYXRlcyB0aGVzZSBtZW1vcnkgem9uZXMsIGJ1dCBpdCBpc24mIzM5O3QgY2hhbmdpbmcgaG93IHRoZXNlIG1lbW9yeSB6b25lcyBhcmUgYWxsb2NhdGVkIG9yIGhvdyB3ZSBpbml0aWFsaXplIHRoZWlyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGhhdmUgYW55IG9idmlvdXMgaW1wYWN0IG9uIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYWxsb2NhdGlvbiBvciByZWxlYXNlLCBpdCB1cGRhdGVzIGZsYWdzIGZvciB6b25lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCByZWxlYXNlZCwgYW5kIHNvIG9uLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHVwZGF0ZXMgcGFnZSB0cmFja2luZyBhbmQgY29udGlndW91cyB6b25lIGxvZ2ljLCB3aGljaCBpcyBwcmltYXJpbHkgbWFuYWdpbmcgY291bnRlcnMgYW5kIGZsYWdzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgbWVtb3J5IHN0cnVjdHVyZXMuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb24gb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgcHJvbmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFuZCBpcyBub3QgZ29pbmcgdG8gbGVhayBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlLiBCdWdzIHdpbGwgbGlrZWx5IGJlIG1lbW9yeSBhY2Nlc3MgZXJyb3JzIHRoYXQgS0FTQU4gY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBob3RwbHVnIGFuZCB6b25lIGNvbnRpZ3VvdXMgdHJhY2tpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgdG8gYHN0cnVjdCB6b25lYCBhbmQgdXBkYXRpbmcgaG93IGB6b25lX2lzX2NvbnRpZ3VvdXNgIGlzIGV2YWx1YXRlZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHVwZGF0aW5nIGNvdW50ZXJzIGFuZCBib29sZWFuIGZsYWdzLCBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgY29udGlndW91cyB6b25lIGV2YWx1YXRpb24pIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBwYWdlIHN0cnVjdCBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjM5LjA0MTgyMjY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDY2ODM1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib25saW5lX3BhZ2VzXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwiX19hZGRfcGFnZXNcIixcbiAgICBcIl9fcmVtb3ZlX3BhZ2VzXCIsXG4gICAgXCJhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaG90cGx1ZyBhbmQgem9uZSBjb250aWd1b3VzIHRyYWNraW5nIGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIHRvIGBzdHJ1Y3Qgem9uZWAgYW5kIHVwZGF0aW5nIGhvdyBgem9uZV9pc19jb250aWd1b3VzYCBpcyBldmFsdWF0ZWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1cGRhdGluZyBjb3VudGVycyBhbmQgYm9vbGVhbiBmbGFncywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGluZm8tbGVha3MuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgaW5jb3JyZWN0IGNvbnRpZ3VvdXMgem9uZSBldmFsdWF0aW9uKSB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgcGFnZSBzdHJ1Y3QgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6MzkuMDQxODQ1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNDA5OTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkMTQzY2E2ZmFmZDM4MjU2ODZkYjJjYWY5MTE4MGViNmQwYmZmYjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDk6MDY6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XFxuaW5kZXggYjc2MTgzNTQ1ZTViZi4uY2VlYTZjOGIyN2NjMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcXG5AQCAtNDgzLDYgKzQ4MywxMiBAQCBHZW5lcmFsXFxuICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdFxcbiAgIGlzIGluaXRpYWxpemVkIGJ5IGBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcygpYGAuXFxuIFxcbitgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgXFxuKyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmRcXG4rICBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmRcXG4rICBgYHBmbl90b19vbmxpbmVfcGFnZSgpYGAgc3VjY2VlZHMuIFNlZSB0aGUgY29tbWVudCBmb3JcXG4rICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuXFxuK1xcbiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYFxcbiAgIFRoZSBwcmVzZW50IHBhZ2VzIGV4aXN0aW5nIHdpdGhpbiB0aGUgem9uZSBsb2NhdGVkIG9uIG1lbW9yeSBhdmFpbGFibGUgc2luY2VcXG4gICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbmluZGV4IGJjZmUyZDlmNGFkYmQuLjk3Njk5YmU5YTM1NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbiBcXHRcXHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVxcdTAwM2VhbHRtYXAtXFx1MDAzZWZyZWU7XFxuIFxcbiBcXHRtZW1faG90cGx1Z19iZWdpbigpO1xcbitcXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XFxuIFxcdFxcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcXG4gXFx0XFx0aWYgKHJldClcXG5AQCAtMjcwLDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcbiBcXHRtZW0tXFx1MDAzZXpvbmUgPSB6b25lO1xcbiBvdXQ6XFxuK1xcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdG1lbV9ob3RwbHVnX2RvbmUoKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yOTUsNiArMjk3LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcdFxcdG5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tXFx1MDAzZWFsdG1hcC1cXHUwMDNlZnJlZTtcXG4gXFxuIFxcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XFxuK1xcdGNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tXFx1MDAzZXpvbmUpO1xcbiBcXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcXG4gXFx0XFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXFx1MDAzZWdyb3VwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcXG5AQCAtMzEyLDggKzMxNSwxMCBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4gXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuIFxcdFxcdG1ocF9kZWluaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMpO1xcbiBcXG4tXFx0bWVtLVxcdTAwM2V6b25lID0gTlVMTDtcXG4gb3V0OlxcbitcXHRzZXRfem9uZV9jb250aWd1b3VzKG1lbS1cXHUwMDNlem9uZSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRtZW0tXFx1MDAzZXpvbmUgPSBOVUxMO1xcbiBcXHRtZW1faG90cGx1Z19kb25lKCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCBjYTI3MTIxODcxNDc1Li41OGYzNDJkZTNiYWNiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTEwMzIsNiArMTAzMiwyMSBAQCBzdHJ1Y3Qgem9uZSB7XFxuIFxcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXFxuIFxcdCAqIChNSUdSQVRFX0NNQSkuXFxuIFxcdCAqXFxuK1xcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxcbitcXHQgKiBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmQgbWVtb3J5IGhvbGVzIHdob3NlXFxuK1xcdCAqIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHBmbl90b19vbmxpbmVfcGFnZSgpXFxuK1xcdCAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLFxcbitcXHQgKiBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnlcXG4rXFx0ICogUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuXFxuK1xcdCAqIG9ubGluZSBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhblxcbitcXHQgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2ZcXG4rXFx0ICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG9cXG4rXFx0ICogY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sgbWF5IHJlc3VsdCBpbiBhXFxuK1xcdCAqIFxcXCJ0b28gc21hbGxcXFwiIHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cyBkZXRlY3RpbmcgYVxcbitcXHQgKiBjb250aWd1b3VzIHpvbmUuXFxuK1xcdCAqXFxuIFxcdCAqIFNvIHByZXNlbnRfcGFnZXMgbWF5IGJlIHVzZWQgYnkgbWVtb3J5IGhvdHBsdWcgb3IgbWVtb3J5IHBvd2VyXFxuIFxcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcXG4gXFx0ICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWRcXG5AQCAtMTA1Niw2ICsxMDcxLDcgQEAgc3RydWN0IHpvbmUge1xcbiBcXHRhdG9taWNfbG9uZ190XFx0XFx0bWFuYWdlZF9wYWdlcztcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHNwYW5uZWRfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRwcmVzZW50X3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwO1xcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRwcmVzZW50X2Vhcmx5X3BhZ2VzO1xcbiAjZW5kaWZcXG5AQCAtMTY4MSw2ICsxNjk3LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rLyoqXFxuKyAqIHpvbmVfaXNfY29udGlndW91cyAtIHRlc3Qgd2hldGhlciBhIHpvbmUgaXMgY29udGlndW91c1xcbisgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC5cXG4rICpcXG4rICogSW4gYSBjb250aWd1b3VzIHpvbmUsIGl0IGlzIHZhbGlkIHRvIGNhbGwgcGZuX3RvX3BhZ2UoKSBvbiBhbnkgUEZOIGluIHRoZVxcbisgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLlxcbisgKlxcbisgKiBOb3RlIHRoYXQgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gd2l0aCBtZW1vcnkgb2ZmbGluaW5nIG1ha2VzIGFueSBQRk5cXG4rICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLlxcbisgKlxcbisgKiBaT05FX0RFVklDRSB6b25lcyBhcmUgYWx3YXlzIG1hcmtlZCBub24tY29udGlndW91cy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRSh6b25lLVxcdTAwM2Vjb250aWd1b3VzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKHpvbmUtXFx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwKVxcbitcXHRcXHRXUklURV9PTkNFKHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxcbit7XFxuK1xcdFdSSVRFX09OQ0Uoem9uZS1cXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm5zIHRydWUgaWYgYSB6b25lIGhhcyBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3IuXFxuICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhblxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjAuLmY5MzJiNzU3N2M5MmEgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtODA1LDIxICs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuLVxcdGlmICh6b25lLVxcdTAwM2Vjb250aWd1b3VzKVxcbitcXHRpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKVxcbiBcXHRcXHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcXG4gXFxuIFxcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xcbiB9XFxuIFxcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLXtcXG4tXFx0em9uZS1cXHUwMDNlY29udGlndW91cyA9IGZhbHNlO1xcbi19XFxuLVxcbiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdFxcdFxcdCAgICBpbnQgbXQpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbmluZGV4IDdhYzE5ZmFiMjI2MzIuLjhkYmQ1MGQ4ODE1NWEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5AQCAtNDIyLDQ5ICs0MjIsMzkgQEAgaW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi0vKiBmaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pICovXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbitzdGF0aWMgYm9vbCBzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuLVxcdGZvciAoOyBzdGFydF9wZm4gXFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gKz0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IEFMSUdOX0RPV04ocGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTik7XFxuK1xcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBBR0VTX1BFUl9TVUJTRUNUSU9OIC0gMTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHN0YXJ0X3BmbikgIT0gbmlkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdC8qIEFsbCBwYWdlcyBpbiBhIHN1YnNlY3Rpb24gYXJlIGVpdGhlciBvbmxpbmUgb3Igb2ZmbGluZS4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdC8qIENoZWNraW5nIHN0YXJ0K2VuZCBpcyBzdWZmaWNpZW50LiAqL1xcbitcXHRyZXR1cm4gem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkgfHxcXG4rXFx0ICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTtcXG4rfVxcbiBcXG4tXFx0XFx0cmV0dXJuIHN0YXJ0X3BmbjtcXG4rLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbit7XFxuK1xcdGZvciAoOyBzdGFydF9wZm4gXFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gKz0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcXG4rXFx0XFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShzdGFydF9wZm4sIHpvbmUpKVxcbitcXHRcXHRcXHRyZXR1cm4gc3RhcnRfcGZuO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyogZmluZCB0aGUgYmlnZ2VzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pLiAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXFxuLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXG4tXFx0LyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovXFxuLVxcdHBmbiA9IGVuZF9wZm4gLSAxO1xcbi1cXHRmb3IgKDsgcGZuIFxcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0cmV0dXJuIHBmbjtcXG4rXFx0Zm9yICg7IGVuZF9wZm4gXFx1MDAzZT0gc3RhcnRfcGZuOyBlbmRfcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XFxuK1xcdFxcdGlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoZW5kX3BmbiAtIDEsIHpvbmUpKVxcbitcXHRcXHRcXHRyZXR1cm4gZW5kX3BmbiAtIDE7XFxuIFxcdH1cXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00NzIsNyArNDYyLDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXHRpbnQgbmlkID0gem9uZV90b19uaWQoem9uZSk7XFxuIFxcbiBcXHRpZiAoem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm4gPT0gc3RhcnRfcGZuKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTQ4MSw3ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxcbiBcXHRcXHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcXG4rXFx0XFx0cGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3Bmbih6b25lLCBlbmRfcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR6b25lX2VuZF9wZm4oem9uZSkpO1xcbiBcXHRcXHRpZiAocGZuKSB7XFxuIFxcdFxcdFxcdHpvbmUtXFx1MDAzZXNwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47XFxuQEAgLTQ5Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBiaWdnZXN0IHZhbGlkIG1lbV9zZWN0aW9uIGZvclxcbiBcXHRcXHQgKiBzaHJpbmtpbmcgem9uZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBmbiA9IGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihuaWQsIHpvbmUsIHpvbmUtXFx1MDAzZXpvbmVfc3RhcnRfcGZuLFxcbitcXHRcXHRwZm4gPSBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oem9uZSwgem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGFydF9wZm4pO1xcbiBcXHRcXHRpZiAocGZuKVxcbiBcXHRcXHRcXHR6b25lLVxcdTAwM2VzcGFubmVkX3BhZ2VzID0gcGZuIC0gem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm4gKyAxO1xcbkBAIC01NTcsMTggKzU0NiwxMyBAQCB2b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTb1xcbi1cXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXNcXG4tXFx0ICogc2V0X3pvbmVfY29udGlndW91cygpIGNhbm5vdCBkZWFsIHdpdGggWk9ORV9ERVZJQ0UgZWl0aGVyIHdheS5cXG4rXFx0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cXG4gXFx0ICovXFxuIFxcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuLVxcbiBcXHRzaHJpbmtfem9uZV9zcGFuKHpvbmUsIHN0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpO1xcbiBcXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XFxuLVxcbi1cXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzQ2LDggKzczMCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuIFxcbi1cXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuLVxcbiBcXHRpZiAoem9uZV9pc19lbXB0eSh6b25lKSlcXG4gXFx0XFx0aW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcXG4gXFx0cmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XFxuQEAgLTc3NSw4ICs3NTcsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxcbiBcXHRcXHRcXHQgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLFxcbiBcXHRcXHRcXHQgaXNvbGF0ZV9wYWdlYmxvY2spO1xcbi1cXG4tXFx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcXG4gfVxcbiBcXG4gc3RydWN0IGF1dG9fbW92YWJsZV9zdGF0cyB7XFxuQEAgLTEwNzIsNiArMTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuIFxcdGlmIChlYXJseV9zZWN0aW9uKF9fcGZuX3RvX3NlY3Rpb24ocGFnZV90b19wZm4ocGFnZSkpKSlcXG4gXFx0XFx0em9uZS1cXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyArPSBucl9wYWdlcztcXG4gXFx0em9uZS1cXHUwMDNlcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcXG4rXFx0em9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IG5yX3BhZ2VzO1xcbiBcXHR6b25lLVxcdTAwM2V6b25lX3BnZGF0LVxcdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKz0gbnJfcGFnZXM7XFxuIFxcbiBcXHRpZiAoZ3JvdXAgXFx1MDAyNlxcdTAwMjYgbW92YWJsZSlcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggZjFhZmUwMjNlNGU3Mi4uZDYzZWU1NTRkN2ViOCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtNzk5LDYgKzc5OSwyOCBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuIFxcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUFxcbitzdGF0aWMgYm9vbCBfX2luaXQgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCAqaXNfb25saW5lKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3Vic2VjdGlvbiA9IHBmbiBcXHUwMDI2IFBBR0VfU1VCU0VDVElPTl9NQVNLO1xcbitcXG4rXFx0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xcbitcXHRcXHQqaXNfb25saW5lID0gISFwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4rXFx0XFx0Kmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247XFxuK1xcdH1cXG4rXFx0cmV0dXJuICppc19vbmxpbmU7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgKmlzX29ubGluZSlcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcXG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcXG5AQCAtODIyLDIyICs4NDQsMjcgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxcbiAgKiAgIHNlY3Rpb24gdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSB6b25lL25vZGUgYmVsb3cuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXFxuLVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGludCB6b25lLCBpbnQgbm9kZSlcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGVwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tXFx0dTY0IHBnY250ID0gMDtcXG4rXFx0dTY0IHBnY250ID0gMCwgb25saW5lX3BnY250ID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTtcXG4rXFx0Ym9vbCBpc19vbmxpbmUgPSBmYWxzZTtcXG4gXFxuIFxcdGZvcl9lYWNoX3ZhbGlkX3BmbihwZm4sIHNwZm4sIGVwZm4pIHtcXG4gXFx0XFx0X19pbml0X3NpbmdsZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIHBmbiwgem9uZSwgbm9kZSk7XFxuIFxcdFxcdF9fU2V0UGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpO1xcbitcXHRcXHRpZiAodW5hdmFpbGFibGVfcGZuX2lzX29ubGluZShwZm4sIFxcdTAwMjZsYXN0X3N1YnNlY3Rpb24sIFxcdTAwMjZpc19vbmxpbmUpKVxcbitcXHRcXHRcXHRvbmxpbmVfcGdjbnQrKztcXG4gXFx0XFx0cGdjbnQrKztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHBnY250KVxcbiBcXHRcXHRwcl9pbmZvKFxcXCJPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0bm9kZSwgem9uZV9uYW1lc1t6b25lXSwgcGdjbnQpO1xcbitcXHRyZXR1cm4gb25saW5lX3BnY250O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC05MzQsOSArOTYxLDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXG4gXFx0bWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sXFxuIFxcdFxcdFxcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xcbitcXHR6b25lLVxcdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4rXFxuK1xcdGlmICgqaG9sZV9wZm4gXFx1MDAzYyBzdGFydF9wZm4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBob2xlX3N0YXJ0X3BmbiA9ICpob2xlX3BmbjtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZ2NudDtcXG4gXFxuLVxcdGlmICgqaG9sZV9wZm4gXFx1MDAzYyBzdGFydF9wZm4pXFxuLVxcdFxcdGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoKmhvbGVfcGZuLCBzdGFydF9wZm4sIHpvbmVfaWQsIG5pZCk7XFxuK1xcdFxcdGlmIChob2xlX3N0YXJ0X3BmbiBcXHUwMDNjIHpvbmVfc3RhcnRfcGZuKSB7XFxuK1xcdFxcdFxcdGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHpvbmVfc3RhcnRfcGZuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgem9uZV9pZCwgbmlkKTtcXG4rXFx0XFx0XFx0aG9sZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRwZ2NudCA9IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHN0YXJ0X3BmbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHpvbmVfaWQsIG5pZCk7XFxuK1xcdFxcdHpvbmUtXFx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBwZ2NudDtcXG4rXFx0fVxcbiBcXG4gXFx0KmhvbGVfcGZuID0gZW5kX3BmbjtcXG4gfVxcbkBAIC0yMTk1LDI4ICsyMjM0LDYgQEAgdm9pZCBfX2luaXQgaW5pdF9jbWFfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmxvY2tfc3RhcnRfcGZuID0gem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm47XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmxvY2tfZW5kX3BmbjtcXG4tXFxuLVxcdGJsb2NrX2VuZF9wZm4gPSBwYWdlYmxvY2tfZW5kX3BmbihibG9ja19zdGFydF9wZm4pO1xcbi1cXHRmb3IgKDsgYmxvY2tfc3RhcnRfcGZuIFxcdTAwM2Mgem9uZV9lbmRfcGZuKHpvbmUpO1xcbi1cXHRcXHRcXHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxcbi1cXHRcXHRcXHQgYmxvY2tfZW5kX3BmbiArPSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcXG4tXFxuLVxcdFxcdGJsb2NrX2VuZF9wZm4gPSBtaW4oYmxvY2tfZW5kX3Bmbiwgem9uZV9lbmRfcGZuKHpvbmUpKTtcXG4tXFxuLVxcdFxcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xcbi1cXHR6b25lLVxcdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcXG4tfVxcbi1cXG4gLypcXG4gICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZVxcbiAgKiBOVU1BIG5vZGVzLiBTcGVjaWZ5IHRoZSBAbmlkIGFyZ3VtZW50IGlmIGl0IGlzIGtub3duIHRoYXQgdGhpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNjo0MC40NTY2NDM3OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzkxNjEzMTk2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvbmxpbmVfcGFnZXNcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIixcbiAgICBcIm1vdmVfcGZuX3JhbmdlX3RvX3pvbmVcIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJfX2FkZF9wYWdlc1wiLFxuICAgIFwiX19yZW1vdmVfcGFnZXNcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5pbmRleCBiNzYxODM1NDVlNWJmLi5jZWVhNmM4YjI3Y2MxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbkBAIC00ODMsNiArNDgzLDEyIEBAIEdlbmVyYWxcbiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXRcbiAgIGlzIGluaXRpYWxpemVkIGJ5IGBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcygpYGAuXG4gXG4rYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYFxuKyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmRcbisgIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZFxuKyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yXG4rICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuXG4rXG4gYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGBcbiAgIFRoZSBwcmVzZW50IHBhZ2VzIGV4aXN0aW5nIHdpdGhpbiB0aGUgem9uZSBsb2NhdGVkIG9uIG1lbW9yeSBhdmFpbGFibGUgc2luY2VcbiAgIGVhcmx5IGJvb3QsIGV4Y2x1ZGluZyBob3RwbHVnZ2VkIG1lbW9yeS4gRGVmaW5lZCBvbmx5IHdoZW5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbmluZGV4IGJjZmUyZDlmNGFkYmQuLjk3Njk5YmU5YTM1NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XG4gXHRcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcbiBcdFx0aWYgKHJldClcbkBAIC0yNzAsNiArMjcxLDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcbiBcdG1lbS1cdTAwM2V6b25lID0gem9uZTtcbiBvdXQ6XG4rXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjk1LDYgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG4gXHRcdFx0XHRcdCAgLW5yX3ZtZW1tYXBfcGFnZXMpO1xuQEAgLTMxMiw4ICszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0bWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7XG4gXG4tXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4rXHRpZiAoIXJldClcbitcdFx0bWVtLVx1MDAzZXpvbmUgPSBOVUxMO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICsxMDMyLDIxIEBAIHN0cnVjdCB6b25lIHtcbiBcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXG4gXHQgKiAoTUlHUkFURV9DTUEpLlxuIFx0ICpcbitcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuK1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZVxuK1x0ICogbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQgcGZuX3RvX29ubGluZV9wYWdlKClcbitcdCAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLFxuK1x0ICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55XG4rXHQgKiBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXG4rXHQgKlxuK1x0ICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhblxuK1x0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXG4rXHQgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2ZcbitcdCAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvXG4rXHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcbitcdCAqIFwidG9vIHNtYWxsXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXG4rXHQgKiBjb250aWd1b3VzIHpvbmUuXG4rXHQgKlxuIFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcbiBcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcbiBcdCAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkXG5AQCAtMTA1Niw2ICsxMDcxLDcgQEAgc3RydWN0IHpvbmUge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRtYW5hZ2VkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzcGFubmVkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwYWdlc193aXRoX29ubGluZV9tZW1tYXA7XG4gI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X2Vhcmx5X3BhZ2VzO1xuICNlbmRpZlxuQEAgLTE2ODEsNiArMTY5NywzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB9XG4gI2VuZGlmXG4gXG4rLyoqXG4rICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzXG4rICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuXG4rICpcbisgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlXG4rICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy5cbisgKlxuKyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTlxuKyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy5cbisgKlxuKyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4rXHRcdHJldHVybjtcbitcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4rXHRcdFdSSVRFX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xuK31cbitcbiAvKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cbiAgKiBBbGwgdGhlIHJlY2xhaW0gZGVjaXNpb25zIGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMC4uZjkzMmI3NTc3YzkyYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC04MDUsMjEgKzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbitcdGlmICh6b25lX2lzX2NvbnRpZ3VvdXMoem9uZSkpXG4gXHRcdHJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pO1xuIFxuIFx0cmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7XG4gfVxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuLXtcbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IGZhbHNlO1xuLX1cbi1cbiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdCAgICBpbnQgbXQpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyLi44ZGJkNTBkODgxNTVhIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTQyMiw0OSArNDIyLDM5IEBAIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyBib29sIHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBBTElHTl9ET1dOKHBmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICsgUEFHRVNfUEVSX1NVQlNFQ1RJT04gLSAxO1xuIFxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBBbGwgcGFnZXMgaW4gYSBzdWJzZWN0aW9uIGFyZSBlaXRoZXIgb25saW5lIG9yIG9mZmxpbmUuICovXG4rXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBDaGVja2luZyBzdGFydCtlbmQgaXMgc3VmZmljaWVudC4gKi9cbitcdHJldHVybiB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSB8fFxuK1x0ICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTtcbit9XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4rLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4re1xuK1x0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4rXHRcdGlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoc3RhcnRfcGZuLCB6b25lKSlcbitcdFx0XHRyZXR1cm4gc3RhcnRfcGZuO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIGZpbmQgdGhlIGJpZ2dlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKS4gKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cbi1cdC8qIHBmbiBpcyB0aGUgZW5kIHBmbiBvZiBhIG1lbW9yeSBzZWN0aW9uLiAqL1xuLVx0cGZuID0gZW5kX3BmbiAtIDE7XG4tXHRmb3IgKDsgcGZuIFx1MDAzZT0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbi1cdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRyZXR1cm4gcGZuO1xuK1x0Zm9yICg7IGVuZF9wZm4gXHUwMDNlPSBzdGFydF9wZm47IGVuZF9wZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbitcdFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpXG4rXHRcdFx0cmV0dXJuIGVuZF9wZm4gLSAxO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ3Miw3ICs0NjIsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdGludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTtcbiBcbiBcdGlmICh6b25lLVx1MDAzZXpvbmVfc3RhcnRfcGZuID09IHN0YXJ0X3Bmbikge1xuIFx0XHQvKlxuQEAgLTQ4MSw3ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxuIFx0XHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcbitcdFx0cGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3Bmbih6b25lLCBlbmRfcGZuLFxuIFx0XHRcdFx0XHRcdHpvbmVfZW5kX3Bmbih6b25lKSk7XG4gXHRcdGlmIChwZm4pIHtcbiBcdFx0XHR6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47XG5AQCAtNDk3LDcgKzQ4Niw3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHQgKiBJbiB0aGlzIGNhc2UsIHdlIGZpbmQgc2Vjb25kIGJpZ2dlc3QgdmFsaWQgbWVtX3NlY3Rpb24gZm9yXG4gXHRcdCAqIHNocmlua2luZyB6b25lLlxuIFx0XHQgKi9cbi1cdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgem9uZS1cdTAwM2V6b25lX3N0YXJ0X3BmbixcbitcdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgICAgICBzdGFydF9wZm4pO1xuIFx0XHRpZiAocGZuKVxuIFx0XHRcdHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gKyAxO1xuQEAgLTU1NywxOCArNTQ2LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4gXG4gXHQvKlxuIFx0ICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTb1xuLVx0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayB0aGUgem9uZXMgLSB3aGljaCBpcyBva2F5IGFzXG4tXHQgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LlxuK1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gKyBucl9wYWdlcyk7XG4gXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XG4tXG4tXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIH1cbiBcbiAvKipcbkBAIC03NDYsOCArNzMwLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdGlmICh6b25lX2lzX2VtcHR5KHpvbmUpKVxuIFx0XHRpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xuIFx0cmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG5AQCAtNzc1LDggKzc1Nyw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiArMTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4gXHRpZiAoZWFybHlfc2VjdGlvbihfX3Bmbl90b19zZWN0aW9uKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpXG4gXHRcdHpvbmUtXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyArPSBucl9wYWdlcztcbiBcdHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbitcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIuLmQ2M2VlNTU0ZDdlYjggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTc5OSw2ICs3OTksMjggQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFx0X19pbml0X2RlZmVycmVkX3BhZ2UocGZuLCBuaWQpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4rc3RhdGljIGJvb2wgX19pbml0IHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4rXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgKmlzX29ubGluZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIHN1YnNlY3Rpb24gPSBwZm4gXHUwMDI2IFBBR0VfU1VCU0VDVElPTl9NQVNLO1xuK1xuK1x0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xuK1x0XHQqaXNfb25saW5lID0gISFwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcdFx0Kmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247XG4rXHR9XG4rXHRyZXR1cm4gKmlzX29ubGluZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbixcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbisjZW5kaWZcbitcbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTgyMiwyMiArODQ0LDI3IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxuICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxuLVx0XHRcdFx0XHQgIGludCB6b25lLCBpbnQgbm9kZSlcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlcGZuLFxuK1x0XHRcdFx0XHRcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHU2NCBwZ2NudCA9IDA7XG4rXHR1NjQgcGdjbnQgPSAwLCBvbmxpbmVfcGdjbnQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTtcbitcdGJvb2wgaXNfb25saW5lID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XG4gXHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xuIFx0XHRfX1NldFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTtcbitcdFx0aWYgKHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUocGZuLCBcdTAwMjZsYXN0X3N1YnNlY3Rpb24sIFx1MDAyNmlzX29ubGluZSkpXG4rXHRcdFx0b25saW5lX3BnY250Kys7XG4gXHRcdHBnY250Kys7XG4gXHR9XG4gXG4gXHRpZiAocGdjbnQpXG4gXHRcdHByX2luZm8oXCJPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xcblwiLFxuIFx0XHRcdG5vZGUsIHpvbmVfbmFtZXNbem9uZV0sIHBnY250KTtcbitcdHJldHVybiBvbmxpbmVfcGdjbnQ7XG4gfVxuIFxuIC8qXG5AQCAtOTM0LDkgKzk2MSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXRfem9uZV9yYW5nZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxuIFx0XHRcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xuK1x0em9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbitcbitcdGlmICgqaG9sZV9wZm4gXHUwMDNjIHN0YXJ0X3Bmbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuO1xuK1x0XHR1bnNpZ25lZCBsb25nIHBnY250O1xuIFxuLVx0aWYgKCpob2xlX3BmbiBcdTAwM2Mgc3RhcnRfcGZuKVxuLVx0XHRpbml0X3VuYXZhaWxhYmxlX3JhbmdlKCpob2xlX3Bmbiwgc3RhcnRfcGZuLCB6b25lX2lkLCBuaWQpO1xuK1x0XHRpZiAoaG9sZV9zdGFydF9wZm4gXHUwMDNjIHpvbmVfc3RhcnRfcGZuKSB7XG4rXHRcdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgem9uZV9zdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHRcdGhvbGVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47XG4rXHRcdH1cbitcdFx0cGdjbnQgPSBpbml0X3VuYXZhaWxhYmxlX3JhbmdlKGhvbGVfc3RhcnRfcGZuLCBzdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBwZ2NudDtcbitcdH1cbiBcbiBcdCpob2xlX3BmbiA9IGVuZF9wZm47XG4gfVxuQEAgLTIxOTUsMjggKzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xuLVxuLVx0XHRibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7XG4tXG4tXHRcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxuLVx0XHRcdFx0XHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4tXG4tXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXG4gICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjQwLjQ1NjY0NTAwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjc2NDY2MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU2NvcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4gU2VlbXMgbGlrZSBpdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdHBsdWcsIHdoaWNoIGFsd2F5cyByYWlzZXMgYSBmbGFnLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyB0aGUgdHJhY2tpbmcgb2YgY29udGlndW91cyBtZW1vcnkgem9uZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIGNhbGN1bGF0aW9uIG9mIGB6b25lLVx1MDAzZWNvbnRpZ3VvdXNgLiBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2VibG9ja3MsIGl0J3Mgbm93IHVzaW5nIGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGFuZCBpbnRyb2R1Y2luZyBgem9uZV9pc19jb250aWd1b3VzKClgLCBgc2V0X3pvbmVfY29udGlndW91cygpYCwgYW5kIGBjbGVhcl96b25lX2NvbnRpZ3VvdXMoKWAgd2hpY2ggaXMgbW9yZSBlZmZpY2llbnQsIGVzcGVjaWFsbHkgaW4gbGFyZ2VyIHpvbmVzLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG86XG5cbiogICBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGA6IERlZmluaW5nIHRoZSBuZXcgZGF0YSBhbmQgZnVuY3Rpb25zLlxuKiAgIGBtbS9pbnRlcm5hbC5oYDogUmVwbGFjaW5nIHNvbWUgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlIG5ldyBoZWxwZXIgZnVuY3Rpb25zLlxuKiAgIGBtbS9tZW1vcnlfaG90cGx1Zy5jYDogVXBkYXRpbmcgc29tZSBvZiB0aGUgaG90cGx1ZyByb3V0aW5lcyBhbmQgaW50cm9kdWNpbmcgaGVscGVyIGZ1bmN0aW9ucy5cbiogICBgbW0vbW1faW5pdC5jYDogSW5pdGlhbGl6aW5nIHRoaW5ncyBmb3IgaG90cGx1ZyB3aXRoIHRoaXMgdXBkYXRlZCBpbXBsZW1lbnRhdGlvbi5cbiogICBgZHJpdmVycy9iYXNlL21lbW9yeS5jYDogQW5kIGltcG9ydGFudGx5LCBjaGFuZ2luZyBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAsIHdoaWNoIGFyZSBzeXNmcyBleHBvc2VkLCBzbyBpbnRlcmVzdGluZy5cblxuVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgY29udGlndW91cyBtZW1vcnkgaXMgbWFuYWdlZC4gSXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHBlcmZvcm1hbmNlLCB0aGF0IGlzIHdvcnRoIGFuYWx5emluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgZXZlbiBwZXJmb3JtYW5jZS1yZWxhdGVkIGNoYW5nZXMgY2FuIGhhdmUgc3VidGxlIGVmZmVjdHMgb24gdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEtWTSwgb3IgZXZlbiBBQ1BJIG1lbW9yeSBob3RwbHVnIG9yIHZpcnRpby1tZW0uXG5cblRoZSBgbW1faW5pdC5jYCBjaGFuZ2VzIG1lYW4gdGhpcyB3aWxsIGFsc28gYmUgZXhlY3V0ZWQgYXQgYm9vdCB0aW1lLCBhbmQgdGhhdCdzIHNvbWV0aGluZyBlbHNlIHRvIGtlZXAgaW4gbWluZC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzOiB3aGF0IHBhcnRzIGFyZSBtb3N0IGludGVyZXN0aW5nIHRvIGxvb2sgYXQ/XG5cbmBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgdHJpZ2dlcmVkIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gcHJpbWUgZnV6emluZyB0YXJnZXRzIGR1ZSB0byB0aGVpciBleHRlcm5hbCBpbnRlcmZhY2UuIEFsc28sIGBfX2FkZF9wYWdlc2AgYW5kIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCwgYW5kIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YCwgdXNlZCBpbiBtZW1vcnkgaG90cGx1Zy4gTGV0J3Mgc2VlIGlmIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBzZXQ7IHNpbmNlIHRoaXMgaXMga2VybmVsLCBpdCdzIHByb2JhYmx5IGFsbW9zdCBhbHdheXMgZW5hYmxlZCBmb3IgZnV6emluZyBrZXJuZWxzLlxuXG5Ob3csIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYG1lbW9yeV9ibG9ja19vbmxpbmVgLiBTaW5jZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgY2FsbGluZyBjb250ZXh0cyBhcmUgbGltaXRlZCwgYnV0IGZpbmRpbmcgdGhlbSBpcyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTgyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6NTAuNzMzMTE0MDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9ibG9ja19vbmxpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWJsa19ucl9wb2lzb24oc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyMy0gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjI0OnN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyNS17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9MzMxPW1lbW9yeV9ibG9ja19hY3Rpb24oc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB1bnNpZ25lZCBsb25nIGFjdGlvbilcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzYtXFx0Y2FzZSBNRU1fT05MSU5FOlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMzc6XFx0XFx0cmV0ID0gbWVtb3J5X2Jsb2NrX29ubGluZShtZW0pO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjUwLjc3ODAxNjExOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTE1MzAzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBTdWJzeXN0ZW0gT25saW5lIFRyaWdnZXIqKlxuXG5SaWdodCwgc28gYG1lbW9yeV9ibG9ja19hY3Rpb25gIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgdWx0aW1hdGVseSBiZWluZyBjYWxsZWQgaGVyZS4gVGhhdCdzIHRoZSBrZXkgb3BlcmF0aW9uLiBBbmQgd2hlcmUncyBpdCBjb21pbmcgZnJvbT8gQWgsIGl0J3MgYmVpbmcgdHJpZ2dlcmVkIHZpYSBgbWVtb3J5X3N1YnN5c19vbmxpbmVgLiBJbnRlcmVzdGluZy4gYG1lbW9yeV9zdWJzeXNfb25saW5lYCBpdHNlbGYgaXMgaW5pdGlhdGVkIGJ5IGEgc3lzZnMgZXZlbnQuXG5cblNvLCB0aGUgY2F1c2FsIGNoYWluIGlzOiBzeXNmcyBldmVudCAtXHUwMDNlIGBtZW1vcnlfc3Vic3lzX29ubGluZWAgLVx1MDAzZSBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAuIEdpdmVuIHRoYXQsIG15IGZvY3VzIG5vdyBuZWVkcyB0byBiZSBvbiBgbWVtb3J5X3N1YnN5c19vbmxpbmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXQncyBkb2luZywgKndoeSogaXQncyBkb2luZyBpdCwgYW5kICpob3cqIHRoYXQgcmVsYXRlcyB0byB0aGUgc3lzZnMgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJcyB0aGlzIGEgaG90cGx1ZyBzY2VuYXJpbz8gRHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbj8gV2hhdCdzIHRoZSBjb250ZXh0PyBMZXQncyBkaXZlIGludG8gdGhlIGBtZW1vcnlfc3Vic3lzX29ubGluZWAgY29kZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgb25saW5lIHByb2NlZHVyZSB0byBiZSBhYmxlIHRvIHByZWRpY3Qgd2hhdCBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAgd2lsbCBldmVudHVhbGx5IGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6NTQuMTY5NTQ4NjE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzU4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9zdWJzeXNfb25saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NTM9RVhQT1JUX1NZTUJPTChzZWN0aW9uc19wZXJfYmxvY2spO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01NC1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NTU6c3RhdGljIGludCBtZW1vcnlfc3Vic3lzX29ubGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01Ni1zdGF0aWMgaW50IG1lbW9yeV9zdWJzeXNfb2ZmbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbWVtb3J5X3N1YnN5cyA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MC1cXHQuZGV2X25hbWUgPSBNRU1PUllfQ0xBU1NfTkFNRSxcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NjE6XFx0Lm9ubGluZSA9IG1lbW9yeV9zdWJzeXNfb25saW5lLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02Mi1cXHQub2ZmbGluZSA9IG1lbW9yeV9zdWJzeXNfb2ZmbGluZSxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zNTE9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfY2hhbmdlX3N0YXRlKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zNjgtLyogVGhlIGRldmljZSBsb2NrIHNlcmlhbGl6ZXMgb3BlcmF0aW9ucyBvbiBtZW1vcnlfc3Vic3lzX1tvbmxpbmV8b2ZmbGluZV0gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzY5OnN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vbmxpbmUoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zNzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNjo1NC4yMTQ5MTUyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDI2OTU5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU3lzdGVtIFRyaWdnZXIqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQncyB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcyDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYC4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIHRoZSBtZWNoYW5pc20gYmVpbmcgdXNlZCwgb3IgaWYgaXQncyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHRyaWdnZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHN5c2ZzLCBvciBpZiBpdCdzIGV2ZW4gcGFydCBvZiB0aGUgY3VycmVudCBwcm9ibGVtLiBQZXJoYXBzIHRoZSBxdWVzdGlvbiBpc24ndCB3aGV0aGVyIGl0J3MgcmVsYXRlZCwgYnV0IGhvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjU3LjI1NzYxMjkwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4Njk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdGlvbl90YWludF96b25lX2RldmljZSh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI0LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NzI1OnZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxubW0vbWVtb3J5X2hvdHBsdWcuYy03MjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDY0PWludCBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDczLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTA3NDpcXHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfVU5NT1ZBQkxFLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA3NS1cXHRcXHRcXHQgICAgICAgZmFsc2UpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNDUtXFx0LyogYXNzb2NpYXRlIHBmbiByYW5nZSB3aXRoIHRoZSB6b25lICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMTQ2OlxcdG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoem9uZSwgcGZuLCBucl9wYWdlcywgTlVMTCwgTUlHUkFURV9NT1ZBQkxFLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE0Ny1cXHRcXHRcXHQgICAgICAgdHJ1ZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIxNjY9dm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNzEtXFx0ICogSWYgdGhlIG5vZGUgc3RpbGwgc3BhbnMgcGFnZXMgKGVzcGVjaWFsbHkgWk9ORV9ERVZJQ0UpLCBkb24ndFxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE3MjpcXHQgKiBvZmZsaW5lIGl0LiBBIG5vZGUgc3BhbnMgbWVtb3J5IGFmdGVyIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoKSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNzMtXFx0ICogZS5nLiwgYWZ0ZXIgdGhlIG1lbW9yeSBibG9jayB3YXMgb25saW5lZC5cXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yMjgtXFx0XFx0em9uZSA9IFxcdTAwMjZOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV07XFxubW0vbWVtcmVtYXAuYzoyMjk6XFx0XFx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbm1tL21lbXJlbWFwLmMtMjMwLVxcdFxcdFxcdFxcdFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpLCBwYXJhbXMtXFx1MDAzZWFsdG1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6NTcuMzA0NzAyODMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMTc1NDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBNZW50YWwgV2Fsa3Rocm91Z2ggb2YgTWVtb3J5IEhvdHBsdWcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBtZW1vcnkgaG90cGx1ZyBpbXBsZW1lbnRhdGlvbi4gSSBzZWUgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGJlaW5nIGNhbGxlZCDigJMgdGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBvYnZpb3VzbHkg4oCTIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBtYWluIHBhdGhzIHRvIGl0IGFyZSB0aHJvdWdoIGBvbmxpbmVfcGFnZXNgIGFuZCBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAuIFJpZ2h0LCBtYWtlcyBzZW5zZSBzbyBmYXIuIE5vdywgYG9ubGluZV9wYWdlc2AgaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBgbWVtb3J5X2Jsb2NrX29ubGluZWAuIEFoYSEgVGhhdCB0ZWxscyBtZSBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGJ5IGV4dGVuc2lvbiwgaXRzIGNvdW50ZXJwYXJ0IGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAsIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGRlYWxpbmcgd2l0aCB0aGlzIHdob2xlIGhvdHBsdWcgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4gV2FpdCBhIHNlY29uZCwgZGlkbid0IEkgbm90aWNlIHRoYXQgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWNgPyBUaGF0J3PigKYgaW50ZXJlc3RpbmcuIEl0IGxpbWl0cyBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSwgZm9yIHN1cmUuIFNvLCB0aGVuIHdoYXQgYWJvdXQgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYD8gSSBuZWVkIHRvIGdvIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGVpciByb2xlIGluIHRoaXMuIEknbSBnb2luZyB0byBoYXZlIHRvIHRyYWNlIHRob3NlIGNhbGxzIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjAxLjczNjQ2MDMzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNzgzMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ubGluZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz02MzM9RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19vbmxpbmVfcGFnZSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy02MzQtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo2MzU6c3RhdGljIHZvaWQgb25saW5lX3BhZ2VzX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjM2LXtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9OTM3PXN0YXRpYyBzdHJ1Y3Qgem9uZSAqYXV0b19tb3ZhYmxlX3pvbmVfZm9yX3BmbihpbnQgbmlkLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy05NDEte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6OTQyOlxcdHVuc2lnbmVkIGxvbmcgb25saW5lX3BhZ2VzID0gMCwgbWF4X3BhZ2VzLCBlbmRfcGZuO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtOTQzLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy05NDktXFx0XFx0bWF4X3BhZ2VzID0gZ3JvdXAtXFx1MDAzZXMubWF4X3BhZ2VzO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6OTUwOlxcdFxcdG9ubGluZV9wYWdlcyA9IGdyb3VwLVxcdTAwM2VwcmVzZW50X21vdmFibGVfcGFnZXM7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy05NTEtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk3My1cXHRcXHRcXHRcXHRnb3RvIGtlcm5lbF96b25lO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6OTc0OlxcdFxcdFxcdG9ubGluZV9wYWdlcyArPSBQQUdFU19QRVJfU0VDVElPTjtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk3NS1cXHRcXHR9XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk4Mi1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjk4MzpcXHRucl9wYWdlcyA9IG1heF9wYWdlcyAtIG9ubGluZV9wYWdlcztcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk4NC1cXHRpZiAoIWF1dG9fbW92YWJsZV9jYW5fb25saW5lX21vdmFibGUoTlVNQV9OT19OT0RFLCBncm91cCwgbnJfcGFnZXMpKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDk1PXZvaWQgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTE3LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTExODppbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExOS1cXHRcXHQgICAgICAgc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTgwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MTpcXHRvbmxpbmVfcGFnZXNfcmFuZ2UocGZuLCBucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTgyLVxcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyMi1mYWlsZWRfYWRkaXRpb246XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjIzOlxcdHByX2RlYnVnKFxcXCJvbmxpbmVfcGFnZXMgW21lbSAlIzAxMGxseC0lIzAxMGxseF0gZmFpbGVkXFxcXG5cXFwiLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyNC1cXHRcXHQgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE0NzU9aW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU1My1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NTQ6XFx0LyogZGV2aWNlX29ubGluZSgpIHdpbGwgdGFrZSB0aGUgbG9jayB3aGVuIGNhbGxpbmcgb25saW5lX3BhZ2VzKCkgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NTUtXFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODgzPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTE2LVxcdCAqIENvbnNlcXVlbnRseSwgbWVtb3J5IGJsb2NrcyB3aXRoIGhvbGVzIGNhbiBuZXZlciBnZXQgb25saW5lZFxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTkxNzpcXHQgKiB2aWEgdGhlIGhvdHBsdWcgcGF0aCAtIG9ubGluZV9wYWdlcygpIC0gYXMgaG90cGx1Z2dlZCBtZW1vcnkgaGFzXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTE4LVxcdCAqIG5vIGhvbGVzLiBUaGlzIHdheSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBtZW1vcnkgaG9sZXMsXFxuLS1cXG5tbS9tbV9pbml0LmM9MTUyMz12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbW1faW5pdC5jLTE1NTQtXFx0ICogY2xlYXIgYWxsIHpvbmVzJyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXFxubW0vbW1faW5pdC5jOjE1NTU6XFx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxcbm1tL21tX2luaXQuYy0xNTU2LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzowMS44MzkyNDkyMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODc0OTQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgU3RhdGljIENvbnRlbnQgXHUwMDI2IEV4cG9ydGVkIERhdGEqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBwcmVzZW50YXRpb24gb2Ygb3VyIGRhdGEuIEknbSBmb2N1c2luZyBvbiB0aGUgZXhwb3J0ZWQsIG9yIG5vbi1zdGF0aWMsIGNvbXBvbmVudHMgcmVwcmVzZW50ZWQgYnkgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgcHJvcGVybHkgYWNjb3VudGVkIGZvciwgYW5kIHRoYXQgdGhlIGV4cG9ydCBwcm9jZXNzIGlzIHJvYnVzdC4gU2luY2UgYm90aCBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSBub24tc3RhdGljIGFuZCBwcm9iYWJseSBjb250YWluIHVzZWZ1bCBpbmZvcm1hdGlvbiwgSSBzaG91bGQgY2hlY2sgb24gdGhlIGBvZmZsaW5lX3BhZ2VzYCBjb21wb25lbnQgYXMgd2VsbC4gTGV0J3MgbWFrZSBzdXJlIGl04oCZcyBoYW5kbGVkIGp1c3QgYXMgY2FyZWZ1bGx5IGFzIHRoZSBvbmxpbmUgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjA2LjQwODAwMTQxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDExNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZmbGluZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz01Mjg9dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTY3LSAqIHN1cmUgdGhhdCBwYWdlcyBhcmUgbWFya2VkIHJlc2VydmVkIGFuZCB6b25lcyBhcmUgYWRqdXN0IHByb3Blcmx5IGJ5XFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Njg6ICogY2FsbGluZyBvZmZsaW5lX3BhZ2VzKCkuXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NjktICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4NzE9c3RhdGljIGludCBjb3VudF9zeXN0ZW1fcmFtX3BhZ2VzX2NiKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODgyLSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTg4MzppbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4ODQtXFx0XFx0XFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxcbi0tXFxubW0vbW1faW5pdC5jPTE1MjM9dm9pZCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xNTU0LVxcdCAqIGNsZWFyIGFsbCB6b25lcycgcHJlc2VudF9wYWdlcyBhbmQgbWFuYWdlZF9wYWdlcyBiZWNhdXNlIHRoZXkgd2lsbFxcbm1tL21tX2luaXQuYzoxNTU1OlxcdCAqIGJlIHVwZGF0ZWQgaW4gb25saW5lX3BhZ2VzKCkgYW5kIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tbV9pbml0LmMtMTU1Ni1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MDYuNDU3NDA3MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0OTkxMzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nOlxuXG4qKk15IEZ1enppbmcgVGFyZ2V0IEJyYWluc3Rvcm0qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMgc3lzdGVtLCBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIGxvb2sgbGlrZSBwcmltZSByZWFsIGVzdGF0ZSBmb3IgYXR0YWNrLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIHdoZXJlIGRhdGEgaW50ZXJhY3Rpb24gaXMgbGlrZWx5LiBCZXlvbmQgdGhvc2UsIEknbSBhbHNvIGV5ZWluZyBtZXRob2RzIGxpa2UgYF9fYWRkX3BhZ2VzYCBhbmQgYF9fcmVtb3ZlX3BhZ2VzYC4gVGhvc2UgaW50ZXJuYWwgZnVuY3Rpb25zIGNvdWxkIGJlIHN1c2NlcHRpYmxlIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCBpbnB1dCBzY2VuYXJpb3MuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19hZGRfcGFnZXNgIGZpcnN0OyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjA5LjUwNzMyMzY0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NzMyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hZGRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9Mzc5PUVYUE9SVF9TWU1CT0xfR1BMKHBmbl90b19vbmxpbmVfcGFnZSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0zODAtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzozODE6aW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMzgyLVxcdFxcdHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjA5LjU1NDgwMzU5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTAzMjc2MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqQ2hlY2tpbmcgdGhlIFBhZ2UgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgX19hZGRfcGFnZXNgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgY29uZmlybXMgaXRzIGludGVuZGVkIHVzZSBhbmQgYWNjZXNzaWJpbGl0eS4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb3VudGVycGFydC4gTGV0J3MgbW92ZSBvbiB0byBjaGVja2luZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5IG9mIGBfX3JlbW92ZV9wYWdlc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBjb21wbGV0ZSBhbmQgc3ltbWV0cmljIGluIGl0cyBwYWdlIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzeXN0ZW0gcmVsaWFiaWxpdHkgYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgYF9fcmVtb3ZlX3BhZ2VzYCBpcyBhbHNvIGV4cG9ydGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSdzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1OTcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzoxMi4wNTgwODI2MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzkyNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmVtb3ZlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTUyOD12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NTgtLyoqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1NTk6ICogX19yZW1vdmVfcGFnZXMoKSAtIHJlbW92ZSBzZWN0aW9ucyBvZiBwYWdlc1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTYwLSAqIEBwZm46IHN0YXJ0aW5nIHBhZ2VmcmFtZSAobXVzdCBiZSBhbGlnbmVkIHRvIHN0YXJ0IG9mIGEgc2VjdGlvbilcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTY5LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NTcwOnZvaWQgX19yZW1vdmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NzEtXFx0XFx0ICAgIHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbi0tXFxubW0vbWVtcmVtYXAuYz04Nj1zdGF0aWMgdm9pZCBwYWdldW5tYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IHJhbmdlX2lkKVxcbi0tXFxubW0vbWVtcmVtYXAuYy05OC1cXHRpZiAocGdtYXAtXFx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKSB7XFxubW0vbWVtcmVtYXAuYzo5OTpcXHRcXHRfX3JlbW92ZV9wYWdlcyhQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbm1tL21lbXJlbWFwLmMtMTAwLVxcdFxcdFxcdCAgICAgICBQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSwgTlVMTCwgcGdtYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzoxMi4xMDc0ODA5OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NTIxNTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIGBfX3JlbW92ZV9wYWdlc2AgaXMgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiwgYW5kIGl0J3Mga2V5IGZvciBhIHNwZWNpZmljIHR5cGUgb2YgbWVtb3J5IHJlY2xhbWF0aW9uLiBCdXQgbm93IEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIG9wZXJhdGlvbnPigKYgd2hhdCBhYm91dCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgYW5kIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWA/IFRoZXkncmUgY2xlYXJseSBpbnRlbmRlZCBmb3IgbWFuaXB1bGF0aW5nIHBhZ2UgZnJhbWUgbnVtYmVycyAoUEZOcykgYW5kIHRoZWlyIGFsbG9jYXRpb24gc3RhdHVzIHdpdGhpbiBkaWZmZXJlbnQgbWVtb3J5IHpvbmVzLiBBcmUgdGhvc2UgZXhwb3J0ZWQgYXMgd2VsbD8gSSBjYW4gc2VlIGEgZmV3IHVzZS1jYXNlcyBmb3IgdGhhdCwgYW5kIGl0IHdvdWxkIHJlYWxseSBvcGVuIHVwIHNvbWUgcG9zc2liaWxpdGllcy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnQgdGFibGVzLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIGluIHNvbWUgaGlnaGVyLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGV5IG9ubHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzYWdlIHdpdGhpbiB0aGUga2VybmVsLCBvciBhcmUgdGhleSBwb3RlbnRpYWxseSB1c2VkIGJ5IHNvbWUgZHJpdmVycyB0b28/IEkgd2FudCB0byBkZXRlcm1pbmUgdGhlaXIgYXZhaWxhYmlsaXR5LiBJdCBzZWVtcyB0aGVpciBleHBvc3VyZSBkaWN0YXRlcyBhIGxvdCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjE1Ljg3MjcwNTQwOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0ODQyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wZm5fcmFuZ2VfdG9fem9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz03MTE9c3RhdGljIGlubGluZSB2b2lkIHNlY3Rpb25fdGFpbnRfem9uZV9kZXZpY2UodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTcyNC0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjcyNTp2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA2ND1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA3My1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNzQ6XFx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX1VOTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNzUtXFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTExOD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTQ1LVxcdC8qIGFzc29jaWF0ZSBwZm4gcmFuZ2Ugd2l0aCB0aGUgem9uZSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE0NjpcXHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNDctXFx0XFx0XFx0ICAgICAgIHRydWUpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTY2PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTcxLVxcdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJ3RcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxNzI6XFx0ICogb2ZmbGluZSBpdC4gQSBub2RlIHNwYW5zIG1lbW9yeSBhZnRlciBtb3ZlX3Bmbl9yYW5nZV90b196b25lKCksXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTczLVxcdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjI4LVxcdFxcdHpvbmUgPSBcXHUwMDI2Tk9ERV9EQVRBKG5pZCktXFx1MDAzZW5vZGVfem9uZXNbWk9ORV9ERVZJQ0VdO1xcbm1tL21lbXJlbWFwLmM6MjI5OlxcdFxcdG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoem9uZSwgUEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG5tbS9tZW1yZW1hcC5jLTIzMC1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSwgcGFyYW1zLVxcdTAwM2VhbHRtYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjE1LjkyMjE5ODgxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk1MjM2NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyBQRk4gUmFuZ2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpc24ndCBhIHN5bWJvbCBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIHRoZSBrZXJuZWwgbW9kdWxlLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHNob3dzdG9wcGVyLiBXaGF0IEkgKnJlYWxseSogbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyBtZW1vcnkgcmFuZ2VzIGFyZSBiZWluZyBtYW5hZ2VkIGF0IHRoZSB6b25lIGxldmVsLCB3aGljaCBpcyB3aHkgdGhpcyBjYW1lIHRvIG1pbmQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2h5IEkgd2FudGVkIHRvIHN0dWR5IHRoaXMgZnVuY3Rpb24gY2FsbCwgbm93IHVuYXZhaWxhYmxlIHRvIG1lLlxuXG5TaW5jZSBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgaXMgaW5hY2Nlc3NpYmxlLCBsZXQncyBwaXZvdCBhbmQgbG9vayBhdCBpdHMgcG90ZW50aWFsIGNvdW50ZXJwYXJ0IGZ1bmN0aW9uLiBUaGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGRpZyBpcyBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLiBJdCdzIGxpa2VseSB0aGF0IGEgcGFpcmVkIGZ1bmN0aW9uIGxpa2UgdGhpcyBleGlzdHMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSByZXZlcnNlIG9wZXJhdGlvbiB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dC4gTGV0J3Mgc2VlIGlmIHRoaXMgb25lIGlzIGV4cG9zZWQsIGFuZCB3aGF0IHdlIGNhbiBsZWFybiBhYm91dCBpdHMgaW1wbGVtZW50YXRpb24uIFRoaXMgY291bGQgaWxsdW1pbmF0ZSB0aGUgbGFyZ2VyIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzoxOS40MTc0Mzg0MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTkwMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTUwMD1zdGF0aWMgdm9pZCB1cGRhdGVfcGdkYXRfc3BhbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01MjctXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Mjg6dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTUyOS1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA5NT12b2lkIG1ocF9kZWluaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExMC1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjExMTE6XFx0cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUocGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpLCBwZm4sIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExMTItXFx0a2FzYW5fcmVtb3ZlX3plcm9fc2hhZG93KF9fdmEoUEZOX1BIWVMocGZuKSksIFBGTl9QSFlTKG5yX3BhZ2VzKSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExMTg9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyOC1cXHRcXHRub2RlX25vdGlmeShOT0RFX0NBTkNFTF9BRERJTkdfRklSU1RfTUVNT1JZLCBcXHUwMDI2bm9kZV9hcmcpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIyOTpcXHRyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMzAtXFx0cmV0dXJuIHJldDtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg4Mz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4MC1cXHRtZW1vcnlfbm90aWZ5KE1FTV9PRkZMSU5FLCBcXHUwMDI2bWVtX2FyZyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDgxOlxcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbXJlbWFwLmM9ODY9c3RhdGljIHZvaWQgcGFnZXVubWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCByYW5nZV9pZClcXG4tLVxcbm1tL21lbXJlbWFwLmMtOTUtXFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcXG5tbS9tZW1yZW1hcC5jOjk2OlxcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHBhZ2Vfem9uZShmaXJzdF9wYWdlKSwgUEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG5tbS9tZW1yZW1hcC5jLTk3LVxcdFxcdFxcdFxcdCAgIFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MTkuNDY1NDMzNjYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTg3Mzk4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgdGFyZ2V0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEhvdHBsdWcgT3B0aW1pemF0aW9uIFBvaW50cyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBpbXByb3ZpbmcgbWVtb3J5IGhvdHBsdWcgaGFuZGxpbmcuIEltbWVkaWF0ZWx5LCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgYW5kIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAgYXJlIHN0YW5kaW5nIG91dCBhcyBwcmltZSBjYW5kaWRhdGVzLiBUaGV5J3JlIGNsZWFybHkgYXQgdGhlIGNvcmUgb2YgbWFuaXB1bGF0aW5nIG1lbW9yeSByZWdpb25zLCBhbmQgYW55IGVmZmljaWVuY3kgZ2FpbnMgdGhlcmUgd291bGQgYmUgc2lnbmlmaWNhbnQuIEknbSBhbHNvIGFkZGluZyBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIHRvIHRoZSBtaXgg4oCTIHRoZXNlIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyB0aGUgaG90cGx1ZyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugcm91dGluZXMgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZSBib3R0bGVuZWNrcyBtaWdodCBsaWUuXG5cbk5vdywgYSBrZXkgZmFjdG9yIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLiBJcyBpdCBlbmFibGVkPyBUaGF04oCZcyBteSBzdGFydGluZyBwb2ludC4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIHdpbGwgZGljdGF0ZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCBhbmQgdGhlIHN1YnNlcXVlbnQgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgSSdsbCBuZWVkIHRvIHVzZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBjb250ZXh0IGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBjb3VsZCBiZSBpbXBhY3RpbmcgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjIzLjE4NDE3NTUyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0ODkxMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RQTFVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjIzLjIzMjY2Nzc4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc5MzY5ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBIb3RwbHVnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1PUllfSE9UUExVR2AuIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQgdGhlcmUg4oCTIHNwZWNpZmljYWxseSwgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBzeW1ib2xzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYE1FTU9SWV9IT1RQTFVHYCBjYW4gYmUgc2VsZWN0ZWQuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIE5VTUEsIEFDUEksIG9yIGFueXRoaW5nIHRoYXQgdG91Y2hlcyBvbiBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uIExldCdzIHNlZSB3aGF0IGBtbS9LY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MjcuOTEyMDM5NzIzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcdGJvb2xcXG4gNTIxOlxcdFxcbiA1MjI6XFx0IyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbiA1MjM6XFx0bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbiA1MjQ6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuIDUyNTpcXHRcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbiA1MjY6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbiA1Mjc6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbiA1Mjg6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbiA1Mjk6XFx0XFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG4gNTMwOlxcdFxcbiA1MzE6XFx0aWYgTUVNT1JZX0hPVFBMVUdcXG4gNTMyOlxcdFxcbiA1MzM6XFx0Y2hvaWNlXFxuIDUzNDpcXHRcXHRwcm9tcHQgXFxcIk1lbW9yeSBIb3RwbHVnIERlZmF1bHQgT25saW5lIFR5cGVcXFwiXFxuIDUzNTpcXHRcXHRkZWZhdWx0IE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcXG4gNTM2OlxcdFxcdGhlbHBcXG4gNTM3OlxcdFxcdCAgRGVmYXVsdCBtZW1vcnkgdHlwZSBmb3IgaG90cGx1Z2dlZCBtZW1vcnkuXFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBwb2xpY3kgc2V0dGluZyBmb3IgbWVtb3J5IGhvdHBsdWdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MjcuOTEyMTMyMTIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNDg4NTI3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGFuZCBJbml0aWFsaXphdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYE1FTU9SWV9IT1RQTFVHYCwgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZW5hYmxlIGBTUEFSU0VNRU1fVk1FTU1BUGAgc2luY2UgaXQncyBhIGRlcGVuZGVuY3kuIEFjdHVhbGx5LCBpc24ndCBgU1BBUlNFTUVNX1ZNRU1NQVBgIHVzdWFsbHkgZW5hYmxlZCBhbnl3YXk/IExldCBtZSBkb3VibGUtY2hlY2suXG5cblJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBpbiBgbW0vbW1faW5pdC5jYC4gQWgsIEkgc2VlIGB1bmF2YWlsYWJsZV9wZm5faXNfb25saW5lYCBpcyB1c2VkIGluIGBpbml0X3VuYXZhaWxhYmxlX3JhbmdlYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGZyb20gYGZyZWVfYXJlYV9pbml0X25vZGVgIGR1cmluZyBib290LiBPa2F5LCBzbyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBleGVjdXRlZCBkdXJpbmcgYm9vdCBpZiB0aGVyZSBhcmUgdW5hdmFpbGFibGUgbWVtb3J5IHJhbmdlcywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtub3cuXG5cblRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IG1lbW9yeSBob3RwbHVnIHdvcmtzLCBhbG9uZ3NpZGUgaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZC4gUmVwbGFjaW5nIHRoZSBvbGQgYHNldF96b25lX2NvbnRpZ3VvdXNgIGNhbGwgd2l0aCBhIHNpbXBsZXIgY2hlY2sgdXNpbmcgYHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9PSB6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgdG8gZGV0ZXJtaW5lIG1lbW9yeSBzdGF0ZSBpcyBkZWZpbml0ZWx5IGFuIGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgYSBmdXp6ZXIgYXQuXG5cbkxldCdzIGxpc3QgdGhlIGtleSBzeW1ib2xzIG9mIGludGVyZXN0LiBJJ20gZm9jdXNpbmcgb246IGBvbmxpbmVfcGFnZXNgLCBgb2ZmbGluZV9wYWdlc2AsIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCwgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYCwgYF9fYWRkX3BhZ2VzYCwgYW5kIGBfX3JlbW92ZV9wYWdlc2AuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIGBvbmxpbmVfcGFnZXNgIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIGV4cG9ydGVkLiBJcyBgb25saW5lX3BhZ2VzYCBleHBvcnRlZD8gTm8sIGJ1dCBJIGtub3cgYGdlbmVyaWNfb25saW5lX3BhZ2VgIGlzIGV4cG9ydGVkLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODU5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MzQuOTYwOTg3MTI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk0MDcxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb25saW5lX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MzUuMDEwOTMyNjczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzg5NjE3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29yZSBwcm9ibGVtLCBJJ20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudCB0byBzdXJ2ZXkgdGhlIHJlbGV2YW50IGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgb2ZmbGluZV9wYWdlc2AuIEdpdmVuIHRoZSBjb250ZXh0IOKAkyB3aGF0ZXZlciB0aGUgdXNlcidzIGlzc3VlIG1pZ2h0IGJlIOKAkyB0aGlzIGlzIGEgbG9naWNhbCBmaXJzdCBzdGVwLiBPZmZsaW5lIGZ1bmN0aW9uYWxpdHkgaXMgYSBjb21tb24gc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBwZXJzaXN0ZW5jZSwgY2FjaGluZywgb3IgaW50ZXJhY3Rpb25zIHRoYXQgKnNob3VsZCogYmUgYXZhaWxhYmxlIHdoZW4gZGlzY29ubmVjdGVkLiBJdCdzIGEgZm91bmRhdGlvbmFsIG1vZHVsZSBhbmQgdXN1YWxseSByZXZlYWxzIGZvdW5kYXRpb25hbCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3Igd2hlbiBvZmZsaW5lLiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgbWVjaGFuaWNzIG9mIHByb3ZpZGluZywgc3luY2luZywgc3RvcmluZyBhbmQgcmVtb3Zpbmcgb2ZmbGluZSBjb250ZW50LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgYW5kIGFzc3VtcHRpb25zIGFyZSBpbXBsZW1lbnRlZCB0aGVyZSwgc28sIGJlZm9yZSBldmVuIGNvbnNpZGVyaW5nIHRoZSBwcm9ibGVtLCB1bmRlcnN0YW5kaW5nIHRoaXMgaXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MzguNTQ5ODk3MDIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4NTcxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb2ZmbGluZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjM4LjU5OTE5MDU4N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDcxNjYxODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipJbnRlcm5hbCBBdWRpdCBcdTAwMjYgQ29kZSBSZXZpZXcqKlxuXG5SaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoZXkncmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5LCBub3QgZm9yIGRpcmVjdCBleHRlcm5hbCBpbnRlcmFjdGlvbi4gQnV0LCB0aGUgZmFjdCB0aGF0IHRoZXkncmUgZ2xvYmFsIGZ1bmN0aW9ucyByYWlzZXMgYSBmbGFnLiBFdmVuIHdpdGhvdXQgZXhwbGljaXQgZXhwb3J0aW5nLCB0aGVpciBnbG9iYWwgc2NvcGUgbWVhbnMgdGhleSdyZSBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGZyb20gYW55d2hlcmUgd2l0aGluIHRoZSBwcm9ncmFtJ3MgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgYmVoYXZpb3IgYW5kIGltcGFjdCwgc28gbGV0J3MgZGlnIGludG8gdGhvc2UgZnVuY3Rpb24gbmFtZXMg4oCTIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZXkncmUgKmFjdHVhbGx5KiB1c2VkLCBhbmQgaW4gd2hhdCB3YXlzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHVuc2FmZSBtZW1vcnkgbWFuaXB1bGF0aW9uLCB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cywgb3IgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGFjY2VzcyBvciBtb2RpZmljYXRpb24gb2YgZGF0YS4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NDUuMDcwODU0ODM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ4MDI5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX19hZGRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzo0NS4xMjMzNDM4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEwOTA3MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSBrZXJuZWwgY29kZTpcblxuKipDaGVja2luZyBUaGF0IFBhZ2UgQWRkaXRpb24qKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgc3dlYXIgSSBzYXcgdGhhdCBgRVhQT1JUX1NZTUJPTF9HUEwocGZuX3RvX29ubGluZV9wYWdlKWAgZGVjbGFyYXRpb24gKmJlZm9yZSogdGhhdCBgX19hZGRfcGFnZXNgIGZ1bmN0aW9uIGNhbGwuIFNvbWV0aGluZyBmZWVscyBvZmYgYWJvdXQgdGhlIG9yZGVyLCBvciBwZXJoYXBzIHRoZSBpbnRlbmRlZCB1c2UuIExldCBtZSBqdXN0IHF1aWNrbHkgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZS1leGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19hZGRfcGFnZXNgLiBJIG5lZWQgdG8gZW5zdXJlIEknbSB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWdlIGFsbG9jYXRpb24gYW5kIHN5bWJvbCBleHBvcnRzIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3IgdXNhZ2UgcGF0dGVybi4gSXQncyB0aGF0IG5hZ2dpbmcgZmVlbGluZy4uLiBnb3R0YSBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIHdheSB0aGVzZSBwYWdlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLiBJdCBjb3VsZCBiZSBpbXBvcnRhbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTAxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NDguNTM0MjUzOTc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE4Njc4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWRkX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NDguNTgyNDQ5ODEyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODkwNzQ0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdW5jdGlvbiBBdmFpbGFiaWxpdHkqKlxuXG5BaCwgdGhlIGZ1bmN0aW9uIGBhZGRfcGFnZXNgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGlzIGlzIGdvb2QsIGdvb2QhIEl0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBtZSB0byBkaXJlY3RseSBjYWxsIGFuZCB1c2Ugd2l0aGluIG15IG93biBjb2RlIG9yIGluIG90aGVyIG1vZHVsZXMuIFRoaXMgb3BlbnMgdXAgYSBsb3Qgb2YgcG9zc2liaWxpdGllcyBmb3IgbW9kdWxhcml0eSBhbmQgaW50ZWdyYXRpb24uIEkgY2FuIG5vdyBzdGFydCB0byB0aGluayBhYm91dCBob3cgSSBjYW4gbGV2ZXJhZ2UgdGhpcyBmdW5jdGlvbiBpbiBteSBjdXJyZW50IHByb2plY3QsIHBlcmhhcHMgdG8gYXV0b21hdGUgYSByZXBldGl0aXZlIHRhc2ssIGVuaGFuY2UgYW4gZXhpc3RpbmcgcHJvY2Vzcywgb3IgZXZlbiBidWlsZCBhIHNtYWxsIHV0aWxpdHkgYXJvdW5kIGl0LiBUaGUgaW1wbGljYXRpb25zIGZvciB3b3JrZmxvdyBvcHRpbWl6YXRpb24gYXJlIGNlcnRhaW5seSB0aGVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiB0byBjb25maXJtIHBhcmFtZXRlcnMgYW5kIHJldHVybiB2YWx1ZSBidXQgdGhpcyBmaXJzdCBvYnNlcnZhdGlvbiBpcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NTIuODcxNTI2NzgyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ4MDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTM3OT1FWFBPUlRfU1lNQk9MX0dQTChwZm5fdG9fb25saW5lX3BhZ2UpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMzgwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MzgxOmludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTM4Mi1cXHRcXHRzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzo1Mi45MjcwMTg0NTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NjQxNDI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTW9kdWxlJ3MgUGFnZSBBZGRpdGlvbiBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgaW50ZXJuYWwgYF9fYWRkX3BhZ2VzYCBtZXRob2Qgd2FzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIHBhZ2UgYWRkaXRpb24gbG9naWMgd2l0aGluIHRoaXMgbW9kdWxlLiBCdXQsIHdhaXQuLi4gSSBqdXN0IHJlYWxpemVkIEkgY2FuJ3QgZGlyZWN0bHkgYWNjZXNzIGl0LiBUaGF0J3Mgb2RkLiBJdCdzIG5vdCBleHBvcnRlZC4gQ291bGQgdGhlIHB1YmxpYy1mYWNpbmcgZnVuY3Rpb24gYmUgYGFkZF9wYWdlc2AgdGhlbj8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmICp0aGF0KiBvbmUgaXMgZXhwb3J0ZWQsIGFuZCBpZiBzbywgdW5kZXJzdGFuZCBob3cgdGhlIHB1YmxpYyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggYW55IGludGVybmFsIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIHdoaWNoIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGV4cG9zZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjY5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NTYuMTkzNDM0Nzk0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk1MDkwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWRkX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjU2LjIzODM5MzA4OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMyNTg1MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBIFF1aWNrIEpvbHQgb2YgUmVhbGl6YXRpb24qKlxuXG5XYWl0IGEgc2Vjb25kLi4uIGBhZGRfbWVtb3J5YCBpcyAqZXhwb3J0ZWQqPyBUaGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nIGF0IGFsbC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGlzIHdhcyBnb2luZyB0byBiZSBhbiBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uLCBwZXJoYXBzIHBhcnQgb2YgYSBwcml2YXRlIEFQSSB3aXRoaW4gdGhlIG1vZHVsZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9ucyB3ZXJlIGNsZWFybHkgb2ZmLWJhc2UuIFRoYXQgZXhwb3J0IHN0YXR1cyBkcmFtYXRpY2FsbHkgc2hpZnRzIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBjb21wb25lbnQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmVjb25zaWRlciBteSBwcmV2aW91cyB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZSwgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGFueSBwdWJsaWMgZmFjaW5nIGd1YXJhbnRlZXMgdGhhdCBtaWdodCBjb21lIHdpdGggaXRzIGV4dGVybmFsIGFjY2Vzc2liaWxpdHkuIFRoaXMgd2FycmFudHMgYSBtb3JlIGluLWRlcHRoIGxvb2sgYXQgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gYW5kIGV4dGVybmFsIEFQSSBjb250cmFjdHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjAwLjE3MDk4MDQyOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwOTA0NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWRkX21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9MTU5OD1pbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MDctfVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTYwODpFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MDktXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE2MzE9aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1Ny19XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjU4OkVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MDAuMjE5MDc1NDQzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODAyMzU1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYWRkX21lbW9yeWAgKmlzKiBleHBvcnRlZCwgYnV0IHRoYXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBXZSBjYW4gcmVhY2ggbm9uLWV4cG9ydGVkIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNjYWxscyBvciBzeXNmcywgd2hpY2ggaXMgZ3JlYXQuIEkgd2FzIHRoaW5raW5nIHRoYXQgc3l6a2FsbGVyIGNvdWxkIGRlZmluaXRlbHkgZnV6eiBgb25saW5lX3BhZ2VzYCB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgdG8gcmVhbGx5IGhvbmUgaW4gb24gc3BlY2lmaWMgYXJlYXMsIGxldCdzIGxvb2sgYXQgbW9yZSBzcGVjaWZpYyBvcHRpb25zIHRvIGZvY3VzIG9uOiBgb25saW5lX3BhZ2VzYCwgYG9mZmxpbmVfcGFnZXNgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGFuZCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBgb25saW5lX3BhZ2VzYCBpcyBhIHZpYWJsZSBmb2N1cyBzeW1ib2wsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGlzbid0IHN0YXRpYy4gQWxyaWdodCwgbGV0J3Mga2VlcCBnb2luZyBhbmQgY2hlY2sgdGhlIG90aGVycy4gYG9mZmxpbmVfcGFnZXNgIGFsc28gaXNuJ3Qgc3RhdGljLiBIb3cgYWJvdXQgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgPyBOb3BlLCBub3Qgc3RhdGljLiBBbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYD8gTm8sIHN0aWxsIG5vdCBzdGF0aWMuXG5cbk5vdywgb24gdGhlIG90aGVyIGhhbmQsIGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgc3RhdGljLiBTbyB3ZSdyZSBub3QgZ29pbmcgdG8gYmUgdXNpbmcgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLCBzaW5jZSB0aGV5IHdvdWxkbid0IGJlIGFjY2Vzc2libGUgdG8gc3l6a2FsbGVyIGRpcmVjdGx5LlxuXG5MZXQncyBwaXZvdCBhbmQgY2hlY2sgYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgIGFuZCBgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MDYuMDk5MzE0Njc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg3NTM0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz0xMDQyPXZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjMtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMDY0OmludCBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA2NS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgem9uZSAqem9uZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MDYuMTQ2MTk2MDk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTg4NDI3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKk15IEZsdWlkIEZyYW1ld29yazogQ29uc3RhbnQgRXZvbHV0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nLi4uIHRoaXMgaXNuJ3QgYSBzaW1wbGUsIHN0YXRpYyBzaXR1YXRpb24uIEV2ZXJ5dGhpbmcgSSBkZWFsIHdpdGggaW4gdGhpcyBhcmVhIGlzIGR5bmFtaWMsIGNvbnN0YW50bHkgc2hpZnRpbmcuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMuIFRoZSB1bmRlcmx5aW5nIHByaW5jaXBsZXMgbWlnaHQgcmVtYWluLCBidXQgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgc3BlY2lmaWNzIGFyZSBhbHdheXMgZXZvbHZpbmcsIGFuZCBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gYWRhcHQgbXkgbWVudGFsIG1vZGVsIGFuZCBteSBhcHByb2FjaC5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIHBhcnRpY3VsYXIgYXNwZWN0LiBMZXQncyBzZWUuLi4gKnNocmlua1xcX3pvbmVcXF9zcGFuKi4gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgYXQgcGxheSBoZXJlLCBhbmQgaXRzIHN0YXRlIGlzIGxpa2VseSBjcml0aWNhbC4gSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgaG93IHRoYXQncyBiZWhhdmluZy4gTGV0IG1lIGZvY3VzIG9uIHRoYXQgYW5kIHNlZSB3aGF0IHRoYXQncyB0ZWxsaW5nIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjA5LjYwNTA0MTY1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwMzE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfem9uZV9zcGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz00NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy00NjAtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo0NjE6c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxubW0vbWVtb3J5X2hvdHBsdWcuYy00NjItXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUyOD12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NTMtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1NTQ6XFx0c2hyaW5rX3pvbmVfc3Bhbih6b25lLCBzdGFydF9wZm4sIHN0YXJ0X3BmbiArIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU1NS1cXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjA5LjY0ODk0NzU2M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxMjk2NDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIHRoaXMgZmVlbHMgcHJldHR5IHN0YXRpYywgbm90IGEgbG90IG9mIGR5bmFtaWMgaW50ZXJwbGF5IGhhcHBlbmluZywgd2hpY2ggaXMgaGVscGZ1bCBmb3IgZm9jdXNlZCBhbmFseXNpcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIG9uZXMgdGhhdCBqdW1wIG91dCBhcyBjcml0aWNhbCBhcmU6IGBvbmxpbmVfcGFnZXNgLCBgb2ZmbGluZV9wYWdlc2AsIHRoZSB6b25lIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGFuZCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBhbmQgdGhlIHBhZ2UgYWRkaXRpb24vcmVtb3ZhbCBwcmltaXRpdmVzIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBjb3JlIG9wZXJhdGlvbnMgaW4gcGxheSBoZXJlLlxuXG5Ob3csIEkgYWxzbyBzZWUgdGhpcyBgTUVNT1JZX0hPVFBMVUdgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZmxvYXRpbmcgYXJvdW5kLiBIbW0sIHRoYXQncyBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIExldCBtZSBxdWlja2x5IHZlcmlmeSBteSBhc3N1bXB0aW9ucyDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFllcywgYG1tL21lbW9yeV9ob3RwbHVnLmNgIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBzZXQuIFNvLCB0aGlzIGNvZGUgYmxvY2sgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBob3RwbHVnZ2luZywgYXMgZXhwZWN0ZWQuIEdvb2QsIGNvbmZpcm1hdGlvbiBpcyBrZXkuIFRoaXMgZ2l2ZXMgbWUgYSBmcmFtZXdvcmsgZm9yIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkIG9uLXRoZS1mbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjE0LjYwMDI0NzI1OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTEwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2hvdHBsdWcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NjI9cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSArPSBzaHVmZmxlLm9cXG4tLVxcbm1tL01ha2VmaWxlLTY0LSMgR2l2ZSAnbWVtb3J5X2hvdHBsdWcnIGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcXG5tbS9NYWtlZmlsZTo2NTptZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcub1xcbm1tL01ha2VmaWxlLTY2LVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTI9c3RhdGljIGludCBnZXRfb25saW5lX3BvbGljeShjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTctLypcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1ODogKiBtZW1vcnlfaG90cGx1Zy5vbmxpbmVfcG9saWN5OiBjb25maWd1cmUgb25saW5lIGJlaGF2aW9yIHdoZW4gb25saW5pbmcgd2l0aG91dFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU5LSAqIHNwZWNpZnlpbmcgYSB6b25lIChNTU9QX09OTElORSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MTQuNjQ3NzYwODEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MzU3NDg0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWFrZWZpbGUgQ29uZnVzaW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCBhbmQgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIGNsaWNraW5nLiBJIHNlZSBgbWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm9gLCB3aGljaCBzZWVtcyBzdGFuZGFyZCBlbm91Z2guIEJ1dCB0aGVuLCAqcmlnaHQgYWZ0ZXIgdGhhdCosIEknbSBzZWVpbmcgYG9iai15ICs9IG1lbW9yeS1ob3RwbHVnLm9gLiBUaGF0J3MuLi4gcmVkdW5kYW50LCByaWdodD8gU3VyZWx5LCB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCBzaG91bGQgaGFuZGxlIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGJvdGggYXJlIHByZXNlbnQuIElzIHRoZXJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggYENPTkZJR19NRU1PUllfSE9UUExVR2AgdGhhdCBJJ20gbWlzc2luZz8gT3IgaXMgdGhpcyBhIGxlZ2FjeSB0aGluZywgbWF5YmUgc29tZSBvcHRpbWl6YXRpb24gb3IgYSBzcGVjaWZpYyBidWlsZCBzY2VuYXJpbyBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nPyBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIGBtbS9NYWtlZmlsZWAgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTIyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MjIuMjgzNTEyNzI2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUyNTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnktaG90cGx1Z1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT02Mj1wYWdlLWFsbG9jLSQoQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IpICs9IHNodWZmbGUub1xcbi0tXFxubW0vTWFrZWZpbGUtNjQtIyBHaXZlICdtZW1vcnlfaG90cGx1ZycgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxcbm1tL01ha2VmaWxlOjY1Om1lbW9yeS1ob3RwbHVnLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnlfaG90cGx1Zy5vXFxubW0vTWFrZWZpbGUtNjYtXFxuLS1cXG5tbS9NYWtlZmlsZT03MD1vYmoteSArPSBtZW1ibG9jay5vXFxubW0vTWFrZWZpbGU6NzE6b2JqLXkgKz0gJChtZW1vcnktaG90cGx1Zy15KVxcbm1tL01ha2VmaWxlLTcyLW9iai15ICs9IHNsdWIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODoyMi4zMjgwNDExMzlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NDQ4NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCdzIHdoYXQgSSdtIGdvaW5nIHdpdGguIERvdWJsZS1jaGVja2luZyBpc24ndCBhIGJhZCBpZGVhLCB0aG91Z2guIEhtbSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZmFjdG9yIGluIGhlcmU/IEFoIHllcywgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhhdCdzIGEgZGVwZW5kZW5jeSBvZiBgTUVNT1JZX0hPVFBMVUdgLCBpc24ndCBpdD8gTGV0IG1lIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhY2sgdG8gYG1tL0tjb25maWdgIGZvciBhbm90aGVyIHF1aWNrIHNjYW4sIGp1c3QgdG8gYmUgdGhvcm91Z2guIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MjYuNjEyNTI3NjI5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY4MTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjI2LjY1NzIxMTU3M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODkyMzAyNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFNQQVJTRU1FTV9WTUVNTUFQIGFuZCBNZW1vcnkgSG90cGx1ZyoqXG5cbk9rYXksIGxldCdzIHNlZSBhYm91dCB0aGlzIGBTUEFSU0VNRU1fVk1FTU1BUGAgb3B0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCwgZ2l2ZW4gdGhhdCBgTUVNT1JZX0hPVFBMVUdgIGRlcGVuZHMgb24gaXQuIFRoZSBLYnVpbGQgc3lzdGVtIHNob3VsZCB0aGVvcmV0aWNhbGx5IGhhbmRsZSB0aGlzIGRlcGVuZGVuY3kgY29ycmVjdGx5OyBpZiBJIGVuYWJsZSBgTUVNT1JZX0hPVFBMVUdgLCBLYnVpbGQgKnNob3VsZCogYWxzbyBlbnN1cmUgYFNQQVJTRU1FTV9WTUVNTUFQYCBpcyBlbmFibGVkLiBCdXQsIGFzIGFuIGV4cGVydCwgSSBrbm93IHRoYXQgc2FmZSBpcyBiZXR0ZXIgdGhhbiBzb3JyeS4gSSBzaG91bGQgcHJvYmFibHkgZXhwbGljaXRseSBzcGVjaWZ5IGBTUEFSU0VNRU1fVk1FTU1BUGAgYWxvbmdzaWRlIGBNRU1PUllfSE9UUExVR2AganVzdCB0byBiZSBjZXJ0YWluLiBIYW5nIG9uLi4uIGlzbid0IGBTUEFSU0VNRU1fVk1FTU1BUGAgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQgYXJjaGl0ZWN0dXJlcz8gVGhhdCByaW5ncyBhIGJlbGwuIE9rYXksIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9LY29uZmlnYCBmaWxlIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBCZXR0ZXIgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbiB0aGFuIHRvIHByb2NlZWQgYmFzZWQgb24gYSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgcmVjb2xsZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODozNS41NDk1MjA5MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MTA5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODozNS41OTQ5MzUwMzNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMzgxODg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIFZhbGlkaXR5IG9mIGEgQ29uZmlndXJhdGlvbiBTZXR0aW5nKipcblxuUmlnaHQsIGBkZWZfYm9vbCB5YC4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIE5vIG5lZWQgZm9yIGZ1cnRoZXIgcGFyc2luZyBvciBkZWVwZXIgYW5hbHlzaXMgaGVyZTsgYSBgZGVmX2Jvb2xgIHdpdGggYSB2YWx1ZSBvZiAneScgaW5kaWNhdGVzIHRoYXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbml0ZWx5ICplbmFibGVkKi4gVGhhdCdzIHRoZSBleHBlY3RlZCBhbmQgZGVzaXJlZCBzdGF0ZS4gSXQncyBhIGNsZWFuIGFuZCBjbGVhciBhZmZpcm1hdGlvbiBvZiBpdHMgc3RhdHVzLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgYW5vdGhlciByZWxhdGVkIHZhcmlhYmxlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkIHVuZXhwZWN0ZWRseSwgb3IgaW50cm9kdWNlZCBhIGNvbmZsaWN0LiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdgLiBJIGp1c3Qgd2FudCB0byBlbnN1cmUgdGhhdCBtZW1vcnkgaG90cGx1ZyBpcyBlbmFibGVkIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODozOC43MTg3NTY1ODhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njg0NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTE2PWNvbmZpZyBIQVZFX0JPT1RNRU1fSU5GT19OT0RFXFxuLS1cXG5tbS9LY29uZmlnLTUxOC1cXG5tbS9LY29uZmlnOjUxOTpjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyMC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjM4Ljc2MzQ0MzYzMloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE2NzE3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZHJpdmVuIGJ5IGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgd2hpY2ggbWVhbnMgYE1FTU9SWV9IT1RQTFVHYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gd2F0Y2guIExldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIG5ldyBmaWVsZCwgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIHRvIHRoZSBgc3RydWN0IHpvbmVgLiBUaGUgcG9pbnQgaXMgdG8gbWFrZSB0aGUgYHpvbmVfaXNfY29udGlndW91cygpYCBjaGVjayBtdWNoIGZhc3RlciDigJMgTygxKSBub3cgYnkgY29tcGFyaW5nIGBzcGFubmVkX3BhZ2VzYCBhbmQgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIGluc3RlYWQgb2YgdGhlIG9sZCBPKE4pIGBzZXRfem9uZV9jb250aWd1b3VzKClgIHdoaWNoIHdhcyBpdGVyYXRpbmcgb3ZlciBwYWdlYmxvY2tzLiBBIHByZXR0eSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSB3aW4sIGlmIGl0IHdvcmtzIGFzIGFkdmVydGlzZWQuXG5cbkVzc2VudGlhbGx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IG1lbW9yeSBob3RwbHVnIHdvcmtzLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIHNpbmNlIHRoZSByZWFjaCBpcyBzbyBicm9hZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzLiBXZSd2ZSBnb3Q6XG5cbiogICBgb25saW5lX3BhZ2VzYFxuKiAgIGBvZmZsaW5lX3BhZ2VzYFxuKiAgIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYFxuKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWBcbiogICBgX19hZGRfcGFnZXNgXG4qICAgYF9fcmVtb3ZlX3BhZ2VzYFxuXG5DaGVja2luZyB0aGVtLCBpdCdzIGFsbCBnb29kLiBgb25saW5lX3BhZ2VzYCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBvbmxpbmluZywgYG9mZmxpbmVfcGFnZXNgIGR1cmluZyBvZmZsaW5pbmcuIFRoZSBvdGhlciBmb3VyIGNvdmVyIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyBpbiBoZXJlPyBMZXQncyBxdWlja2x5IGNoZWNrIG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBMb29rcyBsaWtlIGBpbml0X3VuYXZhaWxhYmxlX3JhbmdlYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgIGFyZSBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIGF0IGJvb3QsIHNvIHdlIGNhbiBpZ25vcmUgdGhlbS4gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGlzIG5vdCBzdGF0aWMsIHNvIGxldCdzIGludmVzdGlnYXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo0Ny4wODAxNjMwMzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTEwMjI9c3RydWN0IHpvbmUgKnpvbmVfZm9yX3Bmbl9yYW5nZShlbnVtIG1tb3Agb25saW5lX3R5cGUsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMDQyOnZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDQzLVxcdFxcdFxcdCAgICAgICBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExODEtXFx0b25saW5lX3BhZ2VzX3JhbmdlKHBmbiwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MjpcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHBmbiksIGdyb3VwLCBucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTgzLVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODgzPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDQzLVxcdGFkanVzdF9tYW5hZ2VkX3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgLW1hbmFnZWRfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA0NDpcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIGdyb3VwLCAtbnJfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6NDcuMTI0NjExNDA1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTAyMTI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBjYWxscywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgT3JpZ2lucyBvZiBUaGlzIEZ1bmN0aW9uJ3MgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgdmVyc2F0aWxlLCBiZWluZyB1dGlsaXplZCBpbiBhIGZldyBrZXkgYXJlYXMgb2YgdGhlIHN5c3RlbS4gSSBzZWUgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSBib3RoIHRoZSBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIHN1YnN5c3RlbXMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSByb2xlIGluIHBhZ2UgbWFuYWdlbWVudCwgcGVyaGFwcyBpbiB0cmFuc2l0aW9uaW5nIHBhZ2VzIGJldHdlZW4gb25saW5lIGFuZCBvZmZsaW5lIHN0YXRlcywgb3Igc29tZSBraW5kIG9mIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2VzcyByZWxhdGVkIHRvIHRoZXNlIHR3byBwYWdlIGxpc3RzLiBUaGUgZmFjdCB0aGF0IGl0J3MgaGFuZGxpbmcgYm90aCBvbmxpbmUgYW5kIG9mZmxpbmUgcGFnZXMgaW5kaWNhdGVzIGl0J3MgY2VudHJhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuXG5cbk5vdywgdGhlIHBsb3QgdGhpY2tlbnMgYSBiaXQuIEkgYWxzbyBzZWUgYSBjYWxsIGZyb20gd2l0aGluIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgZnJvbSBhIGZ1bmN0aW9uIG5hbWVkIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuIFRoaXMgaXMgcG90ZW50aWFsbHkgY3J1Y2lhbC4gXCJkcml2ZXJzXCIgaW1wbGllcyB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4gYG1lbW9yeV9ibG9ja19vZmZsaW5lYC4uLiBva2F5LCB0aGF0IGFsbW9zdCBjZXJ0YWlubHkgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCB3aGVuIGEgbWVtb3J5IGJsb2NrIGlzIGJlaW5nIHRha2VuIG9mZmxpbmUuIFRoYXQncyBhIHZlcnkgc3BlY2lmaWMgY29udGV4dCwgbGlrZWx5IHJlbGF0ZWQgdG8gTlVNQSBub2RlIG1hbmFnZW1lbnQsIG1lbW9yeSBob3RwbHVnZ2luZywgb3IgcGVyaGFwcyBldmVuIGhhbmRsaW5nIG1lbW9yeSBmYWlsdXJlcy4gSXQncyB3b3JraW5nIGF0IGEgbG93ZXIgbGV2ZWwgbm93LCBtYW5hZ2luZyBwYWdlcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHVuaXQgb2YgbWVtb3J5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lICpob3cqIGl0J3MgaW52b2x2ZWQsIGJ1dCB0aGF0IGFsb25lIHN1Z2dlc3RzIGl0J3MgbW9yZSB0aGFuIGp1c3QgYSBzaW1wbGUgcGFnZSBtYW5pcHVsYXRvciwgYnV0IGNyaXRpY2FsIHRvIHRoZSBtZW1vcnkgc3RhdGUsIGFuZCBob3cgdGhlIE9TIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo1MS45MzQ4NDEzODhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTgzMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNjgtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI2OTpcXHRcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS1cXHUwMDNlZ3JvdXAsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgIG5yX3ZtZW1tYXBfcGFnZXMpO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTI4Mj1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDEtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcXHRcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS1cXHUwMDNlZ3JvdXAsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMy1cXHRcXHRcXHRcXHRcXHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDktXFx0XFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMxMDpcXHRcXHRcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMxMS1cXHRcXHRcXHRcXHRcXHRcXHQgIG1lbS1cXHUwMDNlZ3JvdXAsIG5yX3ZtZW1tYXBfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo1MS45Nzk0MjgxNDJaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5NDc2MTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFRhcmdldHMqKlxuXG5SaWdodCwgc28gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGxvb2tzIGxpa2UgYW5vdGhlciBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGxpa2VseSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIFRoZSBtZW1vcnkgbWFwcGluZyBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHNwZWNpZmljYWxseSBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAgYW5kIGBtaHBfZGVpbml0X21lbW1hcF9vbl9tZW1vcnlgLCBhcmUgYWxzbyBjcnVjaWFsIGZ1bmN0aW9ucyB0byBleGFtaW5lIGluIHRoaXMgY29udGV4dC4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGNvbnRhaW4ga2V5IGxvZ2ljIHJlbGF0ZWQgdG8gbWFuYWdpbmcgYW5kIG1hbmlwdWxhdGluZyB0aGUgbWVtb3J5IG1hcC4gVGhleSBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgYXMgcG90ZW50aWFsIGZvY2FsIHBvaW50cyBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2OTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo1NC44NzQxOTE5MjhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjgxNTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTAtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjUxOlxcdFxcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjUyLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU0LjkxODQ3NjM2MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIxMTkzNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZsZWN0aW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gb2JzZXJ2aW5nIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHRoZSBvbmxpbmUgYW5kIG9mZmxpbmUgcHJvY2VkdXJlcy4gVGhlIGtleSBmdW5jdGlvbnMsIG9yIHJhdGhlciwgdGhlIHN5bWJvbHMgdGhhdCBkZWZpbmUgdGhlaXIgY29yZSBvcGVyYXRpb25zLCBzZWVtIHRvIGJlOiBgb25saW5lX3BhZ2VzYCwgYG9mZmxpbmVfcGFnZXNgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAsIGBfX2FkZF9wYWdlc2AsIGBfX3JlbW92ZV9wYWdlc2AsIGFuZCBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAuXG5cblRoZXNlIHN5bWJvbHMgcG9pbnQgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBtb3ZlbWVudCBvZiBwaHlzaWNhbCBwYWdlIGZyYW1lcyAoUEZOcykgYmV0d2VlbiB6b25lcywgYW5kIHRoZSBhY2NvdW50aW5nIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBOb3cgdGhhdCBJIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnZvbHZlZCBmdW5jdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBjb250ZXh0LCBJJ20gcmVhZHkgdG8gYXNzaWduIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDQ5LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU5LjUzOTY3MjE1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyODg5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib25saW5lX3BhZ2VzXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwiX19hZGRfcGFnZXNcIixcbiAgICBcIl9fcmVtb3ZlX3BhZ2VzXCIsXG4gICAgXCJhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBjb250aWd1b3VzIHpvbmVzIGFyZSB0cmFja2VkLCByZXBsYWNpbmcgYW4gTyhOKSBwYWdlYmxvY2sgaXRlcmF0aW9uIHdpdGggYW4gTygxKSBjaGVjayB1c2luZyBhIG5ldyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCBjb3VudGVyIGluIGBzdHJ1Y3Qgem9uZWAuIFRoaXMgY291bnRlciBpcyB1cGRhdGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvbmxpbmVfcGFnZXNcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIixcbiAgICBcIm1vdmVfcGZuX3JhbmdlX3RvX3pvbmVcIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJfX2FkZF9wYWdlc1wiLFxuICAgIFwiX19yZW1vdmVfcGFnZXNcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6NTkuNjE3OTY2Nzk2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5MDY3NjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU5LjYxODQxOTE0NloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDQ5MDIxOTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5pbmRleCBiNzYxODM1NDVlNWJmLi5jZWVhNmM4YjI3Y2MxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbkBAIC00ODMsNiArNDgzLDEyIEBAIEdlbmVyYWxcbiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXRcbiAgIGlzIGluaXRpYWxpemVkIGJ5IGBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcygpYGAuXG4gXG4rYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYFxuKyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmRcbisgIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZFxuKyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yXG4rICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuXG4rXG4gYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGBcbiAgIFRoZSBwcmVzZW50IHBhZ2VzIGV4aXN0aW5nIHdpdGhpbiB0aGUgem9uZSBsb2NhdGVkIG9uIG1lbW9yeSBhdmFpbGFibGUgc2luY2VcbiAgIGVhcmx5IGJvb3QsIGV4Y2x1ZGluZyBob3RwbHVnZ2VkIG1lbW9yeS4gRGVmaW5lZCBvbmx5IHdoZW5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbmluZGV4IGJjZmUyZDlmNGFkYmQuLjk3Njk5YmU5YTM1NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XG4gXHRcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcbiBcdFx0aWYgKHJldClcbkBAIC0yNzAsNiArMjcxLDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcbiBcdG1lbS1cdTAwM2V6b25lID0gem9uZTtcbiBvdXQ6XG4rXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjk1LDYgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG4gXHRcdFx0XHRcdCAgLW5yX3ZtZW1tYXBfcGFnZXMpO1xuQEAgLTMxMiw4ICszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0bWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7XG4gXG4tXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4rXHRpZiAoIXJldClcbitcdFx0bWVtLVx1MDAzZXpvbmUgPSBOVUxMO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICsxMDMyLDIxIEBAIHN0cnVjdCB6b25lIHtcbiBcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXG4gXHQgKiAoTUlHUkFURV9DTUEpLlxuIFx0ICpcbitcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuK1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZVxuK1x0ICogbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQgcGZuX3RvX29ubGluZV9wYWdlKClcbitcdCAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLFxuK1x0ICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55XG4rXHQgKiBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXG4rXHQgKlxuK1x0ICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhblxuK1x0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXG4rXHQgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2ZcbitcdCAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvXG4rXHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcbitcdCAqIFwidG9vIHNtYWxsXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXG4rXHQgKiBjb250aWd1b3VzIHpvbmUuXG4rXHQgKlxuIFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcbiBcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcbiBcdCAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkXG5AQCAtMTA1Niw2ICsxMDcxLDcgQEAgc3RydWN0IHpvbmUge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRtYW5hZ2VkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzcGFubmVkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwYWdlc193aXRoX29ubGluZV9tZW1tYXA7XG4gI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X2Vhcmx5X3BhZ2VzO1xuICNlbmRpZlxuQEAgLTE2ODEsNiArMTY5NywzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB9XG4gI2VuZGlmXG4gXG4rLyoqXG4rICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzXG4rICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuXG4rICpcbisgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlXG4rICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy5cbisgKlxuKyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTlxuKyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy5cbisgKlxuKyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4rXHRcdHJldHVybjtcbitcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4rXHRcdFdSSVRFX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xuK31cbitcbiAvKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cbiAgKiBBbGwgdGhlIHJlY2xhaW0gZGVjaXNpb25zIGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMC4uZjkzMmI3NTc3YzkyYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC04MDUsMjEgKzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbitcdGlmICh6b25lX2lzX2NvbnRpZ3VvdXMoem9uZSkpXG4gXHRcdHJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pO1xuIFxuIFx0cmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7XG4gfVxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuLXtcbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IGZhbHNlO1xuLX1cbi1cbiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdCAgICBpbnQgbXQpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyLi44ZGJkNTBkODgxNTVhIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTQyMiw0OSArNDIyLDM5IEBAIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyBib29sIHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBBTElHTl9ET1dOKHBmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICsgUEFHRVNfUEVSX1NVQlNFQ1RJT04gLSAxO1xuIFxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBBbGwgcGFnZXMgaW4gYSBzdWJzZWN0aW9uIGFyZSBlaXRoZXIgb25saW5lIG9yIG9mZmxpbmUuICovXG4rXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBDaGVja2luZyBzdGFydCtlbmQgaXMgc3VmZmljaWVudC4gKi9cbitcdHJldHVybiB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSB8fFxuK1x0ICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTtcbit9XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4rLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4re1xuK1x0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4rXHRcdGlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoc3RhcnRfcGZuLCB6b25lKSlcbitcdFx0XHRyZXR1cm4gc3RhcnRfcGZuO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIGZpbmQgdGhlIGJpZ2dlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKS4gKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cbi1cdC8qIHBmbiBpcyB0aGUgZW5kIHBmbiBvZiBhIG1lbW9yeSBzZWN0aW9uLiAqL1xuLVx0cGZuID0gZW5kX3BmbiAtIDE7XG4tXHRmb3IgKDsgcGZuIFx1MDAzZT0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbi1cdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRyZXR1cm4gcGZuO1xuK1x0Zm9yICg7IGVuZF9wZm4gXHUwMDNlPSBzdGFydF9wZm47IGVuZF9wZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbitcdFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpXG4rXHRcdFx0cmV0dXJuIGVuZF9wZm4gLSAxO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ3Miw3ICs0NjIsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdGludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTtcbiBcbiBcdGlmICh6b25lLVx1MDAzZXpvbmVfc3RhcnRfcGZuID09IHN0YXJ0X3Bmbikge1xuIFx0XHQvKlxuQEAgLTQ4MSw3ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxuIFx0XHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcbitcdFx0cGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3Bmbih6b25lLCBlbmRfcGZuLFxuIFx0XHRcdFx0XHRcdHpvbmVfZW5kX3Bmbih6b25lKSk7XG4gXHRcdGlmIChwZm4pIHtcbiBcdFx0XHR6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47XG5AQCAtNDk3LDcgKzQ4Niw3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHQgKiBJbiB0aGlzIGNhc2UsIHdlIGZpbmQgc2Vjb25kIGJpZ2dlc3QgdmFsaWQgbWVtX3NlY3Rpb24gZm9yXG4gXHRcdCAqIHNocmlua2luZyB6b25lLlxuIFx0XHQgKi9cbi1cdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgem9uZS1cdTAwM2V6b25lX3N0YXJ0X3BmbixcbitcdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgICAgICBzdGFydF9wZm4pO1xuIFx0XHRpZiAocGZuKVxuIFx0XHRcdHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gKyAxO1xuQEAgLTU1NywxOCArNTQ2LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4gXG4gXHQvKlxuIFx0ICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTb1xuLVx0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayB0aGUgem9uZXMgLSB3aGljaCBpcyBva2F5IGFzXG4tXHQgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LlxuK1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gKyBucl9wYWdlcyk7XG4gXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XG4tXG4tXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIH1cbiBcbiAvKipcbkBAIC03NDYsOCArNzMwLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdGlmICh6b25lX2lzX2VtcHR5KHpvbmUpKVxuIFx0XHRpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xuIFx0cmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG5AQCAtNzc1LDggKzc1Nyw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiArMTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4gXHRpZiAoZWFybHlfc2VjdGlvbihfX3Bmbl90b19zZWN0aW9uKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpXG4gXHRcdHpvbmUtXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyArPSBucl9wYWdlcztcbiBcdHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbitcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIuLmQ2M2VlNTU0ZDdlYjggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTc5OSw2ICs3OTksMjggQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFx0X19pbml0X2RlZmVycmVkX3BhZ2UocGZuLCBuaWQpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4rc3RhdGljIGJvb2wgX19pbml0IHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4rXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgKmlzX29ubGluZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIHN1YnNlY3Rpb24gPSBwZm4gXHUwMDI2IFBBR0VfU1VCU0VDVElPTl9NQVNLO1xuK1xuK1x0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xuK1x0XHQqaXNfb25saW5lID0gISFwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcdFx0Kmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247XG4rXHR9XG4rXHRyZXR1cm4gKmlzX29ubGluZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbixcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbisjZW5kaWZcbitcbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTgyMiwyMiArODQ0LDI3IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxuICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxuLVx0XHRcdFx0XHQgIGludCB6b25lLCBpbnQgbm9kZSlcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlcGZuLFxuK1x0XHRcdFx0XHRcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHU2NCBwZ2NudCA9IDA7XG4rXHR1NjQgcGdjbnQgPSAwLCBvbmxpbmVfcGdjbnQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTtcbitcdGJvb2wgaXNfb25saW5lID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XG4gXHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xuIFx0XHRfX1NldFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTtcbitcdFx0aWYgKHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUocGZuLCBcdTAwMjZsYXN0X3N1YnNlY3Rpb24sIFx1MDAyNmlzX29ubGluZSkpXG4rXHRcdFx0b25saW5lX3BnY250Kys7XG4gXHRcdHBnY250Kys7XG4gXHR9XG4gXG4gXHRpZiAocGdjbnQpXG4gXHRcdHByX2luZm8oXCJPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xcblwiLFxuIFx0XHRcdG5vZGUsIHpvbmVfbmFtZXNbem9uZV0sIHBnY250KTtcbitcdHJldHVybiBvbmxpbmVfcGdjbnQ7XG4gfVxuIFxuIC8qXG5AQCAtOTM0LDkgKzk2MSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXRfem9uZV9yYW5nZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxuIFx0XHRcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xuK1x0em9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbitcbitcdGlmICgqaG9sZV9wZm4gXHUwMDNjIHN0YXJ0X3Bmbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuO1xuK1x0XHR1bnNpZ25lZCBsb25nIHBnY250O1xuIFxuLVx0aWYgKCpob2xlX3BmbiBcdTAwM2Mgc3RhcnRfcGZuKVxuLVx0XHRpbml0X3VuYXZhaWxhYmxlX3JhbmdlKCpob2xlX3Bmbiwgc3RhcnRfcGZuLCB6b25lX2lkLCBuaWQpO1xuK1x0XHRpZiAoaG9sZV9zdGFydF9wZm4gXHUwMDNjIHpvbmVfc3RhcnRfcGZuKSB7XG4rXHRcdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgem9uZV9zdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHRcdGhvbGVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47XG4rXHRcdH1cbitcdFx0cGdjbnQgPSBpbml0X3VuYXZhaWxhYmxlX3JhbmdlKGhvbGVfc3RhcnRfcGZuLCBzdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBwZ2NudDtcbitcdH1cbiBcbiBcdCpob2xlX3BmbiA9IGVuZF9wZm47XG4gfVxuQEAgLTIxOTUsMjggKzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xuLVxuLVx0XHRibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7XG4tXG4tXHRcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxuLVx0XHRcdFx0XHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4tXG4tXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXG4gICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU5LjYxODQxOTk3NloiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ5MDE4NDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBNZW1vcnkgSG90cGx1ZyBhbmQgQ29udGlndW91cyBab25lIExvZ2ljIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIG1lbW9yeSBob3RwbHVnIGFuZCB0aGUgbG9naWMgYXJvdW5kIGNvbnRpZ3VvdXMgem9uZXMsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgdG8gdGhlIGBzdHJ1Y3Qgem9uZWAgYW5kIGNoYW5naW5nIGhvdyB3ZSBkZXRlcm1pbmUgaWYgYSB6b25lIGlzIGNvbnRpZ3VvdXMuIEl0IGFsc28gdG91Y2hlcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBsaWtlIGBtZW1vcnlfYmxvY2tfb25saW5lYCwgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCwgYW5kIHZhcmlvdXMgUEZOIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoP1xuXG5MZXQncyBsb29rIGF0IHRoZSBrZXkgY2hhbmdlczogYWRkaW5nIGEgY291bnRlciwgYWx0ZXJpbmcgYSBib29sZWFuIGZsYWcsIGFuZCB1cGRhdGluZyBhIGZldyBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggbmV3IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGtlcm5lbCBhbmQgcG90ZW50aWFsbHkgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gb2J2aW91cyBhdmVudWVzIGZvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgdHJhY2tpbmcgb25saW5lIHBhZ2VzIGFuZCBjaGVja2luZyBmb3IgY29udGlndWl0eSB3aXRoaW4gbWVtb3J5IHpvbmVzLCBub3QgbmV3IGFsbG9jYXRpb24gb3IgaGFuZGxpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9uIHRoZSBzdGFjayBvciBoZWFwLlxuXG5JZiB0aGVyZSdzIGEgYnVnIGhlcmUsIEkgc3VzcGVjdCBpdCdzIGdvaW5nIHRvIG1hbmlmZXN0IGFzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3IgYW4gaW52YWxpZCBwYWdlIGFjY2VzcyDigJMgbGlrZSB0cnlpbmcgdG8gdXNlIGEgcGFnZSBzdHJ1Y3R1cmUgdGhhdCBkb2Vzbid0IGV4aXN0IG9yIGhhc24ndCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLiBLQVNBTiBpcyBhbHJlYWR5IGdvaW5nIHRvIGJlIG15IHByaW1hcnkgdG9vbCB0byBhZGRyZXNzIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcywgd2hpY2ggYXJlIHRoZSBtYWluIHJpc2tzIGhlcmUsIHNpbmNlIGl0IGlzIHRhaWxvcmVkIHRvIGZpbmRpbmcgdGhlc2UgaXNzdWVzLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWFkcywgd2hpY2ggY291bGQgY2F1c2UgYSBzZWN1cml0eSByaXNrLCBwYXJ0aWN1bGFybHkgaWYgdGhhdCBtZW1vcnkgaXMgbGVha2VkLiBCdXQgdGhpcyBwYXRjaCBkb2Vzbid0IHNlZW0gdG8gYmUgY2hhbmdpbmcgaG93IHdlIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHBhZ2Ugc3RydWN0dXJlcyBhbmQgbWVtb3J5IHJlZ2lvbnMsIG9ubHkgaG93IHdlIHRyYWNrIHRoZWlyIHN0YXR1cy5cblxuTGV0J3MgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIGJlIHNhZmUuIGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGlzIGEgc2ltcGxlIGNvdW50ZXIuIGB6b25lLVx1MDAzZWNvbnRpZ3VvdXNgIGlzIGEgYm9vbGVhbi4gYGluaXRfdW5hdmFpbGFibGVfcmFuZ2VgIGluaXRpYWxpemVzIHBhZ2VzIHVzaW5nIGBfX2luaXRfc2luZ2xlX3BhZ2VgIGFuZCBgX19TZXRQYWdlUmVzZXJ2ZWRgLiBUaGlzIGluaXRpYWxpemF0aW9uIGlzIGNyaXRpY2FsLCBhbmQgdGhlc2UgcGFnZXMgd2lsbCBiZSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpbmcsIG9yIHRoZXkgd2lsbCBiZSB6ZXJvZWQuIFRoZSBwYXRjaCB1cGRhdGVzIHRoZXNlIGNvdW50ZXJzIGFuZCBmbGFncyBhbmQgbWFuaXB1bGF0ZXMgdGhlc2UgbWVtb3J5IHpvbmVzLCBidXQgaXQgaXNuJ3QgY2hhbmdpbmcgaG93IHRoZXNlIG1lbW9yeSB6b25lcyBhcmUgYWxsb2NhdGVkIG9yIGhvdyB3ZSBpbml0aWFsaXplIHRoZWlyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGhhdmUgYW55IG9idmlvdXMgaW1wYWN0IG9uIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYWxsb2NhdGlvbiBvciByZWxlYXNlLCBpdCB1cGRhdGVzIGZsYWdzIGZvciB6b25lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCByZWxlYXNlZCwgYW5kIHNvIG9uLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHVwZGF0ZXMgcGFnZSB0cmFja2luZyBhbmQgY29udGlndW91cyB6b25lIGxvZ2ljLCB3aGljaCBpcyBwcmltYXJpbHkgbWFuYWdpbmcgY291bnRlcnMgYW5kIGZsYWdzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgbWVtb3J5IHN0cnVjdHVyZXMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBwcm9uZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYW5kIGlzIG5vdCBnb2luZyB0byBsZWFrIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuIEJ1Z3Mgd2lsbCBsaWtlbHkgYmUgbWVtb3J5IGFjY2VzcyBlcnJvcnMgdGhhdCBLQVNBTiBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3OSwiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowOToxNC4xMDg2MDk0M1oiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 09:03:54 +0000 UTC FinishedAt: 2026-08-18 09:09:15 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMORY_HOTPLUG" ], "series_id": "1b97fac1-9baf-4427-ae79-2a61cecdaf04" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "online_pages", "offline_pages", "move_pfn_range_to_zone", "remove_pfn_range_from_zone", "__add_pages", "__remove_pages", "adjust_present_page_count" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b25saW5lX3BhZ2VzJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAgICYjMzQ7bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgY29udGlndW91cyB6b25lcyBhcmUgdHJhY2tlZCwgcmVwbGFjaW5nIGFuIE8oTikgcGFnZWJsb2NrIGl0ZXJhdGlvbiB3aXRoIGFuIE8oMSkgY2hlY2sgdXNpbmcgYSBuZXcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgY291bnRlciBpbiBgc3RydWN0IHpvbmVgLiBUaGlzIGNvdW50ZXIgaXMgdXBkYXRlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuaW5kZXggYjc2MTgzNTQ1ZTViZi4uY2VlYTZjOGIyN2NjMSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5AQCAtNDgzLDYgJiM0Mzs0ODMsMTIgQEAgR2VuZXJhbFxuICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdFxuICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC5cbiBcbiYjNDM7YGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYFxuJiM0MzsgIFBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUgYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kXG4mIzQzOyAgbWVtb3J5IGhvbGVzIHdob3NlIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kXG4mIzQzOyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yXG4mIzQzOyAgYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCBpbiBgYGluY2x1ZGUvbGludXgvbW16b25lLmhgYCBmb3IgbW9yZSBkZXRhaWxzLlxuJiM0MztcbiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYFxuICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZVxuICAgZWFybHkgYm9vdCwgZXhjbHVkaW5nIGhvdHBsdWdnZWQgbWVtb3J5LiBEZWZpbmVkIG9ubHkgd2hlblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuaW5kZXggYmNmZTJkOWY0YWRiZC4uOTc2OTliZTlhMzU3OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXG5AQCAtMjQ2LDYgJiM0MzsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbiYjNDM7XHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcykge1xuIFx0XHRyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7XG4gXHRcdGlmIChyZXQpXG5AQCAtMjcwLDYgJiM0MzsyNzEsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFxuIFx0bWVtLVx1MDAzZXpvbmUgPSB6b25lO1xuIG91dDpcbiYjNDM7XHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjk1LDYgJiM0MzsyOTcsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcdFx0bnJfdm1lbW1hcF9wYWdlcyA9IG1lbS1cdTAwM2VhbHRtYXAtXHUwMDNlZnJlZTtcbiBcbiBcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XG4mIzQzO1x0Y2xlYXJfem9uZV9jb250aWd1b3VzKG1lbS1cdTAwM2V6b25lKTtcbiBcdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuIFx0XHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS1cdTAwM2Vncm91cCxcbiBcdFx0XHRcdFx0ICAtbnJfdm1lbW1hcF9wYWdlcyk7XG5AQCAtMzEyLDggJiM0MzszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0bWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7XG4gXG4tXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuJiM0MztcdHNldF96b25lX2NvbnRpZ3VvdXMobWVtLVx1MDAzZXpvbmUpO1xuJiM0MztcdGlmICghcmV0KVxuJiM0MztcdFx0bWVtLVx1MDAzZXpvbmUgPSBOVUxMO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICYjNDM7MTAzMiwyMSBAQCBzdHJ1Y3Qgem9uZSB7XG4gXHQgKiBjbWEgcGFnZXMgaXMgcHJlc2VudCBwYWdlcyB0aGF0IGFyZSBhc3NpZ25lZCBmb3IgQ01BIHVzZVxuIFx0ICogKE1JR1JBVEVfQ01BKS5cbiBcdCAqXG4mIzQzO1x0ICogcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwIHRyYWNrcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUgdGhhdCBoYXZlXG4mIzQzO1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZVxuJiM0MztcdCAqIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHBmbl90b19vbmxpbmVfcGFnZSgpXG4mIzQzO1x0ICogc3VjY2VlZHMuIFdoZW4gc3Bhbm5lZF9wYWdlcyA9PSBwYWdlc193aXRoX29ubGluZV9tZW1tYXAsXG4mIzQzO1x0ICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55XG4mIzQzO1x0ICogUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhblxuJiM0MztcdCAqIG9ubGluZSBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhblxuJiM0MztcdCAqIG9ubHkgaGFwcGVuIGR1cmluZyBib290LCB3aGVuIGluaXRpYWxpemluZyB0aGUgbWVtb3J5IG1hcCBvZlxuJiM0MztcdCAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvXG4mIzQzO1x0ICogY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sgbWF5IHJlc3VsdCBpbiBhXG4mIzQzO1x0ICogXCYjMzQ7dG9vIHNtYWxsXCYjMzQ7IHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cyBkZXRlY3RpbmcgYVxuJiM0MztcdCAqIGNvbnRpZ3VvdXMgem9uZS5cbiYjNDM7XHQgKlxuIFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcbiBcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcbiBcdCAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkXG5AQCAtMTA1Niw2ICYjNDM7MTA3MSw3IEBAIHN0cnVjdCB6b25lIHtcbiBcdGF0b21pY19sb25nX3RcdFx0bWFuYWdlZF9wYWdlcztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0c3Bhbm5lZF9wYWdlcztcbiBcdHVuc2lnbmVkIGxvbmdcdFx0cHJlc2VudF9wYWdlcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nXHRcdHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcDtcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXG4gXHR1bnNpZ25lZCBsb25nXHRcdHByZXNlbnRfZWFybHlfcGFnZXM7XG4gI2VuZGlmXG5AQCAtMTY4MSw2ICYjNDM7MTY5NywzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB9XG4gI2VuZGlmXG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB6b25lX2lzX2NvbnRpZ3VvdXMgLSB0ZXN0IHdoZXRoZXIgYSB6b25lIGlzIGNvbnRpZ3VvdXNcbiYjNDM7ICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuXG4mIzQzOyAqXG4mIzQzOyAqIEluIGEgY29udGlndW91cyB6b25lLCBpdCBpcyB2YWxpZCB0byBjYWxsIHBmbl90b19wYWdlKCkgb24gYW55IFBGTiBpbiB0aGVcbiYjNDM7ICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy5cbiYjNDM7ICpcbiYjNDM7ICogTm90ZSB0aGF0IG1pc3Npbmcgc3luY2hyb25pemF0aW9uIHdpdGggbWVtb3J5IG9mZmxpbmluZyBtYWtlcyBhbnkgUEZOXG4mIzQzOyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy5cbiYjNDM7ICpcbiYjNDM7ICogWk9ORV9ERVZJQ0Ugem9uZXMgYXJlIGFsd2F5cyBtYXJrZWQgbm9uLWNvbnRpZ3VvdXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBjb250aWd1b3VzLCBvdGhlcndpc2UgZmFsc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRSh6b25lLVx1MDAzZWNvbnRpZ3VvdXMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7e1xuJiM0MztcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4mIzQzO1x0XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgdHJ1ZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3tcbiYjNDM7XHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogUmV0dXJucyB0cnVlIGlmIGEgem9uZSBoYXMgcGFnZXMgbWFuYWdlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yLlxuICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhblxuZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oXG5pbmRleCAxODFlNzlmMWQ2YTIwLi5mOTMyYjc1NzdjOTJhIDEwMDY0NFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaFxuQEAgLTgwNSwyMSAmIzQzOzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbiYjNDM7XHRpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKVxuIFx0XHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcbiBcbiBcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xuIH1cbiBcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xuIGJvb2wgcGZuX3JhbmdlX2ludGVyc2VjdHNfem9uZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR6b25lLVx1MDAzZWNvbnRpZ3VvdXMgPSBmYWxzZTtcbi19XG4tXG4gZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpO1xuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4gXHRcdFx0XHQgICAgaW50IG10KTtcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuaW5kZXggN2FjMTlmYWIyMjYzMi4uOGRiZDUwZDg4MTU1YSAxMDA2NDRcbi0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbW9yeV9ob3RwbHVnLmNcbkBAIC00MjIsNDkgJiM0Mzs0MjIsMzkgQEAgaW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4tLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4tXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4mIzQzO3N0YXRpYyBib29sIHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICYjNDM7PSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xuLVx0XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbi1cdFx0XHRjb250aW51ZTtcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IEFMSUdOX0RPV04ocGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTik7XG4mIzQzO1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IFBBR0VTX1BFUl9TVUJTRUNUSU9OIC0gMTtcbiBcbi1cdFx0aWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdC8qIEFsbCBwYWdlcyBpbiBhIHN1YnNlY3Rpb24gYXJlIGVpdGhlciBvbmxpbmUgb3Igb2ZmbGluZS4gKi9cbiYjNDM7XHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdC8qIENoZWNraW5nIHN0YXJ0JiM0MztlbmQgaXMgc3VmZmljaWVudC4gKi9cbiYjNDM7XHRyZXR1cm4gem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkgfHxcbiYjNDM7XHQgICAgICAgem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UoZW5kX3BmbikpO1xuJiM0Mzt9XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4mIzQzOy8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4mIzQzO3tcbiYjNDM7XHRmb3IgKDsgc3RhcnRfcGZuIFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4mIzQzO1x0XHRpZiAoc3Vic2VjdGlvbl9vdmVybGFwc196b25lKHN0YXJ0X3Bmbiwgem9uZSkpXG4mIzQzO1x0XHRcdHJldHVybiBzdGFydF9wZm47XG4gXHR9XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gLyogZmluZCB0aGUgYmlnZ2VzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pLiAqL1xuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSxcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4ge1xuLVx0dW5zaWduZWQgbG9uZyBwZm47XG4tXG4tXHQvKiBwZm4gaXMgdGhlIGVuZCBwZm4gb2YgYSBtZW1vcnkgc2VjdGlvbi4gKi9cbi1cdHBmbiA9IGVuZF9wZm4gLSAxO1xuLVx0Zm9yICg7IHBmbiBcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChwZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0cmV0dXJuIHBmbjtcbiYjNDM7XHRmb3IgKDsgZW5kX3BmbiBcdTAwM2U9IHN0YXJ0X3BmbjsgZW5kX3BmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikge1xuJiM0MztcdFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpXG4mIzQzO1x0XHRcdHJldHVybiBlbmRfcGZuIC0gMTtcbiBcdH1cbi1cbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00NzIsNyAmIzQzOzQ2Miw2IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuLVx0aW50IG5pZCA9IHpvbmVfdG9fbmlkKHpvbmUpO1xuIFxuIFx0aWYgKHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gPT0gc3RhcnRfcGZuKSB7XG4gXHRcdC8qXG5AQCAtNDgxLDcgJiM0Mzs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxuIFx0XHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcbiYjNDM7XHRcdHBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oem9uZSwgZW5kX3BmbixcbiBcdFx0XHRcdFx0XHR6b25lX2VuZF9wZm4oem9uZSkpO1xuIFx0XHRpZiAocGZuKSB7XG4gXHRcdFx0em9uZS1cdTAwM2VzcGFubmVkX3BhZ2VzID0gem9uZV9lbmRfcGZuKHpvbmUpIC0gcGZuO1xuQEAgLTQ5Nyw3ICYjNDM7NDg2LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRcdCAqIEluIHRoaXMgY2FzZSwgd2UgZmluZCBzZWNvbmQgYmlnZ2VzdCB2YWxpZCBtZW1fc2VjdGlvbiBmb3JcbiBcdFx0ICogc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4obmlkLCB6b25lLCB6b25lLVx1MDAzZXpvbmVfc3RhcnRfcGZuLFxuJiM0MztcdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgICAgICBzdGFydF9wZm4pO1xuIFx0XHRpZiAocGZuKVxuIFx0XHRcdHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gJiM0MzsgMTtcbkBAIC01NTcsMTggJiM0Mzs1NDYsMTMgQEAgdm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdC8qXG4gXHQgKiBab25lIHNocmlua2luZyBjb2RlIGNhbm5vdCBwcm9wZXJseSBkZWFsIHdpdGggWk9ORV9ERVZJQ0UuIFNvXG4tXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXNcbi1cdCAqIHNldF96b25lX2NvbnRpZ3VvdXMoKSBjYW5ub3QgZGVhbCB3aXRoIFpPTkVfREVWSUNFIGVpdGhlciB3YXkuXG4mIzQzO1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXMpO1xuIFx0dXBkYXRlX3BnZGF0X3NwYW4ocGdkYXQpO1xuLVxuLVx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcbiB9XG4gXG4gLyoqXG5AQCAtNzQ2LDggJiM0Mzs3MzAsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbiBcdGludCBuaWQgPSBwZ2RhdC1cdTAwM2Vub2RlX2lkO1xuIFxuLVx0Y2xlYXJfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuLVxuIFx0aWYgKHpvbmVfaXNfZW1wdHkoem9uZSkpXG4gXHRcdGluaXRfY3VycmVudGx5X2VtcHR5X3pvbmUoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG4gXHRyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcbkBAIC03NzUsOCAmIzQzOzc1Nyw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiAmIzQzOzEwNTIsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxuIFx0aWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKVxuIFx0XHR6b25lLVx1MDAzZXByZXNlbnRfZWFybHlfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gbnJfcGFnZXM7XG4gXHR6b25lLVx1MDAzZXpvbmVfcGdkYXQtXHUwMDNlbm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIuLmQ2M2VlNTU0ZDdlYjggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTc5OSw2ICYjNDM7Nzk5LDI4IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiBcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcbiB9XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBcbiYjNDM7c3RhdGljIGJvb2wgX19pbml0IHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3Rfc3Vic2VjdGlvbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdWJzZWN0aW9uID0gcGZuIFx1MDAyNiBQQUdFX1NVQlNFQ1RJT05fTUFTSztcbiYjNDM7XG4mIzQzO1x0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xuJiM0MztcdFx0KmlzX29ubGluZSA9ICEhcGZuX3RvX29ubGluZV9wYWdlKHBmbik7XG4mIzQzO1x0XHQqbGFzdF9zdWJzZWN0aW9uID0gc3Vic2VjdGlvbjtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuICppc19vbmxpbmU7XG4mIzQzO31cbiYjNDM7I2Vsc2VcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4mIzQzO1x0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3Rfc3Vic2VjdGlvbixcbiYjNDM7XHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7I2VuZGlmXG4mIzQzO1xuIC8qXG4gICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeVxuICAqIGFyZSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIGJ5IGdvaW5nIHRocm91Z2ggX19pbml0X3NpbmdsZV9wYWdlKCkgZHVyaW5nXG5AQCAtODIyLDIyICYjNDM7ODQ0LDI3IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxuICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxuLVx0XHRcdFx0XHQgIGludCB6b25lLCBpbnQgbm9kZSlcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxuJiM0MztcdFx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGVwZm4sXG4mIzQzO1x0XHRcdFx0XHRcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHU2NCBwZ2NudCA9IDA7XG4mIzQzO1x0dTY0IHBnY250ID0gMCwgb25saW5lX3BnY250ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxhc3Rfc3Vic2VjdGlvbiA9IC0xO1xuJiM0MztcdGJvb2wgaXNfb25saW5lID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XG4gXHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xuIFx0XHRfX1NldFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTtcbiYjNDM7XHRcdGlmICh1bmF2YWlsYWJsZV9wZm5faXNfb25saW5lKHBmbiwgXHUwMDI2bGFzdF9zdWJzZWN0aW9uLCBcdTAwMjZpc19vbmxpbmUpKVxuJiM0MztcdFx0XHRvbmxpbmVfcGdjbnQmIzQzOyYjNDM7O1xuIFx0XHRwZ2NudCYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4gXHRpZiAocGdjbnQpXG4gXHRcdHByX2luZm8oXCYjMzQ7T24gbm9kZSAlZCwgem9uZSAlczogJWxsZCBwYWdlcyBpbiB1bmF2YWlsYWJsZSByYW5nZXNcXG5cJiMzNDssXG4gXHRcdFx0bm9kZSwgem9uZV9uYW1lc1t6b25lXSwgcGdjbnQpO1xuJiM0MztcdHJldHVybiBvbmxpbmVfcGdjbnQ7XG4gfVxuIFxuIC8qXG5AQCAtOTM0LDkgJiM0Mzs5NjEsMjEgQEAgc3RhdGljIHZvaWQgX19pbml0IG1lbW1hcF9pbml0X3pvbmVfcmFuZ2Uoc3RydWN0IHpvbmUgKnpvbmUsXG4gXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShlbmRfcGZuIC0gc3RhcnRfcGZuLCBuaWQsIHpvbmVfaWQsIHN0YXJ0X3BmbixcbiBcdFx0XHQgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgbXQsIGZhbHNlKTtcbiYjNDM7XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCpob2xlX3BmbiBcdTAwM2Mgc3RhcnRfcGZuKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuO1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBwZ2NudDtcbiBcbi1cdGlmICgqaG9sZV9wZm4gXHUwMDNjIHN0YXJ0X3Bmbilcbi1cdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZSgqaG9sZV9wZm4sIHN0YXJ0X3Bmbiwgem9uZV9pZCwgbmlkKTtcbiYjNDM7XHRcdGlmIChob2xlX3N0YXJ0X3BmbiBcdTAwM2Mgem9uZV9zdGFydF9wZm4pIHtcbiYjNDM7XHRcdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgem9uZV9zdGFydF9wZm4sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgem9uZV9pZCwgbmlkKTtcbiYjNDM7XHRcdFx0aG9sZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHBnY250ID0gaW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgc3RhcnRfcGZuLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHpvbmVfaWQsIG5pZCk7XG4mIzQzO1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gcGdjbnQ7XG4mIzQzO1x0fVxuIFxuIFx0KmhvbGVfcGZuID0gZW5kX3BmbjtcbiB9XG5AQCAtMjE5NSwyOCAmIzQzOzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICYjNDM7PSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcbi1cbi1cdFx0YmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpO1xuLVxuLVx0XHRpZiAoIV9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKGJsb2NrX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0ICAgICBibG9ja19lbmRfcGZuLCB6b25lKSlcbi1cdFx0XHRyZXR1cm47XG4tXHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0fVxuLVxuLVx0LyogV2UgY29uZmlybSB0aGF0IHRoZXJlIGlzIG5vIGhvbGUgKi9cbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IHRydWU7XG4tfVxuLVxuIC8qXG4gICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZVxuICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b25saW5lX3BhZ2VzJiMzNDssCiAgICAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAgICYjMzQ7bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICAgJiMzNDtfX2FkZF9wYWdlcyYjMzQ7LAogICAgJiMzNDtfX3JlbW92ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBob3cgY29udGlndW91cyB6b25lcyBhcmUgdHJhY2tlZCwgcmVwbGFjaW5nIGFuIE8oTikgcGFnZWJsb2NrIGl0ZXJhdGlvbiB3aXRoIGFuIE8oMSkgY2hlY2sgdXNpbmcgYSBuZXcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgY291bnRlciBpbiBgc3RydWN0IHpvbmVgLiBUaGlzIGNvdW50ZXIgaXMgdXBkYXRlZCBkdXJpbmcgbWVtb3J5IGhvdHBsdWcgYW5kIGluaXRpYWxpemF0aW9uLiBUaGUgY2hhbmdlcyBhZmZlY3QgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWVtb3J5IGhvdHBsdWcgbG9naWMsIHdoaWNoIGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0CmluZGV4IGI3NjE4MzU0NWU1YmYuLmNlZWE2YzhiMjdjYzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKQEAgLTQ4Myw2ICYjNDM7NDgzLDEyIEBAIEdlbmVyYWwKICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdAogICBpcyBpbml0aWFsaXplZCBieSBgYGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoKWBgLgogCiYjNDM7YGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYAomIzQzOyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmQKJiM0MzsgIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZAomIzQzOyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yCiYjNDM7ICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuCiYjNDM7CiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYAogICBUaGUgcHJlc2VudCBwYWdlcyBleGlzdGluZyB3aXRoaW4gdGhlIHpvbmUgbG9jYXRlZCBvbiBtZW1vcnkgYXZhaWxhYmxlIHNpbmNlCiAgIGVhcmx5IGJvb3QsIGV4Y2x1ZGluZyBob3RwbHVnZ2VkIG1lbW9yeS4gRGVmaW5lZCBvbmx5IHdoZW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwppbmRleCBiY2ZlMmQ5ZjRhZGJkLi45NzY5OWJlOWEzNTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCkBAIC0yNDYsNiAmIzQzOzI0Niw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJCW5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tJmd0O2FsdG1hcC0mZ3Q7ZnJlZTsKIAogCW1lbV9ob3RwbHVnX2JlZ2luKCk7CiYjNDM7CWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKIAlpZiAobnJfdm1lbW1hcF9wYWdlcykgewogCQlyZXQgPSBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcywgem9uZSk7CiAJCWlmIChyZXQpCkBAIC0yNzAsNiAmIzQzOzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAKIAltZW0tJmd0O3pvbmUgPSB6b25lOwogb3V0OgomIzQzOwlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogCW1lbV9ob3RwbHVnX2RvbmUoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjk1LDYgJiM0MzsyOTcsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSkKIAkJbnJfdm1lbW1hcF9wYWdlcyA9IG1lbS0mZ3Q7YWx0bWFwLSZndDtmcmVlOwogCiAJbWVtX2hvdHBsdWdfYmVnaW4oKTsKJiM0MzsJY2xlYXJfem9uZV9jb250aWd1b3VzKG1lbS0mZ3Q7em9uZSk7CiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpCiAJCWFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgbWVtLSZndDtncm91cCwKIAkJCQkJICAtbnJfdm1lbW1hcF9wYWdlcyk7CkBAIC0zMTIsOCAmIzQzOzMxNSwxMCBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSkKIAlpZiAobnJfdm1lbW1hcF9wYWdlcykKIAkJbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7CiAKLQltZW0tJmd0O3pvbmUgPSBOVUxMOwogb3V0OgomIzQzOwlzZXRfem9uZV9jb250aWd1b3VzKG1lbS0mZ3Q7em9uZSk7CiYjNDM7CWlmICghcmV0KQomIzQzOwkJbWVtLSZndDt6b25lID0gTlVMTDsKIAltZW1faG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTAzMiw2ICYjNDM7MTAzMiwyMSBAQCBzdHJ1Y3Qgem9uZSB7CiAJICogY21hIHBhZ2VzIGlzIHByZXNlbnQgcGFnZXMgdGhhdCBhcmUgYXNzaWduZWQgZm9yIENNQSB1c2UKIAkgKiAoTUlHUkFURV9DTUEpLgogCSAqCiYjNDM7CSAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZQomIzQzOwkgKiBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmQgbWVtb3J5IGhvbGVzIHdob3NlCiYjNDM7CSAqIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHBmbl90b19vbmxpbmVfcGFnZSgpCiYjNDM7CSAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLAomIzQzOwkgKiBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnkKJiM0MzsJICogUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLgomIzQzOwkgKgomIzQzOwkgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuCiYjNDM7CSAqIG9ubGluZSBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhbgomIzQzOwkgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2YKJiM0MzsJICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG8KJiM0MzsJICogY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sgbWF5IHJlc3VsdCBpbiBhCiYjNDM7CSAqICYjMzQ7dG9vIHNtYWxsJiMzNDsgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhCiYjNDM7CSAqIGNvbnRpZ3VvdXMgem9uZS4KJiM0MzsJICoKIAkgKiBTbyBwcmVzZW50X3BhZ2VzIG1heSBiZSB1c2VkIGJ5IG1lbW9yeSBob3RwbHVnIG9yIG1lbW9yeSBwb3dlcgogCSAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmcKIAkgKiAocHJlc2VudF9wYWdlcyAtIG1hbmFnZWRfcGFnZXMpLiBBbmQgbWFuYWdlZF9wYWdlcyBzaG91bGQgYmUgdXNlZApAQCAtMTA1Niw2ICYjNDM7MTA3MSw3IEBAIHN0cnVjdCB6b25lIHsKIAlhdG9taWNfbG9uZ190CQltYW5hZ2VkX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcJCXNwYW5uZWRfcGFnZXM7CiAJdW5zaWduZWQgbG9uZwkJcHJlc2VudF9wYWdlczsKJiM0MzsJdW5zaWduZWQgbG9uZwkJcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwOwogI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQogCXVuc2lnbmVkIGxvbmcJCXByZXNlbnRfZWFybHlfcGFnZXM7CiAjZW5kaWYKQEAgLTE2ODEsNiAmIzQzOzE2OTcsMzggQEAgc3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfem9uZV9kZXZpY2UoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiB9CiAjZW5kaWYKIAomIzQzOy8qKgomIzQzOyAqIHpvbmVfaXNfY29udGlndW91cyAtIHRlc3Qgd2hldGhlciBhIHpvbmUgaXMgY29udGlndW91cwomIzQzOyAqIEB6b25lOiB0aGUgem9uZSB0byB0ZXN0LgomIzQzOyAqCiYjNDM7ICogSW4gYSBjb250aWd1b3VzIHpvbmUsIGl0IGlzIHZhbGlkIHRvIGNhbGwgcGZuX3RvX3BhZ2UoKSBvbiBhbnkgUEZOIGluIHRoZQomIzQzOyAqIHNwYW5uZWQgem9uZSB3aXRob3V0IHJlcXVpcmluZyBwZm5fdmFsaWQoKSBvciBwZm5fdG9fb25saW5lX3BhZ2UoKSBjaGVja3MuCiYjNDM7ICoKJiM0MzsgKiBOb3RlIHRoYXQgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gd2l0aCBtZW1vcnkgb2ZmbGluaW5nIG1ha2VzIGFueSBQRk4KJiM0MzsgKiB0cmF2ZXJzYWwgcHJvbmUgdG8gcmFjZXMuCiYjNDM7ICoKJiM0MzsgKiBaT05FX0RFVklDRSB6b25lcyBhcmUgYWx3YXlzIG1hcmtlZCBub24tY29udGlndW91cy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdHJ1ZSBpZiBjb250aWd1b3VzLCBvdGhlcndpc2UgZmFsc2UuCiYjNDM7ICovCiYjNDM7c3RhdGljIGlubGluZSBib29sIHpvbmVfaXNfY29udGlndW91cyhjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoem9uZS0mZ3Q7Y29udGlndW91cyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJaWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICh6b25lLSZndDtzcGFubmVkX3BhZ2VzID09IHpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCkKJiM0MzsJCVdSSVRFX09OQ0Uoem9uZS0mZ3Q7Y29udGlndW91cywgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwlXUklURV9PTkNFKHpvbmUtJmd0O2NvbnRpZ3VvdXMsIGZhbHNlKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmV0dXJucyB0cnVlIGlmIGEgem9uZSBoYXMgcGFnZXMgbWFuYWdlZCBieSB0aGUgYnVkZHkgYWxsb2NhdG9yLgogICogQWxsIHRoZSByZWNsYWltIGRlY2lzaW9ucyBoYXZlIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIHJhdGhlciB0aGFuCmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaAppbmRleCAxODFlNzlmMWQ2YTIwLi5mOTMyYjc1NzdjOTJhIDEwMDY0NAotLS0gYS9tbS9pbnRlcm5hbC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2ludGVybmFsLmgKQEAgLTgwNSwyMSAmIzQzOzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpCiB7Ci0JaWYgKHpvbmUtJmd0O2NvbnRpZ3VvdXMpCiYjNDM7CWlmICh6b25lX2lzX2NvbnRpZ3VvdXMoem9uZSkpCiAJCXJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pOwogCiAJcmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7CiB9CiAKLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7CiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0Jem9uZS0mZ3Q7Y29udGlndW91cyA9IGZhbHNlOwotfQotCiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7CiBleHRlcm4gdm9pZCBfX3B1dGJhY2tfaXNvbGF0ZWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLAogCQkJCSAgICBpbnQgbXQpOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggN2FjMTlmYWIyMjYzMi4uOGRiZDUwZDg4MTU1YSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC00MjIsNDkgJiM0Mzs0MjIsMzkgQEAgaW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCXJldHVybiBlcnI7CiB9CiAKLS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKJiM0MztzdGF0aWMgYm9vbCBzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCB6b25lICp6b25lKQogewotCWZvciAoOyBzdGFydF9wZm4gJmx0OyBlbmRfcGZuOyBzdGFydF9wZm4gJiM0Mzs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7Ci0JCWlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKQotCQkJY29udGludWU7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gQUxJR05fRE9XTihwZm4sIFBBR0VTX1BFUl9TVUJTRUNUSU9OKTsKJiM0MzsJY29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICYjNDM7IFBBR0VTX1BFUl9TVUJTRUNUSU9OIC0gMTsKIAotCQlpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpCi0JCQljb250aW51ZTsKJiM0MzsJLyogQWxsIHBhZ2VzIGluIGEgc3Vic2VjdGlvbiBhcmUgZWl0aGVyIG9ubGluZSBvciBvZmZsaW5lLiAqLwomIzQzOwlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKIAotCQlpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpCi0JCQljb250aW51ZTsKJiM0MzsJLyogQ2hlY2tpbmcgc3RhcnQmIzQzO2VuZCBpcyBzdWZmaWNpZW50LiAqLwomIzQzOwlyZXR1cm4gem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkgfHwKJiM0MzsJICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTsKJiM0Mzt9CiAKLQkJcmV0dXJuIHN0YXJ0X3BmbjsKJiM0MzsvKiBmaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiYjNDM7ewomIzQzOwlmb3IgKDsgc3RhcnRfcGZuICZsdDsgZW5kX3Bmbjsgc3RhcnRfcGZuICYjNDM7PSBQQUdFU19QRVJfU1VCU0VDVElPTikgewomIzQzOwkJaWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShzdGFydF9wZm4sIHpvbmUpKQomIzQzOwkJCXJldHVybiBzdGFydF9wZm47CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIC8qIGZpbmQgdGhlIGJpZ2dlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKS4gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihpbnQgbmlkLCBzdHJ1Y3Qgem9uZSAqem9uZSwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewotCXVuc2lnbmVkIGxvbmcgcGZuOwotCi0JLyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovCi0JcGZuID0gZW5kX3BmbiAtIDE7Ci0JZm9yICg7IHBmbiAmZ3Q7PSBzdGFydF9wZm47IHBmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikgewotCQlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShwZm4pKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShwZm4pKSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldHVybiBwZm47CiYjNDM7CWZvciAoOyBlbmRfcGZuICZndDs9IHN0YXJ0X3BmbjsgZW5kX3BmbiAtPSBQQUdFU19QRVJfU1VCU0VDVElPTikgewomIzQzOwkJaWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpCiYjNDM7CQkJcmV0dXJuIGVuZF9wZm4gLSAxOwogCX0KLQogCXJldHVybiAwOwogfQogCkBAIC00NzIsNyAmIzQzOzQ2Miw2IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JaW50IG5pZCA9IHpvbmVfdG9fbmlkKHpvbmUpOwogCiAJaWYgKHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuID09IHN0YXJ0X3BmbikgewogCQkvKgpAQCAtNDgxLDcgJiM0Mzs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvbgogCQkgKiBmb3Igc2hyaW5raW5nIHpvbmUuCiAJCSAqLwotCQlwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbiwKJiM0MzsJCXBmbiA9IGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oem9uZSwgZW5kX3BmbiwKIAkJCQkJCXpvbmVfZW5kX3Bmbih6b25lKSk7CiAJCWlmIChwZm4pIHsKIAkJCXpvbmUtJmd0O3NwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47CkBAIC00OTcsNyAmIzQzOzQ4Niw3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkgKiBJbiB0aGlzIGNhc2UsIHdlIGZpbmQgc2Vjb25kIGJpZ2dlc3QgdmFsaWQgbWVtX3NlY3Rpb24gZm9yCiAJCSAqIHNocmlua2luZyB6b25lLgogCQkgKi8KLQkJcGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgem9uZS0mZ3Q7em9uZV9zdGFydF9wZm4sCiYjNDM7CQlwZm4gPSBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oem9uZSwgem9uZS0mZ3Q7em9uZV9zdGFydF9wZm4sCiAJCQkJCSAgICAgICBzdGFydF9wZm4pOwogCQlpZiAocGZuKQogCQkJem9uZS0mZ3Q7c3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuICYjNDM7IDE7CkBAIC01NTcsMTggJiM0Mzs1NDYsMTMgQEAgdm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAogCS8qCiAJICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTbwotCSAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgdGhlIHpvbmVzIC0gd2hpY2ggaXMgb2theSBhcwotCSAqIHNldF96b25lX2NvbnRpZ3VvdXMoKSBjYW5ub3QgZGVhbCB3aXRoIFpPTkVfREVWSUNFIGVpdGhlciB3YXkuCiYjNDM7CSAqIHdlIHdpbGwgbm90IHRyeSB0byBzaHJpbmsgaXQuCiAJICovCiAJaWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpCiAJCXJldHVybjsKIAotCWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKLQogCXNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gJiM0MzsgbnJfcGFnZXMpOwogCXVwZGF0ZV9wZ2RhdF9zcGFuKHBnZGF0KTsKLQotCXNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiB9CiAKIC8qKgpAQCAtNzQ2LDggJiM0Mzs3MzAsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLSZndDt6b25lX3BnZGF0OwogCWludCBuaWQgPSBwZ2RhdC0mZ3Q7bm9kZV9pZDsKIAotCWNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTsKLQogCWlmICh6b25lX2lzX2VtcHR5KHpvbmUpKQogCQlpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCXJlc2l6ZV96b25lX3JhbmdlKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwpAQCAtNzc1LDggJiM0Mzs3NTcsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCW1lbW1hcF9pbml0X3JhbmdlKG5yX3BhZ2VzLCBuaWQsIHpvbmVfaWR4KHpvbmUpLCBzdGFydF9wZm4sIDAsCiAJCQkgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLAogCQkJIGlzb2xhdGVfcGFnZWJsb2NrKTsKLQotCXNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiB9CiAKIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMgewpAQCAtMTA3Miw2ICYjNDM7MTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsCiAJaWYgKGVhcmx5X3NlY3Rpb24oX19wZm5fdG9fc2VjdGlvbihwYWdlX3RvX3BmbihwYWdlKSkpKQogCQl6b25lLSZndDtwcmVzZW50X2Vhcmx5X3BhZ2VzICYjNDM7PSBucl9wYWdlczsKIAl6b25lLSZndDtwcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlczsKJiM0MzsJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBucl9wYWdlczsKIAl6b25lLSZndDt6b25lX3BnZGF0LSZndDtub2RlX3ByZXNlbnRfcGFnZXMgJiM0Mzs9IG5yX3BhZ2VzOwogCiAJaWYgKGdyb3VwICZhbXA7JmFtcDsgbW92YWJsZSkKZGlmZiAtLWdpdCBhL21tL21tX2luaXQuYyBiL21tL21tX2luaXQuYwppbmRleCBmMWFmZTAyM2U0ZTcyLi5kNjNlZTU1NGQ3ZWI4IDEwMDY0NAotLS0gYS9tbS9tbV9pbml0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbW1faW5pdC5jCkBAIC03OTksNiAmIzQzOzc5OSwyOCBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAJX19pbml0X2RlZmVycmVkX3BhZ2UocGZuLCBuaWQpOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUAomIzQzO3N0YXRpYyBib29sIF9faW5pdCB1bmF2YWlsYWJsZV9wZm5faXNfb25saW5lKHVuc2lnbmVkIGxvbmcgcGZuLAomIzQzOwkJCQkJICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sCiYjNDM7CQkJCQkgICAgIGJvb2wgKmlzX29ubGluZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3Vic2VjdGlvbiA9IHBmbiAmYW1wOyBQQUdFX1NVQlNFQ1RJT05fTUFTSzsKJiM0MzsKJiM0MzsJaWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikgewomIzQzOwkJKmlzX29ubGluZSA9ICEhcGZuX3RvX29ubGluZV9wYWdlKHBmbik7CiYjNDM7CQkqbGFzdF9zdWJzZWN0aW9uID0gc3Vic2VjdGlvbjsKJiM0MzsJfQomIzQzOwlyZXR1cm4gKmlzX29ubGluZTsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLAomIzQzOwkJCQkJICAgICBib29sICppc19vbmxpbmUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogT25seSBzdHJ1Y3QgcGFnZXMgdGhhdCBjb3JyZXNwb25kIHRvIHJhbmdlcyBkZWZpbmVkIGJ5IG1lbWJsb2NrLm1lbW9yeQogICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmcKQEAgLTgyMiwyMiAmIzQzOzg0NCwyNyBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpCiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdAogICogICBzZWN0aW9uIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgem9uZS9ub2RlIGJlbG93LgogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBlcGZuLAotCQkJCQkgIGludCB6b25lLCBpbnQgbm9kZSkKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sCiYjNDM7CQkJCQkJICAgdW5zaWduZWQgbG9uZyBlcGZuLAomIzQzOwkJCQkJCSAgIGludCB6b25lLCBpbnQgbm9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQl1NjQgcGdjbnQgPSAwOwomIzQzOwl1NjQgcGdjbnQgPSAwLCBvbmxpbmVfcGdjbnQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIGxhc3Rfc3Vic2VjdGlvbiA9IC0xOwomIzQzOwlib29sIGlzX29ubGluZSA9IGZhbHNlOwogCiAJZm9yX2VhY2hfdmFsaWRfcGZuKHBmbiwgc3BmbiwgZXBmbikgewogCQlfX2luaXRfc2luZ2xlX3BhZ2UocGZuX3RvX3BhZ2UocGZuKSwgcGZuLCB6b25lLCBub2RlKTsKIAkJX19TZXRQYWdlUmVzZXJ2ZWQocGZuX3RvX3BhZ2UocGZuKSk7CiYjNDM7CQlpZiAodW5hdmFpbGFibGVfcGZuX2lzX29ubGluZShwZm4sICZhbXA7bGFzdF9zdWJzZWN0aW9uLCAmYW1wO2lzX29ubGluZSkpCiYjNDM7CQkJb25saW5lX3BnY250JiM0MzsmIzQzOzsKIAkJcGdjbnQmIzQzOyYjNDM7OwogCX0KIAogCWlmIChwZ2NudCkKIAkJcHJfaW5mbygmIzM0O09uIG5vZGUgJWQsIHpvbmUgJXM6ICVsbGQgcGFnZXMgaW4gdW5hdmFpbGFibGUgcmFuZ2VzXG4mIzM0OywKIAkJCW5vZGUsIHpvbmVfbmFtZXNbem9uZV0sIHBnY250KTsKJiM0MzsJcmV0dXJuIG9ubGluZV9wZ2NudDsKIH0KIAogLyoKQEAgLTkzNCw5ICYjNDM7OTYxLDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLAogCiAJbWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sCiAJCQkgIHpvbmVfZW5kX3BmbiwgTUVNSU5JVF9FQVJMWSwgTlVMTCwgbXQsIGZhbHNlKTsKJiM0MzsJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBlbmRfcGZuIC0gc3RhcnRfcGZuOwomIzQzOwomIzQzOwlpZiAoKmhvbGVfcGZuICZsdDsgc3RhcnRfcGZuKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuOwomIzQzOwkJdW5zaWduZWQgbG9uZyBwZ2NudDsKIAotCWlmICgqaG9sZV9wZm4gJmx0OyBzdGFydF9wZm4pCi0JCWluaXRfdW5hdmFpbGFibGVfcmFuZ2UoKmhvbGVfcGZuLCBzdGFydF9wZm4sIHpvbmVfaWQsIG5pZCk7CiYjNDM7CQlpZiAoaG9sZV9zdGFydF9wZm4gJmx0OyB6b25lX3N0YXJ0X3BmbikgewomIzQzOwkJCWluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHpvbmVfc3RhcnRfcGZuLAomIzQzOwkJCQkJICAgICAgIHpvbmVfaWQsIG5pZCk7CiYjNDM7CQkJaG9sZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjsKJiM0MzsJCX0KJiM0MzsJCXBnY250ID0gaW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgc3RhcnRfcGZuLAomIzQzOwkJCQkJICAgICAgIHpvbmVfaWQsIG5pZCk7CiYjNDM7CQl6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXAgJiM0Mzs9IHBnY250OwomIzQzOwl9CiAKIAkqaG9sZV9wZm4gPSBlbmRfcGZuOwogfQpAQCAtMjE5NSwyOCAmIzQzOzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCiB9CiAjZW5kaWYKIAotdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQotewotCXVuc2lnbmVkIGxvbmcgYmxvY2tfc3RhcnRfcGZuID0gem9uZS0mZ3Q7em9uZV9zdGFydF9wZm47Ci0JdW5zaWduZWQgbG9uZyBibG9ja19lbmRfcGZuOwotCi0JYmxvY2tfZW5kX3BmbiA9IHBhZ2VibG9ja19lbmRfcGZuKGJsb2NrX3N0YXJ0X3Bmbik7Ci0JZm9yICg7IGJsb2NrX3N0YXJ0X3BmbiAmbHQ7IHpvbmVfZW5kX3Bmbih6b25lKTsKLQkJCWJsb2NrX3N0YXJ0X3BmbiA9IGJsb2NrX2VuZF9wZm4sCi0JCQkgYmxvY2tfZW5kX3BmbiAmIzQzOz0gcGFnZWJsb2NrX25yX3BhZ2VzKSB7Ci0KLQkJYmxvY2tfZW5kX3BmbiA9IG1pbihibG9ja19lbmRfcGZuLCB6b25lX2VuZF9wZm4oem9uZSkpOwotCi0JCWlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLAotCQkJCQkgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKQotCQkJcmV0dXJuOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0KLQkvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqLwotCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSB0cnVlOwotfQotCiAvKgogICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZQogICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXMKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDgyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFNjb3BlKioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3Mgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcgYXR0ZW50aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdHBsdWcsIHdoaWNoIGFsd2F5cyByYWlzZXMgYSBmbGFnLgoKTGV0JiMzOTtzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXM6IEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyB0aGUgdHJhY2tpbmcgb2YgY29udGlndW91cyBtZW1vcnkgem9uZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIGNhbGN1bGF0aW9uIG9mIGB6b25lLSZndDtjb250aWd1b3VzYC4gSW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBwYWdlYmxvY2tzLCBpdCYjMzk7cyBub3cgdXNpbmcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgYW5kIGludHJvZHVjaW5nIGB6b25lX2lzX2NvbnRpZ3VvdXMoKWAsIGBzZXRfem9uZV9jb250aWd1b3VzKClgLCBhbmQgYGNsZWFyX3pvbmVfY29udGlndW91cygpYCB3aGljaCBpcyBtb3JlIGVmZmljaWVudCwgZXNwZWNpYWxseSBpbiBsYXJnZXIgem9uZXMuCgpTcGVjaWZpY2FsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG86CgoqICAgYGluY2x1ZGUvbGludXgvbW16b25lLmhgOiBEZWZpbmluZyB0aGUgbmV3IGRhdGEgYW5kIGZ1bmN0aW9ucy4KKiAgIGBtbS9pbnRlcm5hbC5oYDogUmVwbGFjaW5nIHNvbWUgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlIG5ldyBoZWxwZXIgZnVuY3Rpb25zLgoqICAgYG1tL21lbW9yeV9ob3RwbHVnLmNgOiBVcGRhdGluZyBzb21lIG9mIHRoZSBob3RwbHVnIHJvdXRpbmVzIGFuZCBpbnRyb2R1Y2luZyBoZWxwZXIgZnVuY3Rpb25zLgoqICAgYG1tL21tX2luaXQuY2A6IEluaXRpYWxpemluZyB0aGluZ3MgZm9yIGhvdHBsdWcgd2l0aCB0aGlzIHVwZGF0ZWQgaW1wbGVtZW50YXRpb24uCiogICBgZHJpdmVycy9iYXNlL21lbW9yeS5jYDogQW5kIGltcG9ydGFudGx5LCBjaGFuZ2luZyBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAsIHdoaWNoIGFyZSBzeXNmcyBleHBvc2VkLCBzbyBpbnRlcmVzdGluZy4KClRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IGNvbnRpZ3VvdXMgbWVtb3J5IGlzIG1hbmFnZWQuIEl0JiMzOTtzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYWltZWQgYXQgcGVyZm9ybWFuY2UsIHRoYXQgaXMgd29ydGggYW5hbHl6aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhcyBldmVuIHBlcmZvcm1hbmNlLXJlbGF0ZWQgY2hhbmdlcyBjYW4gaGF2ZSBzdWJ0bGUgZWZmZWN0cyBvbiB0aGUgc3lzdGVtJiMzOTtzIGJlaGF2aW9yLiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEtWTSwgb3IgZXZlbiBBQ1BJIG1lbW9yeSBob3RwbHVnIG9yIHZpcnRpby1tZW0uCgpUaGUgYG1tX2luaXQuY2AgY2hhbmdlcyBtZWFuIHRoaXMgd2lsbCBhbHNvIGJlIGV4ZWN1dGVkIGF0IGJvb3QgdGltZSwgYW5kIHRoYXQmIzM5O3Mgc29tZXRoaW5nIGVsc2UgdG8ga2VlcCBpbiBtaW5kLgoKTXkgdGhvdWdodCBwcm9jZXNzIGlzOiB3aGF0IHBhcnRzIGFyZSBtb3N0IGludGVyZXN0aW5nIHRvIGxvb2sgYXQ/CgpgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgYXJlIHRyaWdnZXJlZCB2aWEgc3lzZnMsIG1ha2luZyB0aGVtIHByaW1lIGZ1enppbmcgdGFyZ2V0cyBkdWUgdG8gdGhlaXIgZXh0ZXJuYWwgaW50ZXJmYWNlLiBBbHNvLCBgX19hZGRfcGFnZXNgIGFuZCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGFuZCBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAsIHVzZWQgaW4gbWVtb3J5IGhvdHBsdWcuIExldCYjMzk7cyBzZWUgaWYgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIHNldDsgc2luY2UgdGhpcyBpcyBrZXJuZWwsIGl0JiMzOTtzIHByb2JhYmx5IGFsbW9zdCBhbHdheXMgZW5hYmxlZCBmb3IgZnV6emluZyBrZXJuZWxzLgoKTm93LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgbWVtb3J5X2Jsb2NrX29ubGluZWAuIFNpbmNlIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgY2FsbGluZyBjb250ZXh0cyBhcmUgbGltaXRlZCwgYnV0IGZpbmRpbmcgdGhlbSBpcyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9ibG9ja19vbmxpbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jPTIxNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWVtYmxrX25yX3BvaXNvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyMy0gKi9cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyMjQ6c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yMjUte1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zMzE9bWVtb3J5X2Jsb2NrX2FjdGlvbihzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0sIHVuc2lnbmVkIGxvbmcgYWN0aW9uKVxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzYtXHRjYXNlIE1FTV9PTkxJTkU6XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzM3Olx0XHRyZXQgPSBtZW1vcnlfYmxvY2tfb25saW5lKG1lbSk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzM4LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgTWVtb3J5IFN1YnN5c3RlbSBPbmxpbmUgVHJpZ2dlcioqCgpSaWdodCwgc28gYG1lbW9yeV9ibG9ja19hY3Rpb25gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIHVsdGltYXRlbHkgYmVpbmcgY2FsbGVkIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGtleSBvcGVyYXRpb24uIEFuZCB3aGVyZSYjMzk7cyBpdCBjb21pbmcgZnJvbT8gQWgsIGl0JiMzOTtzIGJlaW5nIHRyaWdnZXJlZCB2aWEgYG1lbW9yeV9zdWJzeXNfb25saW5lYC4gSW50ZXJlc3RpbmcuIGBtZW1vcnlfc3Vic3lzX29ubGluZWAgaXRzZWxmIGlzIGluaXRpYXRlZCBieSBhIHN5c2ZzIGV2ZW50LgoKU28sIHRoZSBjYXVzYWwgY2hhaW4gaXM6IHN5c2ZzIGV2ZW50IC0mZ3Q7IGBtZW1vcnlfc3Vic3lzX29ubGluZWAgLSZndDsgYG1lbW9yeV9ibG9ja19hY3Rpb25gLiBHaXZlbiB0aGF0LCBteSBmb2N1cyBub3cgbmVlZHMgdG8gYmUgb24gYG1lbW9yeV9zdWJzeXNfb25saW5lYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoYXQqIGl0JiMzOTtzIGRvaW5nLCAqd2h5KiBpdCYjMzk7cyBkb2luZyBpdCwgYW5kICpob3cqIHRoYXQgcmVsYXRlcyB0byB0aGUgc3lzZnMgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJcyB0aGlzIGEgaG90cGx1ZyBzY2VuYXJpbz8gRHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbj8gV2hhdCYjMzk7cyB0aGUgY29udGV4dD8gTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYG1lbW9yeV9zdWJzeXNfb25saW5lYCBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgb25saW5lIHByb2NlZHVyZSB0byBiZSBhYmxlIHRvIHByZWRpY3Qgd2hhdCBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAgd2lsbCBldmVudHVhbGx5IGRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9zdWJzeXNfb25saW5lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYz01Mz1FWFBPUlRfU1lNQk9MKHNlY3Rpb25zX3Blcl9ibG9jayk7XG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNTQtXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NTU6c3RhdGljIGludCBtZW1vcnlfc3Vic3lzX29ubGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xuZHJpdmVycy9iYXNlL21lbW9yeS5jLTU2LXN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vZmZsaW5lKHN0cnVjdCBkZXZpY2UgKmRldik7XG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbWVtb3J5X3N1YnN5cyA9IHtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtNjAtXHQuZGV2X25hbWUgPSBNRU1PUllfQ0xBU1NfTkFNRSxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzo2MTpcdC5vbmxpbmUgPSBtZW1vcnlfc3Vic3lzX29ubGluZSxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02Mi1cdC5vZmZsaW5lID0gbWVtb3J5X3N1YnN5c19vZmZsaW5lLFxuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zNTE9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfY2hhbmdlX3N0YXRlKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSxcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzY4LS8qIFRoZSBkZXZpY2UgbG9jayBzZXJpYWxpemVzIG9wZXJhdGlvbnMgb24gbWVtb3J5X3N1YnN5c19bb25saW5lfG9mZmxpbmVdICovXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzY5OnN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vbmxpbmUoc3RydWN0IGRldmljZSAqZGV2KVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTM3MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ0MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlOgoKKipJbnZlc3RpZ2F0aW5nIGEgU3lzdGVtIFRyaWdnZXIqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgdGhhdCYjMzk7cyB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcyDigJMgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEJ1dCwgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHNwZWNpZmljIGZ1bmN0aW9uOiBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgdGhlIG1lY2hhbmlzbSBiZWluZyB1c2VkLCBvciBpZiBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHRyaWdnZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHN5c2ZzLCBvciBpZiBpdCYjMzk7cyBldmVuIHBhcnQgb2YgdGhlIGN1cnJlbnQgcHJvYmxlbS4gUGVyaGFwcyB0aGUgcXVlc3Rpb24gaXNuJiMzOTt0IHdoZXRoZXIgaXQmIzM5O3MgcmVsYXRlZCwgYnV0IGhvdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NzExPXN0YXRpYyBpbmxpbmUgdm9pZCBzZWN0aW9uX3RhaW50X3pvbmVfZGV2aWNlKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI0LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzo3MjU6dm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA2ND1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNzMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNzQ6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfVU5NT1ZBQkxFLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDc1LVx0XHRcdCAgICAgICBmYWxzZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTQ1LVx0LyogYXNzb2NpYXRlIHBmbiByYW5nZSB3aXRoIHRoZSB6b25lICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjExNDY6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE0Ny1cdFx0XHQgICAgICAgdHJ1ZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTY2PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3MS1cdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJiMzOTt0XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxNzI6XHQgKiBvZmZsaW5lIGl0LiBBIG5vZGUgc3BhbnMgbWVtb3J5IGFmdGVyIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoKSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3My1cdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yMjgtXHRcdHpvbmUgPSBcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXTtcbm1tL21lbXJlbWFwLmM6MjI5Olx0XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbm1tL21lbXJlbWFwLmMtMjMwLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2VfbGVuKHJhbmdlKSksIHBhcmFtcy1cdTAwM2VhbHRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNjkKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxMDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVudGFsIFdhbGt0aHJvdWdoIG9mIE1lbW9yeSBIb3RwbHVnIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBtZW1vcnkgaG90cGx1ZyBpbXBsZW1lbnRhdGlvbi4gSSBzZWUgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGJlaW5nIGNhbGxlZCDigJMgdGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgb2J2aW91c2x5IOKAkyBhbmQgaXQgbG9va3MgbGlrZSB0aGUgbWFpbiBwYXRocyB0byBpdCBhcmUgdGhyb3VnaCBgb25saW5lX3BhZ2VzYCBhbmQgYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgLiBSaWdodCwgbWFrZXMgc2Vuc2Ugc28gZmFyLiBOb3csIGBvbmxpbmVfcGFnZXNgIGl0c2VsZiBpcyB0cmlnZ2VyZWQgYnkgYG1lbW9yeV9ibG9ja19vbmxpbmVgLiBBaGEhIFRoYXQgdGVsbHMgbWUgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGFuZCBieSBleHRlbnNpb24sIGl0cyBjb3VudGVycGFydCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBhcmUgdGhlIHByaW1hcnkgZW50cnkgcG9pbnRzIGZvciBkZWFsaW5nIHdpdGggdGhpcyB3aG9sZSBob3RwbHVnIGZ1bmN0aW9uYWxpdHkuIEkgbmVlZCB0byBrZWVwIHRob3NlIGluIG1pbmQuIFdhaXQgYSBzZWNvbmQsIGRpZG4mIzM5O3QgSSBub3RpY2UgdGhhdCBgbWVtb3J5X2Jsb2NrX29ubGluZWAgaXMgYWN0dWFsbHkgZGVjbGFyZWQgYXMgYHN0YXRpY2A/IFRoYXQmIzM5O3PigKYgaW50ZXJlc3RpbmcuIEl0IGxpbWl0cyBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSwgZm9yIHN1cmUuIFNvLCB0aGVuIHdoYXQgYWJvdXQgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYD8gSSBuZWVkIHRvIGdvIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGVpciByb2xlIGluIHRoaXMuIEkmIzM5O20gZ29pbmcgdG8gaGF2ZSB0byB0cmFjZSB0aG9zZSBjYWxscyB0byBzZWUgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvbmxpbmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz02MzM9RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19vbmxpbmVfcGFnZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTYzNC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NjM1OnN0YXRpYyB2b2lkIG9ubGluZV9wYWdlc19yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjM2LXtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTkzNz1zdGF0aWMgc3RydWN0IHpvbmUgKmF1dG9fbW92YWJsZV96b25lX2Zvcl9wZm4oaW50IG5pZCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk0MS17XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjk0MjpcdHVuc2lnbmVkIGxvbmcgb25saW5lX3BhZ2VzID0gMCwgbWF4X3BhZ2VzLCBlbmRfcGZuO1xubW0vbWVtb3J5X2hvdHBsdWcuYy05NDMtXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk0OS1cdFx0bWF4X3BhZ2VzID0gZ3JvdXAtXHUwMDNlcy5tYXhfcGFnZXM7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjk1MDpcdFx0b25saW5lX3BhZ2VzID0gZ3JvdXAtXHUwMDNlcHJlc2VudF9tb3ZhYmxlX3BhZ2VzO1xubW0vbWVtb3J5X2hvdHBsdWcuYy05NTEtXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy05NzMtXHRcdFx0XHRnb3RvIGtlcm5lbF96b25lO1xubW0vbWVtb3J5X2hvdHBsdWcuYzo5NzQ6XHRcdFx0b25saW5lX3BhZ2VzICYjNDM7PSBQQUdFU19QRVJfU0VDVElPTjtcbm1tL21lbW9yeV9ob3RwbHVnLmMtOTc1LVx0XHR9XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy05ODItXHQgKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6OTgzOlx0bnJfcGFnZXMgPSBtYXhfcGFnZXMgLSBvbmxpbmVfcGFnZXM7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk4NC1cdGlmICghYXV0b19tb3ZhYmxlX2Nhbl9vbmxpbmVfbW92YWJsZShOVU1BX05PX05PREUsIGdyb3VwLCBucl9wYWdlcykpXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDk1PXZvaWQgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExNy0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTExODppbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTE5LVx0XHQgICAgICAgc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4MC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MTpcdG9ubGluZV9wYWdlc19yYW5nZShwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4Mi1cdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMjItZmFpbGVkX2FkZGl0aW9uOlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjIzOlx0cHJfZGVidWcoXCYjMzQ7b25saW5lX3BhZ2VzIFttZW0gJSMwMTBsbHgtJSMwMTBsbHhdIGZhaWxlZFxcblwmIzM0Oyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyNC1cdFx0ICh1bnNpZ25lZCBsb25nIGxvbmcpIHBmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE0NzU9aW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NTMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NTQ6XHQvKiBkZXZpY2Vfb25saW5lKCkgd2lsbCB0YWtlIHRoZSBsb2NrIHdoZW4gY2FsbGluZyBvbmxpbmVfcGFnZXMoKSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTU1LVx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg4Mz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE5MTYtXHQgKiBDb25zZXF1ZW50bHksIG1lbW9yeSBibG9ja3Mgd2l0aCBob2xlcyBjYW4gbmV2ZXIgZ2V0IG9ubGluZWRcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTkxNzpcdCAqIHZpYSB0aGUgaG90cGx1ZyBwYXRoIC0gb25saW5lX3BhZ2VzKCkgLSBhcyBob3RwbHVnZ2VkIG1lbW9yeSBoYXNcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTkxOC1cdCAqIG5vIGhvbGVzLiBUaGlzIHdheSwgd2UgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgbWVtb3J5IGhvbGVzLFxuLS1cbm1tL21tX2luaXQuYz0xNTIzPXZvaWQgX19yZWYgZnJlZV9hcmVhX2luaXRfY29yZV9ob3RwbHVnKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vbW1faW5pdC5jLTE1NTQtXHQgKiBjbGVhciBhbGwgem9uZXMmIzM5OyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXG5tbS9tbV9pbml0LmM6MTU1NTpcdCAqIGJlIHVwZGF0ZWQgaW4gb25saW5lX3BhZ2VzKCkgYW5kIG9mZmxpbmVfcGFnZXMoKS5cbm1tL21tX2luaXQuYy0xNTU2LVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzM1CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQ29uc2lkZXJpbmcgU3RhdGljIENvbnRlbnQgJmFtcDsgRXhwb3J0ZWQgRGF0YSoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgaGFuZGxpbmcgdGhlIHByZXNlbnRhdGlvbiBvZiBvdXIgZGF0YS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgZXhwb3J0ZWQsIG9yIG5vbi1zdGF0aWMsIGNvbXBvbmVudHMgcmVwcmVzZW50ZWQgYnkgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nJiMzOTtzIHByb3Blcmx5IGFjY291bnRlZCBmb3IsIGFuZCB0aGF0IHRoZSBleHBvcnQgcHJvY2VzcyBpcyByb2J1c3QuIFNpbmNlIGJvdGggYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYCBhcmUgbm9uLXN0YXRpYyBhbmQgcHJvYmFibHkgY29udGFpbiB1c2VmdWwgaW5mb3JtYXRpb24sIEkgc2hvdWxkIGNoZWNrIG9uIHRoZSBgb2ZmbGluZV9wYWdlc2AgY29tcG9uZW50IGFzIHdlbGwuIExldCYjMzk7cyBtYWtlIHN1cmUgaXTigJlzIGhhbmRsZWQganVzdCBhcyBjYXJlZnVsbHkgYXMgdGhlIG9ubGluZSBjb21wb25lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxpbmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz01Mjg9dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU2Ny0gKiBzdXJlIHRoYXQgcGFnZXMgYXJlIG1hcmtlZCByZXNlcnZlZCBhbmQgem9uZXMgYXJlIGFkanVzdCBwcm9wZXJseSBieVxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Njg6ICogY2FsbGluZyBvZmZsaW5lX3BhZ2VzKCkuXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU2OS0gKi9cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4NzE9c3RhdGljIGludCBjb3VudF9zeXN0ZW1fcmFtX3BhZ2VzX2NiKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg4Mi0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTg4MzppbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTg4NC1cdFx0XHRzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXApXG4tLVxubW0vbW1faW5pdC5jPTE1MjM9dm9pZCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS9tbV9pbml0LmMtMTU1NC1cdCAqIGNsZWFyIGFsbCB6b25lcyYjMzk7IHByZXNlbnRfcGFnZXMgYW5kIG1hbmFnZWRfcGFnZXMgYmVjYXVzZSB0aGV5IHdpbGxcbm1tL21tX2luaXQuYzoxNTU1Olx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxubW0vbW1faW5pdC5jLTE1NTYtXHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyNzUKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgY2FuZGlkYXRlcyBmb3IgZnV6emluZzoKCioqTXkgRnV6emluZyBUYXJnZXQgQnJhaW5zdG9ybSoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gVGhpbmtpbmcgYWJvdXQgZnV6emluZyB0aGlzIHN5c3RlbSwgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYCBsb29rIGxpa2UgcHJpbWUgcmVhbCBlc3RhdGUgZm9yIGF0dGFjay4gVGhlc2UgYXJlIHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cyB3aGVyZSBkYXRhIGludGVyYWN0aW9uIGlzIGxpa2VseS4gQmV5b25kIHRob3NlLCBJJiMzOTttIGFsc28gZXllaW5nIG1ldGhvZHMgbGlrZSBgX19hZGRfcGFnZXNgIGFuZCBgX19yZW1vdmVfcGFnZXNgLiBUaG9zZSBpbnRlcm5hbCBmdW5jdGlvbnMgY291bGQgYmUgc3VzY2VwdGlibGUgdG8gYnVmZmVyIG92ZXJmbG93cyBvciB1bmV4cGVjdGVkIGlucHV0IHNjZW5hcmlvcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19hZGRfcGFnZXNgIGZpcnN0OyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2FkZF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTM3OT1FWFBPUlRfU1lNQk9MX0dQTChwZm5fdG9fb25saW5lX3BhZ2UpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0zODAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjM4MTppbnQgX19hZGRfcGFnZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTM4Mi1cdFx0c3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1OTcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczoKCioqQ2hlY2tpbmcgdGhlIFBhZ2UgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgc28gYF9fYWRkX3BhZ2VzYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiBUaGF0IGNvbmZpcm1zIGl0cyBpbnRlbmRlZCB1c2UgYW5kIGFjY2Vzc2liaWxpdHkuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSBpdHMgY291bnRlcnBhcnQuIExldCYjMzk7cyBtb3ZlIG9uIHRvIGNoZWNraW5nIHRoZSBhdmFpbGFiaWxpdHkgYW5kIGZ1bmN0aW9uYWxpdHkgb2YgYF9fcmVtb3ZlX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvbXBsZXRlIGFuZCBzeW1tZXRyaWMgaW4gaXRzIHBhZ2UgbWFuaXB1bGF0aW9uIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHN5c3RlbSByZWxpYWJpbGl0eSBhbmQgcHJlZGljdGFibGUgYmVoYXZpb3IuIExldCYjMzk7cyBzZWUgaWYgYF9fcmVtb3ZlX3BhZ2VzYCBpcyBhbHNvIGV4cG9ydGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSYjMzk7cyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmVtb3ZlX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NTI4PXZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01NTgtLyoqXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU1OTogKiBfX3JlbW92ZV9wYWdlcygpIC0gcmVtb3ZlIHNlY3Rpb25zIG9mIHBhZ2VzXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU2MC0gKiBAcGZuOiBzdGFydGluZyBwYWdlZnJhbWUgKG11c3QgYmUgYWxpZ25lZCB0byBzdGFydCBvZiBhIHNlY3Rpb24pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy01NjktICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjU3MDp2b2lkIF9fcmVtb3ZlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NzEtXHRcdCAgICBzdHJ1Y3Qgdm1lbV9hbHRtYXAgKmFsdG1hcCwgc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcClcbi0tXG5tbS9tZW1yZW1hcC5jPTg2PXN0YXRpYyB2b2lkIHBhZ2V1bm1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBpbnQgcmFuZ2VfaWQpXG4tLVxubW0vbWVtcmVtYXAuYy05OC1cdGlmIChwZ21hcC1cdTAwM2V0eXBlID09IE1FTU9SWV9ERVZJQ0VfUFJJVkFURSkge1xubW0vbWVtcmVtYXAuYzo5OTpcdFx0X19yZW1vdmVfcGFnZXMoUEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxubW0vbWVtcmVtYXAuYy0xMDAtXHRcdFx0ICAgICAgIFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpLCBOVUxMLCBwZ21hcCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDk2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gYF9fcmVtb3ZlX3BhZ2VzYCBpcyBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGtleSBmb3IgYSBzcGVjaWZpYyB0eXBlIG9mIG1lbW9yeSByZWNsYW1hdGlvbi4gQnV0IG5vdyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHJlbGF0ZWQgb3BlcmF0aW9uc+KApiB3aGF0IGFib3V0IGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBhbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYD8gVGhleSYjMzk7cmUgY2xlYXJseSBpbnRlbmRlZCBmb3IgbWFuaXB1bGF0aW5nIHBhZ2UgZnJhbWUgbnVtYmVycyAoUEZOcykgYW5kIHRoZWlyIGFsbG9jYXRpb24gc3RhdHVzIHdpdGhpbiBkaWZmZXJlbnQgbWVtb3J5IHpvbmVzLiBBcmUgdGhvc2UgZXhwb3J0ZWQgYXMgd2VsbD8gSSBjYW4gc2VlIGEgZmV3IHVzZS1jYXNlcyBmb3IgdGhhdCwgYW5kIGl0IHdvdWxkIHJlYWxseSBvcGVuIHVwIHNvbWUgcG9zc2liaWxpdGllcy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnQgdGFibGVzLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIGluIHNvbWUgaGlnaGVyLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGV5IG9ubHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzYWdlIHdpdGhpbiB0aGUga2VybmVsLCBvciBhcmUgdGhleSBwb3RlbnRpYWxseSB1c2VkIGJ5IHNvbWUgZHJpdmVycyB0b28/IEkgd2FudCB0byBkZXRlcm1pbmUgdGhlaXIgYXZhaWxhYmlsaXR5LiBJdCBzZWVtcyB0aGVpciBleHBvc3VyZSBkaWN0YXRlcyBhIGxvdCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NzExPXN0YXRpYyBpbmxpbmUgdm9pZCBzZWN0aW9uX3RhaW50X3pvbmVfZGV2aWNlKHVuc2lnbmVkIGxvbmcgcGZuKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI0LSAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzo3MjU6dm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA2ND1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNzMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNzQ6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfVU5NT1ZBQkxFLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDc1LVx0XHRcdCAgICAgICBmYWxzZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTQ1LVx0LyogYXNzb2NpYXRlIHBmbiByYW5nZSB3aXRoIHRoZSB6b25lICovXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjExNDY6XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE0Ny1cdFx0XHQgICAgICAgdHJ1ZSk7XG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTY2PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3MS1cdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJiMzOTt0XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxNzI6XHQgKiBvZmZsaW5lIGl0LiBBIG5vZGUgc3BhbnMgbWVtb3J5IGFmdGVyIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoKSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE3My1cdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXG4tLVxubW0vbWVtcmVtYXAuYz0xNDQ9c3RhdGljIGludCBwYWdlbWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMsXG4tLVxubW0vbWVtcmVtYXAuYy0yMjgtXHRcdHpvbmUgPSBcdTAwMjZOT0RFX0RBVEEobmlkKS1cdTAwM2Vub2RlX3pvbmVzW1pPTkVfREVWSUNFXTtcbm1tL21lbXJlbWFwLmM6MjI5Olx0XHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIFBIWVNfUEZOKHJhbmdlLVx1MDAzZXN0YXJ0KSxcbm1tL21lbXJlbWFwLmMtMjMwLVx0XHRcdFx0UEhZU19QRk4ocmFuZ2VfbGVuKHJhbmdlKSksIHBhcmFtcy1cdTAwM2VhbHRtYXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDA4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipFeGFtaW5pbmcgUEZOIFJhbmdlIE1hbmFnZW1lbnQqKgoKT2theSwgc28gYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGlzbiYjMzk7dCBhIHN5bWJvbCBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIHRoZSBrZXJuZWwgbW9kdWxlLiBUaGF0JiMzOTtzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSBzaG93c3RvcHBlci4gV2hhdCBJICpyZWFsbHkqIG5lZWQgdG8gdW5kZXJzdGFuZCBpcyBob3cgbWVtb3J5IHJhbmdlcyBhcmUgYmVpbmcgbWFuYWdlZCBhdCB0aGUgem9uZSBsZXZlbCwgd2hpY2ggaXMgd2h5IHRoaXMgY2FtZSB0byBtaW5kIGluIHRoZSBmaXJzdCBwbGFjZSwgYW5kIHdoeSBJIHdhbnRlZCB0byBzdHVkeSB0aGlzIGZ1bmN0aW9uIGNhbGwsIG5vdyB1bmF2YWlsYWJsZSB0byBtZS4KClNpbmNlIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpcyBpbmFjY2Vzc2libGUsIGxldCYjMzk7cyBwaXZvdCBhbmQgbG9vayBhdCBpdHMgcG90ZW50aWFsIGNvdW50ZXJwYXJ0IGZ1bmN0aW9uLiBUaGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGRpZyBpcyBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLiBJdCYjMzk7cyBsaWtlbHkgdGhhdCBhIHBhaXJlZCBmdW5jdGlvbiBsaWtlIHRoaXMgZXhpc3RzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGUgcmV2ZXJzZSBvcGVyYXRpb24gd2lsbCBwcm92aWRlIGNyaXRpY2FsIGNvbnRleHQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBvbmUgaXMgZXhwb3NlZCwgYW5kIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IGl0cyBpbXBsZW1lbnRhdGlvbi4gVGhpcyBjb3VsZCBpbGx1bWluYXRlIHRoZSBsYXJnZXIgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTUwMD1zdGF0aWMgdm9pZCB1cGRhdGVfcGdkYXRfc3BhbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtNTI3LVxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Mjg6dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTI5LVx0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDk1PXZvaWQgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExMC1cdCAqL1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxMTExOlx0cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUocGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpLCBwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExMi1cdGthc2FuX3JlbW92ZV96ZXJvX3NoYWRvdyhfX3ZhKFBGTl9QSFlTKHBmbikpLCBQRk5fUEhZUyhucl9wYWdlcykpO1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTExOD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyOC1cdFx0bm9kZV9ub3RpZnkoTk9ERV9DQU5DRUxfQURESU5HX0ZJUlNUX01FTU9SWSwgXHUwMDI2bm9kZV9hcmcpO1xubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjI5Olx0cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoem9uZSwgcGZuLCBucl9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMzAtXHRyZXR1cm4gcmV0O1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg4Mz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIwODAtXHRtZW1vcnlfbm90aWZ5KE1FTV9PRkZMSU5FLCBcdTAwMjZtZW1fYXJnKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA4MTpcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDgyLVx0cmV0dXJuIDA7XG4tLVxubW0vbWVtcmVtYXAuYz04Nj1zdGF0aWMgdm9pZCBwYWdldW5tYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IHJhbmdlX2lkKVxuLS1cbm1tL21lbXJlbWFwLmMtOTUtXHRtZW1faG90cGx1Z19iZWdpbigpO1xubW0vbWVtcmVtYXAuYzo5NjpcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHBhZ2Vfem9uZShmaXJzdF9wYWdlKSwgUEhZU19QRk4ocmFuZ2UtXHUwMDNlc3RhcnQpLFxubW0vbWVtcmVtYXAuYy05Ny1cdFx0XHRcdCAgIFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5MzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGNvZGUgdGFyZ2V0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBIb3RwbHVnIE9wdGltaXphdGlvbiBQb2ludHMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCBpbXByb3ZpbmcgbWVtb3J5IGhvdHBsdWcgaGFuZGxpbmcuIEltbWVkaWF0ZWx5LCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgYW5kIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAgYXJlIHN0YW5kaW5nIG91dCBhcyBwcmltZSBjYW5kaWRhdGVzLiBUaGV5JiMzOTtyZSBjbGVhcmx5IGF0IHRoZSBjb3JlIG9mIG1hbmlwdWxhdGluZyBtZW1vcnkgcmVnaW9ucywgYW5kIGFueSBlZmZpY2llbmN5IGdhaW5zIHRoZXJlIHdvdWxkIGJlIHNpZ25pZmljYW50LiBJJiMzOTttIGFsc28gYWRkaW5nIGBvbmxpbmVfcGFnZXNgIGFuZCBgb2ZmbGluZV9wYWdlc2AgdG8gdGhlIG1peCDigJMgdGhlc2UgYXJlIGxpa2VseSBpbnZvbHZlZCBpbiB0aGUgc3RhdGUgdHJhbnNpdGlvbnMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIHRoZSBob3RwbHVnIHByb2Nlc3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSByb3V0aW5lcyBpbnRlcmFjdCBhbmQgd2hlcmUgdGhlIGJvdHRsZW5lY2tzIG1pZ2h0IGxpZS4KCk5vdywgYSBrZXkgZmFjdG9yIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLiBJcyBpdCBlbmFibGVkPyBUaGF04oCZcyBteSBzdGFydGluZyBwb2ludC4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIHdpbGwgZGljdGF0ZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggYW5kIHRoZSBzdWJzZXF1ZW50IG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIEkmIzM5O2xsIG5lZWQgdG8gdXNlLiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YgdGhlIGNvbnRleHQgYW5kIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB0aGF0IGNvdWxkIGJlIGltcGFjdGluZyB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcbi0tXG5tbS9LY29uZmlnLTUyMi0jIGV2ZW50dWFsbHksIHdlIGNhbiBoYXZlIHRoaXMgb3B0aW9uIGp1c3QgJiMzOTtzZWxlY3QgU1BBUlNFTUVNJiMzOTtcbm1tL0tjb25maWc6NTIzOm1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWctNTI0LVx0Ym9vbCBcJiMzNDtNZW1vcnkgaG90cGx1Z1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM1MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBmb3IgTWVtb3J5IEhvdHBsdWcqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1PUllfSE9UUExVR2AuIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljIGFuZCBkZXBlbmRlbmNpZXMgZGVmaW5lZCB0aGVyZSDigJMgc3BlY2lmaWNhbGx5LCB3aGljaCBvdGhlciBjb25maWd1cmF0aW9uIHN5bWJvbHMgbmVlZCB0byBiZSBlbmFibGVkIGJlZm9yZSBgTUVNT1JZX0hPVFBMVUdgIGNhbiBiZSBzZWxlY3RlZC4gVGhpcyBpcyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiB0aGlzIGZlYXR1cmUgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIE5VTUEsIEFDUEksIG9yIGFueXRoaW5nIHRoYXQgdG91Y2hlcyBvbiBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBgbW0vS2NvbmZpZ2AgcmV2ZWFscy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDUyMDpcdFx0Ym9vbFxuIDUyMTpcdFxuIDUyMjpcdCMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAmIzM5O3NlbGVjdCBTUEFSU0VNRU0mIzM5O1xuIDUyMzpcdG1lbnVjb25maWcgTUVNT1JZX0hPVFBMVUdcbiA1MjQ6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiA1MjU6XHRcdHNlbGVjdCBNRU1PUllfSVNPTEFUSU9OXG4gNTI2Olx0XHRkZXBlbmRzIG9uIFNQQVJTRU1FTV9WTUVNTUFQXG4gNTI3Olx0XHRkZXBlbmRzIG9uIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4gNTI4Olx0XHRkZXBlbmRzIG9uIDY0QklUXG4gNTI5Olx0XHRzZWxlY3QgTlVNQV9LRUVQX01FTUlORk8gaWYgTlVNQVxuIDUzMDpcdFxuIDUzMTpcdGlmIE1FTU9SWV9IT1RQTFVHXG4gNTMyOlx0XG4gNTMzOlx0Y2hvaWNlXG4gNTM0Olx0XHRwcm9tcHQgXCYjMzQ7TWVtb3J5IEhvdHBsdWcgRGVmYXVsdCBPbmxpbmUgVHlwZVwmIzM0O1xuIDUzNTpcdFx0ZGVmYXVsdCBNSFBfREVGQVVMVF9PTkxJTkVfVFlQRV9PRkZMSU5FXG4gNTM2Olx0XHRoZWxwXG4gNTM3Olx0XHQgIERlZmF1bHQgbWVtb3J5IHR5cGUgZm9yIGhvdHBsdWdnZWQgbWVtb3J5LlxuIDUzODpcdFxuIDUzOTpcdFx0ICBUaGlzIG9wdGlvbiBzZXRzIHRoZSBkZWZhdWx0IHBvbGljeSBzZXR0aW5nIGZvciBtZW1vcnkgaG90cGx1Z1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg1OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEhvdHBsdWcgYW5kIEluaXRpYWxpemF0aW9uIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBNRU1PUllfSE9UUExVR2AsIGFuZCBJIHNob3VsZCBwcm9iYWJseSBhbHNvIGVuYWJsZSBgU1BBUlNFTUVNX1ZNRU1NQVBgIHNpbmNlIGl0JiMzOTtzIGEgZGVwZW5kZW5jeS4gQWN0dWFsbHksIGlzbiYjMzk7dCBgU1BBUlNFTUVNX1ZNRU1NQVBgIHVzdWFsbHkgZW5hYmxlZCBhbnl3YXk/IExldCBtZSBkb3VibGUtY2hlY2suCgpSaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjaGFuZ2VkIGluIGBtbS9tbV9pbml0LmNgLiBBaCwgSSBzZWUgYHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmVgIGlzIHVzZWQgaW4gYGluaXRfdW5hdmFpbGFibGVfcmFuZ2VgLiBBbmQgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBgbWVtbWFwX2luaXRfem9uZV9yYW5nZWAsIHdoaWNoIGluIHR1cm4gZ2V0cyBjYWxsZWQgZnJvbSBgZnJlZV9hcmVhX2luaXRfbm9kZWAgZHVyaW5nIGJvb3QuIE9rYXksIHNvIHRoaXMgY29kZSBpcyBkZWZpbml0ZWx5IGV4ZWN1dGVkIGR1cmluZyBib290IGlmIHRoZXJlIGFyZSB1bmF2YWlsYWJsZSBtZW1vcnkgcmFuZ2VzLCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga25vdy4KClRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IG1lbW9yeSBob3RwbHVnIHdvcmtzLCBhbG9uZ3NpZGUgaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZC4gUmVwbGFjaW5nIHRoZSBvbGQgYHNldF96b25lX2NvbnRpZ3VvdXNgIGNhbGwgd2l0aCBhIHNpbXBsZXIgY2hlY2sgdXNpbmcgYHpvbmUtJmd0O3NwYW5uZWRfcGFnZXMgPT0gem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBkZXRlcm1pbmUgbWVtb3J5IHN0YXRlIGlzIGRlZmluaXRlbHkgYW4gaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9uLiBUaGlzIGlzIHNvbWV0aGluZyB3b3J0aCB0aHJvd2luZyBhIGZ1enplciBhdC4KCkxldCYjMzk7cyBsaXN0IHRoZSBrZXkgc3ltYm9scyBvZiBpbnRlcmVzdC4gSSYjMzk7bSBmb2N1c2luZyBvbjogYG9ubGluZV9wYWdlc2AsIGBvZmZsaW5lX3BhZ2VzYCwgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgX19hZGRfcGFnZXNgLCBhbmQgYF9fcmVtb3ZlX3BhZ2VzYC4KCkkgc2hvdWxkIGNoZWNrIGlmIGBvbmxpbmVfcGFnZXNgIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIGV4cG9ydGVkLiBJcyBgb25saW5lX3BhZ2VzYCBleHBvcnRlZD8gTm8sIGJ1dCBJIGtub3cgYGdlbmVyaWNfb25saW5lX3BhZ2VgIGlzIGV4cG9ydGVkLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qb25saW5lX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1OTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvcmUgcHJvYmxlbSwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbW9tZW50IHRvIHN1cnZleSB0aGUgcmVsZXZhbnQgY29kZWJhc2UuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIGBvZmZsaW5lX3BhZ2VzYC4gR2l2ZW4gdGhlIGNvbnRleHQg4oCTIHdoYXRldmVyIHRoZSB1c2VyJiMzOTtzIGlzc3VlIG1pZ2h0IGJlIOKAkyB0aGlzIGlzIGEgbG9naWNhbCBmaXJzdCBzdGVwLiBPZmZsaW5lIGZ1bmN0aW9uYWxpdHkgaXMgYSBjb21tb24gc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBwZXJzaXN0ZW5jZSwgY2FjaGluZywgb3IgaW50ZXJhY3Rpb25zIHRoYXQgKnNob3VsZCogYmUgYXZhaWxhYmxlIHdoZW4gZGlzY29ubmVjdGVkLiBJdCYjMzk7cyBhIGZvdW5kYXRpb25hbCBtb2R1bGUgYW5kIHVzdWFsbHkgcmV2ZWFscyBmb3VuZGF0aW9uYWwgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvciB3aGVuIG9mZmxpbmUuIEkmIzM5O20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgbWVjaGFuaWNzIG9mIHByb3ZpZGluZywgc3luY2luZywgc3RvcmluZyBhbmQgcmVtb3Zpbmcgb2ZmbGluZSBjb250ZW50LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCBhc3N1bXB0aW9ucyBhcmUgaW1wbGVtZW50ZWQgdGhlcmUsIHNvLCBiZWZvcmUgZXZlbiBjb25zaWRlcmluZyB0aGUgcHJvYmxlbSwgdW5kZXJzdGFuZGluZyB0aGlzIGlzIHRoZSBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLipvZmZsaW5lX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY4MzYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGEgc2Vhc29uZWQgZXhwZXJ0OgoKKipJbnRlcm5hbCBBdWRpdCAmYW1wOyBDb2RlIFJldmlldyoqCgpSaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZW4mIzM5O3QgZXhwbGljaXRseSBleHBvcnRlZCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIFRoYXQgdXN1YWxseSBtZWFucyB0aGV5JiMzOTtyZSBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgbW9kdWxlIG9yIGxpYnJhcnksIG5vdCBmb3IgZGlyZWN0IGV4dGVybmFsIGludGVyYWN0aW9uLiBCdXQsIHRoZSBmYWN0IHRoYXQgdGhleSYjMzk7cmUgZ2xvYmFsIGZ1bmN0aW9ucyByYWlzZXMgYSBmbGFnLiBFdmVuIHdpdGhvdXQgZXhwbGljaXQgZXhwb3J0aW5nLCB0aGVpciBnbG9iYWwgc2NvcGUgbWVhbnMgdGhleSYjMzk7cmUgcG90ZW50aWFsbHkgYWNjZXNzaWJsZSBmcm9tIGFueXdoZXJlIHdpdGhpbiB0aGUgcHJvZ3JhbSYjMzk7cyBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVpciBiZWhhdmlvciBhbmQgaW1wYWN0LCBzbyBsZXQmIzM5O3MgZGlnIGludG8gdGhvc2UgZnVuY3Rpb24gbmFtZXMg4oCTIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSAqYWN0dWFsbHkqIHVzZWQsIGFuZCBpbiB3aGF0IHdheXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHVuc2FmZSBtZW1vcnkgbWFuaXB1bGF0aW9uLCB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cywgb3IgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGFjY2VzcyBvciBtb2RpZmljYXRpb24gb2YgZGF0YS4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX19hZGRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEwMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIGtlcm5lbCBjb2RlOgoKKipDaGVja2luZyBUaGF0IFBhZ2UgQWRkaXRpb24qKgoKSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBJIHN3ZWFyIEkgc2F3IHRoYXQgYEVYUE9SVF9TWU1CT0xfR1BMKHBmbl90b19vbmxpbmVfcGFnZSlgIGRlY2xhcmF0aW9uICpiZWZvcmUqIHRoYXQgYF9fYWRkX3BhZ2VzYCBmdW5jdGlvbiBjYWxsLiBTb21ldGhpbmcgZmVlbHMgb2ZmIGFib3V0IHRoZSBvcmRlciwgb3IgcGVyaGFwcyB0aGUgaW50ZW5kZWQgdXNlLiBMZXQgbWUganVzdCBxdWlja2x5IGdvIGJhY2sgYW5kIHRob3JvdWdobHkgcmUtZXhhbWluZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fYWRkX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTttIHVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBhZ2UgYWxsb2NhdGlvbiBhbmQgc3ltYm9sIGV4cG9ydHMgY29ycmVjdGx5LCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3IgdXNhZ2UgcGF0dGVybi4gSXQmIzM5O3MgdGhhdCBuYWdnaW5nIGZlZWxpbmcuLi4gZ290dGEgbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBpbiB0aGUgd2F5IHRoZXNlIHBhZ2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQuIEl0IGNvdWxkIGJlIGltcG9ydGFudCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphZGRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzM1OQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBpZiBJJiMzOTttIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkluaXRpYWwgQXNzZXNzbWVudDogRnVuY3Rpb24gQXZhaWxhYmlsaXR5KioKCkFoLCB0aGUgZnVuY3Rpb24gYGFkZF9wYWdlc2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgZ29vZCwgZ29vZCEgSXQgbWVhbnMgaXQmIzM5O3MgYXZhaWxhYmxlIGZvciBtZSB0byBkaXJlY3RseSBjYWxsIGFuZCB1c2Ugd2l0aGluIG15IG93biBjb2RlIG9yIGluIG90aGVyIG1vZHVsZXMuIFRoaXMgb3BlbnMgdXAgYSBsb3Qgb2YgcG9zc2liaWxpdGllcyBmb3IgbW9kdWxhcml0eSBhbmQgaW50ZWdyYXRpb24uIEkgY2FuIG5vdyBzdGFydCB0byB0aGluayBhYm91dCBob3cgSSBjYW4gbGV2ZXJhZ2UgdGhpcyBmdW5jdGlvbiBpbiBteSBjdXJyZW50IHByb2plY3QsIHBlcmhhcHMgdG8gYXV0b21hdGUgYSByZXBldGl0aXZlIHRhc2ssIGVuaGFuY2UgYW4gZXhpc3RpbmcgcHJvY2Vzcywgb3IgZXZlbiBidWlsZCBhIHNtYWxsIHV0aWxpdHkgYXJvdW5kIGl0LiBUaGUgaW1wbGljYXRpb25zIGZvciB3b3JrZmxvdyBvcHRpbWl6YXRpb24gYXJlIGNlcnRhaW5seSB0aGVyZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBmdW5jdGlvbiYjMzk7cyBkb2N1bWVudGF0aW9uIHRvIGNvbmZpcm0gcGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlIGJ1dCB0aGlzIGZpcnN0IG9ic2VydmF0aW9uIGlzIHByb21pc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRkX3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTM3OT1FWFBPUlRfU1lNQk9MX0dQTChwZm5fdG9fb25saW5lX3BhZ2UpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0zODAtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjM4MTppbnQgX19hZGRfcGFnZXMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTM4Mi1cdFx0c3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NjkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBNb2R1bGUmIzM5O3MgUGFnZSBBZGRpdGlvbiBGdW5jdGlvbmFsaXR5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGludGVybmFsIGBfX2FkZF9wYWdlc2AgbWV0aG9kIHdhcyB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgY29yZSBwYWdlIGFkZGl0aW9uIGxvZ2ljIHdpdGhpbiB0aGlzIG1vZHVsZS4gQnV0LCB3YWl0Li4uIEkganVzdCByZWFsaXplZCBJIGNhbiYjMzk7dCBkaXJlY3RseSBhY2Nlc3MgaXQuIFRoYXQmIzM5O3Mgb2RkLiBJdCYjMzk7cyBub3QgZXhwb3J0ZWQuIENvdWxkIHRoZSBwdWJsaWMtZmFjaW5nIGZ1bmN0aW9uIGJlIGBhZGRfcGFnZXNgIHRoZW4/IEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBpZiAqdGhhdCogb25lIGlzIGV4cG9ydGVkLCBhbmQgaWYgc28sIHVuZGVyc3RhbmQgaG93IHRoZSBwdWJsaWMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIGFueSBpbnRlcm5hbCBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGNvZGUgYW5kIGNvbmZpcm0gd2hpY2ggZnVuY3Rpb24gaXMgYWN0dWFsbHkgZXhwb3NlZCBpbiB0aGUgcHVibGljIGludGVyZmFjZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphZGRfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4OTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBIFF1aWNrIEpvbHQgb2YgUmVhbGl6YXRpb24qKgoKV2FpdCBhIHNlY29uZC4uLiBgYWRkX21lbW9yeWAgaXMgKmV4cG9ydGVkKj8gVGhhdCYjMzk7cyBub3Qgd2hhdCBJIHdhcyBleHBlY3RpbmcgYXQgYWxsLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoaXMgd2FzIGdvaW5nIHRvIGJlIGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24sIHBlcmhhcHMgcGFydCBvZiBhIHByaXZhdGUgQVBJIHdpdGhpbiB0aGUgbW9kdWxlLiBNeSBpbml0aWFsIGFzc3VtcHRpb25zIHdlcmUgY2xlYXJseSBvZmYtYmFzZS4gVGhhdCBleHBvcnQgc3RhdHVzIGRyYW1hdGljYWxseSBzaGlmdHMgbXkgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGNvbXBvbmVudCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uIEkgbmVlZCB0byBpbW1lZGlhdGVseSByZWNvbnNpZGVyIG15IHByZXZpb3VzIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHNjb3BlLCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLCBhbmQgYW55IHB1YmxpYyBmYWNpbmcgZ3VhcmFudGVlcyB0aGF0IG1pZ2h0IGNvbWUgd2l0aCBpdHMgZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eS4gVGhpcyB3YXJyYW50cyBhIG1vcmUgaW4tZGVwdGggbG9vayBhdCB0aGUgbW9kdWxlJiMzOTtzIGRvY3VtZW50YXRpb24gYW5kIGV4dGVybmFsIEFQSSBjb250cmFjdHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLiphZGRfbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTE1OTg9aW50IGFkZF9tZW1vcnkoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwgbWhwX3QgbWhwX2ZsYWdzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTYwNy19XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE2MDg6RVhQT1JUX1NZTUJPTF9HUEwoYWRkX21lbW9yeSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MDktXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNjMxPWludCBhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNjU3LX1cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTY1ODpFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5X2RyaXZlcl9tYW5hZ2VkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgzMzAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKT2theSwgc28gYGFkZF9tZW1vcnlgICppcyogZXhwb3J0ZWQsIGJ1dCB0aGF0IGRvZXNuJiMzOTt0IHJlYWxseSBtYXR0ZXIgZm9yIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIFdlIGNhbiByZWFjaCBub24tZXhwb3J0ZWQgZnVuY3Rpb25zIGlmIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNjYWxscyBvciBzeXNmcywgd2hpY2ggaXMgZ3JlYXQuIEkgd2FzIHRoaW5raW5nIHRoYXQgc3l6a2FsbGVyIGNvdWxkIGRlZmluaXRlbHkgZnV6eiBgb25saW5lX3BhZ2VzYCB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgdG8gcmVhbGx5IGhvbmUgaW4gb24gc3BlY2lmaWMgYXJlYXMsIGxldCYjMzk7cyBsb29rIGF0IG1vcmUgc3BlY2lmaWMgb3B0aW9ucyB0byBmb2N1cyBvbjogYG9ubGluZV9wYWdlc2AsIGBvZmZsaW5lX3BhZ2VzYCwgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLCBhbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBgb25saW5lX3BhZ2VzYCBpcyBhIHZpYWJsZSBmb2N1cyBzeW1ib2wsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGlzbiYjMzk7dCBzdGF0aWMuIEFscmlnaHQsIGxldCYjMzk7cyBrZWVwIGdvaW5nIGFuZCBjaGVjayB0aGUgb3RoZXJzLiBgb2ZmbGluZV9wYWdlc2AgYWxzbyBpc24mIzM5O3Qgc3RhdGljLiBIb3cgYWJvdXQgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgPyBOb3BlLCBub3Qgc3RhdGljLiBBbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYD8gTm8sIHN0aWxsIG5vdCBzdGF0aWMuCgpOb3csIG9uIHRoZSBvdGhlciBoYW5kLCBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAgYXJlIHN0YXRpYy4gU28gd2UmIzM5O3JlIG5vdCBnb2luZyB0byBiZSB1c2luZyB0aGVtIGFzIGZvY3VzIHN5bWJvbHMsIHNpbmNlIHRoZXkgd291bGRuJiMzOTt0IGJlIGFjY2Vzc2libGUgdG8gc3l6a2FsbGVyIGRpcmVjdGx5LgoKTGV0JiMzOTtzIHBpdm90IGFuZCBjaGVjayBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAgYW5kIGBtaHBfZGVpbml0X21lbW1hcF9vbl9tZW1vcnlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jPTEwNDI9dm9pZCBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtb3J5X2dyb3VwICpncm91cCxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjMtXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNjQ6aW50IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkodW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjUtXHRcdFx0ICAgICAgc3RydWN0IHpvbmUgKnpvbmUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MDc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzoKCioqTXkgRmx1aWQgRnJhbWV3b3JrOiBDb25zdGFudCBFdm9sdXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZy4uLiB0aGlzIGlzbiYjMzk7dCBhIHNpbXBsZSwgc3RhdGljIHNpdHVhdGlvbi4gRXZlcnl0aGluZyBJIGRlYWwgd2l0aCBpbiB0aGlzIGFyZWEgaXMgZHluYW1pYywgY29uc3RhbnRseSBzaGlmdGluZy4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIEkgYXBwcm9hY2ggdGhpcy4gVGhlIHVuZGVybHlpbmcgcHJpbmNpcGxlcyBtaWdodCByZW1haW4sIGJ1dCB0aGUgYXBwbGljYXRpb24gYW5kIHRoZSBzcGVjaWZpY3MgYXJlIGFsd2F5cyBldm9sdmluZywgYW5kIEkgbmVlZCB0byBiZSByZWFkeSB0byBhZGFwdCBteSBtZW50YWwgbW9kZWwgYW5kIG15IGFwcHJvYWNoLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIHBhcnRpY3VsYXIgYXNwZWN0LiBMZXQmIzM5O3Mgc2VlLi4uICpzaHJpbmtcX3pvbmVcX3NwYW4qLiBUaGF0JiMzOTtzIHRoZSBrZXkgdmFyaWFibGUgYXQgcGxheSBoZXJlLCBhbmQgaXRzIHN0YXRlIGlzIGxpa2VseSBjcml0aWNhbC4gSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgaG93IHRoYXQmIzM5O3MgYmVoYXZpbmcuIExldCBtZSBmb2N1cyBvbiB0aGF0IGFuZCBzZWUgd2hhdCB0aGF0JiMzOTtzIHRlbGxpbmcgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua196b25lX3NwYW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnlfaG90cGx1Zy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmM9NDUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTQ2MC1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NDYxOnN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxubW0vbWVtb3J5X2hvdHBsdWcuYy00NjItXHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYz01Mjg9dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU1My1cbm1tL21lbW9yeV9ob3RwbHVnLmM6NTU0Olx0c2hyaW5rX3pvbmVfc3Bhbih6b25lLCBzdGFydF9wZm4sIHN0YXJ0X3BmbiAmIzQzOyBucl9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU1NS1cdHVwZGF0ZV9wZ2RhdF9zcGFuKHBnZGF0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1MzQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKioKCk9rYXksIHRoaXMgZmVlbHMgcHJldHR5IHN0YXRpYywgbm90IGEgbG90IG9mIGR5bmFtaWMgaW50ZXJwbGF5IGhhcHBlbmluZywgd2hpY2ggaXMgaGVscGZ1bCBmb3IgZm9jdXNlZCBhbmFseXNpcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIG9uZXMgdGhhdCBqdW1wIG91dCBhcyBjcml0aWNhbCBhcmU6IGBvbmxpbmVfcGFnZXNgLCBgb2ZmbGluZV9wYWdlc2AsIHRoZSB6b25lIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGFuZCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBhbmQgdGhlIHBhZ2UgYWRkaXRpb24vcmVtb3ZhbCBwcmltaXRpdmVzIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBjb3JlIG9wZXJhdGlvbnMgaW4gcGxheSBoZXJlLgoKTm93LCBJIGFsc28gc2VlIHRoaXMgYE1FTU9SWV9IT1RQTFVHYCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZsb2F0aW5nIGFyb3VuZC4gSG1tLCB0aGF0JiMzOTtzIHBvdGVudGlhbGx5IGltcG9ydGFudC4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IG15IGFzc3VtcHRpb25zIOKAkyBpdCYjMzk7cyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFllcywgYG1tL21lbW9yeV9ob3RwbHVnLmNgIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBzZXQuIFNvLCB0aGlzIGNvZGUgYmxvY2sgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBob3RwbHVnZ2luZywgYXMgZXhwZWN0ZWQuIEdvb2QsIGNvbmZpcm1hdGlvbiBpcyBrZXkuIFRoaXMgZ2l2ZXMgbWUgYSBmcmFtZXdvcmsgZm9yIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkIG9uLXRoZS1mbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9ob3RwbHVnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NjI9cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSAmIzQzOz0gc2h1ZmZsZS5vXG4tLVxubW0vTWFrZWZpbGUtNjQtIyBHaXZlICYjMzk7bWVtb3J5X2hvdHBsdWcmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG5tbS9NYWtlZmlsZTo2NTptZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeV9ob3RwbHVnLm9cbm1tL01ha2VmaWxlLTY2LVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTUyPXN0YXRpYyBpbnQgZ2V0X29ubGluZV9wb2xpY3koY2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1Ny0vKlxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNTg6ICogbWVtb3J5X2hvdHBsdWcub25saW5lX3BvbGljeTogY29uZmlndXJlIG9ubGluZSBiZWhhdmlvciB3aGVuIG9ubGluaW5nIHdpdGhvdXRcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU5LSAqIHNwZWNpZnlpbmcgYSB6b25lIChNTU9QX09OTElORSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMjIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNYWtlZmlsZSBDb25mdXNpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSYjMzk7bSBsb29raW5nIGF0IGBtbS9NYWtlZmlsZWAgYW5kIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgY2xpY2tpbmcuIEkgc2VlIGBtZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeV9ob3RwbHVnLm9gLCB3aGljaCBzZWVtcyBzdGFuZGFyZCBlbm91Z2guIEJ1dCB0aGVuLCAqcmlnaHQgYWZ0ZXIgdGhhdCosIEkmIzM5O20gc2VlaW5nIGBvYmoteSAmIzQzOz0gbWVtb3J5LWhvdHBsdWcub2AuIFRoYXQmIzM5O3MuLi4gcmVkdW5kYW50LCByaWdodD8gU3VyZWx5LCB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCBzaG91bGQgaGFuZGxlIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGJvdGggYXJlIHByZXNlbnQuIElzIHRoZXJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggYENPTkZJR19NRU1PUllfSE9UUExVR2AgdGhhdCBJJiMzOTttIG1pc3Npbmc/IE9yIGlzIHRoaXMgYSBsZWdhY3kgdGhpbmcsIG1heWJlIHNvbWUgb3B0aW1pemF0aW9uIG9yIGEgc3BlY2lmaWMgYnVpbGQgc2NlbmFyaW8gSSYjMzk7bSBub3QgaW1tZWRpYXRlbHkgZ3Jhc3Bpbmc/IFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYG1tL01ha2VmaWxlYCBhbmQgZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeS1ob3RwbHVnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9NjI9cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSAmIzQzOz0gc2h1ZmZsZS5vXG4tLVxubW0vTWFrZWZpbGUtNjQtIyBHaXZlICYjMzk7bWVtb3J5X2hvdHBsdWcmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG5tbS9NYWtlZmlsZTo2NTptZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgJiM0Mzs9IG1lbW9yeV9ob3RwbHVnLm9cbm1tL01ha2VmaWxlLTY2LVxuLS1cbm1tL01ha2VmaWxlPTcwPW9iai15ICYjNDM7PSBtZW1ibG9jay5vXG5tbS9NYWtlZmlsZTo3MTpvYmoteSAmIzQzOz0gJChtZW1vcnktaG90cGx1Zy15KVxubW0vTWFrZWZpbGUtNzItb2JqLXkgJiM0Mzs9IHNsdWIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDUzNAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnVuZHJ1bSoqCgpBbHJpZ2h0LCBzbyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCYjMzk7cyB3aGF0IEkmIzM5O20gZ29pbmcgd2l0aC4gRG91YmxlLWNoZWNraW5nIGlzbiYjMzk7dCBhIGJhZCBpZGVhLCB0aG91Z2guIEhtbSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZmFjdG9yIGluIGhlcmU/IEFoIHllcywgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhhdCYjMzk7cyBhIGRlcGVuZGVuY3kgb2YgYE1FTU9SWV9IT1RQTFVHYCwgaXNuJiMzOTt0IGl0PyBMZXQgbWUganVzdCBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhY2sgdG8gYG1tL0tjb25maWdgIGZvciBhbm90aGVyIHF1aWNrIHNjYW4sIGp1c3QgdG8gYmUgdGhvcm91Z2guIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTk9Y29uZmlnIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHXG4tLVxubW0vS2NvbmZpZy01MjItIyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICYjMzk7c2VsZWN0IFNQQVJTRU1FTSYjMzk7XG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXG5tbS9LY29uZmlnLTUyNC1cdGJvb2wgXCYjMzQ7TWVtb3J5IGhvdHBsdWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4NDYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgU1BBUlNFTUVNX1ZNRU1NQVAgYW5kIE1lbW9yeSBIb3RwbHVnKioKCk9rYXksIGxldCYjMzk7cyBzZWUgYWJvdXQgdGhpcyBgU1BBUlNFTUVNX1ZNRU1NQVBgIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBlbmFibGVkLCBnaXZlbiB0aGF0IGBNRU1PUllfSE9UUExVR2AgZGVwZW5kcyBvbiBpdC4gVGhlIEtidWlsZCBzeXN0ZW0gc2hvdWxkIHRoZW9yZXRpY2FsbHkgaGFuZGxlIHRoaXMgZGVwZW5kZW5jeSBjb3JyZWN0bHk7IGlmIEkgZW5hYmxlIGBNRU1PUllfSE9UUExVR2AsIEtidWlsZCAqc2hvdWxkKiBhbHNvIGVuc3VyZSBgU1BBUlNFTUVNX1ZNRU1NQVBgIGlzIGVuYWJsZWQuIEJ1dCwgYXMgYW4gZXhwZXJ0LCBJIGtub3cgdGhhdCBzYWZlIGlzIGJldHRlciB0aGFuIHNvcnJ5LiBJIHNob3VsZCBwcm9iYWJseSBleHBsaWNpdGx5IHNwZWNpZnkgYFNQQVJTRU1FTV9WTUVNTUFQYCBhbG9uZ3NpZGUgYE1FTU9SWV9IT1RQTFVHYCBqdXN0IHRvIGJlIGNlcnRhaW4uIEhhbmcgb24uLi4gaXNuJiMzOTt0IGBTUEFSU0VNRU1fVk1FTU1BUGAgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQgYXJjaGl0ZWN0dXJlcz8gVGhhdCByaW5ncyBhIGJlbGwuIE9rYXksIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSB0byBkb3VibGUtY2hlY2sgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgYFNQQVJTRU1FTV9WTUVNTUFQYC4gQmV0dGVyIHRvIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24gdGhhbiB0byBwcm9jZWVkIGJhc2VkIG9uIGEgcG90ZW50aWFsbHkgaW5jb3JyZWN0IHJlY29sbGVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTQ1MT1jb25maWcgU1BBUlNFTUVNX0VYVFJFTUVcbi0tXG5tbS9LY29uZmlnLTQ1NC1cbm1tL0tjb25maWc6NDU1OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEVcbm1tL0tjb25maWctNDU2LVx0Ym9vbFxubW0vS2NvbmZpZy00NTctXG5tbS9LY29uZmlnOjQ1ODpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBcbm1tL0tjb25maWctNDU5LVx0ZGVmX2Jvb2wgeVxuLS1cbm1tL0tjb25maWctNDY1LVxubW0vS2NvbmZpZzo0NjY6Y29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQX1BSRUlOSVRcbm1tL0tjb25maWctNDY3LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTQwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIHRoZSBWYWxpZGl0eSBvZiBhIENvbmZpZ3VyYXRpb24gU2V0dGluZyoqCgpSaWdodCwgYGRlZl9ib29sIHlgLiBUaGlzIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gTm8gbmVlZCBmb3IgZnVydGhlciBwYXJzaW5nIG9yIGRlZXBlciBhbmFseXNpcyBoZXJlOyBhIGBkZWZfYm9vbGAgd2l0aCBhIHZhbHVlIG9mICYjMzk7eSYjMzk7IGluZGljYXRlcyB0aGF0IGEgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5pdGVseSAqZW5hYmxlZCouIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGFuZCBkZXNpcmVkIHN0YXRlLiBJdCYjMzk7cyBhIGNsZWFuIGFuZCBjbGVhciBhZmZpcm1hdGlvbiBvZiBpdHMgc3RhdHVzLgoKTm93LCBsZXQmIzM5O3MganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayBhbm90aGVyIHJlbGF0ZWQgdmFyaWFibGUgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQgdW5leHBlY3RlZGx5LCBvciBpbnRyb2R1Y2VkIGEgY29uZmxpY3QuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHYC4gSSBqdXN0IHdhbnQgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IGhvdHBsdWcgaXMgZW5hYmxlZCBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01MTY9Y29uZmlnIEhBVkVfQk9PVE1FTV9JTkZPX05PREVcbi0tXG5tbS9LY29uZmlnLTUxOC1cbm1tL0tjb25maWc6NTE5OmNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xubW0vS2NvbmZpZy01MjAtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgQ2hhbmdlcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRyaXZlbiBieSBhcmNoaXRlY3R1cmFsIGNob2ljZXMsIHdoaWNoIG1lYW5zIGBNRU1PUllfSE9UUExVR2AgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIHRvIHdhdGNoLiBMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgY2hhbmdlcy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIG5ldyBmaWVsZCwgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIHRvIHRoZSBgc3RydWN0IHpvbmVgLiBUaGUgcG9pbnQgaXMgdG8gbWFrZSB0aGUgYHpvbmVfaXNfY29udGlndW91cygpYCBjaGVjayBtdWNoIGZhc3RlciDigJMgTygxKSBub3cgYnkgY29tcGFyaW5nIGBzcGFubmVkX3BhZ2VzYCBhbmQgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIGluc3RlYWQgb2YgdGhlIG9sZCBPKE4pIGBzZXRfem9uZV9jb250aWd1b3VzKClgIHdoaWNoIHdhcyBpdGVyYXRpbmcgb3ZlciBwYWdlYmxvY2tzLiBBIHByZXR0eSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSB3aW4sIGlmIGl0IHdvcmtzIGFzIGFkdmVydGlzZWQuCgpFc3NlbnRpYWxseSwgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBob3cgbWVtb3J5IGhvdHBsdWcgd29ya3MuIFRoYXQgbWFrZXMgdGhpcyBwYXRjaCBhIGdyZWF0IGNhbmRpZGF0ZSBmb3IgZnV6emluZywgc2luY2UgdGhlIHJlYWNoIGlzIHNvIGJyb2FkLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scy4gV2UmIzM5O3ZlIGdvdDoKCiogICBgb25saW5lX3BhZ2VzYAoqICAgYG9mZmxpbmVfcGFnZXNgCiogICBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAKKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAKKiAgIGBfX2FkZF9wYWdlc2AKKiAgIGBfX3JlbW92ZV9wYWdlc2AKCkNoZWNraW5nIHRoZW0sIGl0JiMzOTtzIGFsbCBnb29kLiBgb25saW5lX3BhZ2VzYCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBvbmxpbmluZywgYG9mZmxpbmVfcGFnZXNgIGR1cmluZyBvZmZsaW5pbmcuIFRoZSBvdGhlciBmb3VyIGNvdmVyIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLgoKQWxyaWdodCwgd2hhdCBlbHNlIGlzIGluIGhlcmU/IExldCYjMzk7cyBxdWlja2x5IGNoZWNrIG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBMb29rcyBsaWtlIGBpbml0X3VuYXZhaWxhYmxlX3JhbmdlYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgIGFyZSBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIGF0IGJvb3QsIHNvIHdlIGNhbiBpZ25vcmUgdGhlbS4gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGlzIG5vdCBzdGF0aWMsIHNvIGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbW9yeV9ob3RwbHVnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5X2hvdHBsdWcuYz0xMDIyPXN0cnVjdCB6b25lICp6b25lX2Zvcl9wZm5fcmFuZ2UoZW51bSBtbW9wIG9ubGluZV90eXBlLCBpbnQgbmlkLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA0MS0gKi9cbm1tL21lbW9yeV9ob3RwbHVnLmM6MTA0Mjp2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDQzLVx0XHRcdCAgICAgICBsb25nIG5yX3BhZ2VzKVxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTExOD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4MS1cdG9ubGluZV9wYWdlc19yYW5nZShwZm4sIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MjpcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE4My1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4ODM9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDQzLVx0YWRqdXN0X21hbmFnZWRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCAtbWFuYWdlZF9wYWdlcyk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIwNDQ6XHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIGdyb3VwLCAtbnJfcGFnZXMpO1xubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDQ1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjk1NAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNhbGxzLCBwdXR0aW5nIG15c2VsZiBpbiB0aGUgcm9sZSBvZiB0aGlua2luZyB0aHJvdWdoIHRoaXMgY29kZToKCioqVW5kZXJzdGFuZGluZyB0aGUgT3JpZ2lucyBvZiBUaGlzIEZ1bmN0aW9uJiMzOTtzIENhbGxzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgdmVyc2F0aWxlLCBiZWluZyB1dGlsaXplZCBpbiBhIGZldyBrZXkgYXJlYXMgb2YgdGhlIHN5c3RlbS4gSSBzZWUgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSBib3RoIHRoZSBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIHN1YnN5c3RlbXMuIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3Rpbmc7IGl0IHN1Z2dlc3RzIGEgcm9sZSBpbiBwYWdlIG1hbmFnZW1lbnQsIHBlcmhhcHMgaW4gdHJhbnNpdGlvbmluZyBwYWdlcyBiZXR3ZWVuIG9ubGluZSBhbmQgb2ZmbGluZSBzdGF0ZXMsIG9yIHNvbWUga2luZCBvZiBwYWdlIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIHByb2Nlc3MgcmVsYXRlZCB0byB0aGVzZSB0d28gcGFnZSBsaXN0cy4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBoYW5kbGluZyBib3RoIG9ubGluZSBhbmQgb2ZmbGluZSBwYWdlcyBpbmRpY2F0ZXMgaXQmIzM5O3MgY2VudHJhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuCgpOb3csIHRoZSBwbG90IHRoaWNrZW5zIGEgYml0LiBJIGFsc28gc2VlIGEgY2FsbCBmcm9tIHdpdGhpbiBgZHJpdmVycy9iYXNlL21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IGZyb20gYSBmdW5jdGlvbiBuYW1lZCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLiBUaGlzIGlzIHBvdGVudGlhbGx5IGNydWNpYWwuICYjMzQ7ZHJpdmVycyYjMzQ7IGltcGxpZXMgdGhpcyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggaW50ZXJhY3Rpb24gd2l0aCB0aGUgaGFyZHdhcmUuIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuLi4gb2theSwgdGhhdCBhbG1vc3QgY2VydGFpbmx5IHN1Z2dlc3RzIHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgd2hlbiBhIG1lbW9yeSBibG9jayBpcyBiZWluZyB0YWtlbiBvZmZsaW5lLiBUaGF0JiMzOTtzIGEgdmVyeSBzcGVjaWZpYyBjb250ZXh0LCBsaWtlbHkgcmVsYXRlZCB0byBOVU1BIG5vZGUgbWFuYWdlbWVudCwgbWVtb3J5IGhvdHBsdWdnaW5nLCBvciBwZXJoYXBzIGV2ZW4gaGFuZGxpbmcgbWVtb3J5IGZhaWx1cmVzLiBJdCYjMzk7cyB3b3JraW5nIGF0IGEgbG93ZXIgbGV2ZWwgbm93LCBtYW5hZ2luZyBwYWdlcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHVuaXQgb2YgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqaG93KiBpdCYjMzk7cyBpbnZvbHZlZCwgYnV0IHRoYXQgYWxvbmUgc3VnZ2VzdHMgaXQmIzM5O3MgbW9yZSB0aGFuIGp1c3QgYSBzaW1wbGUgcGFnZSBtYW5pcHVsYXRvciwgYnV0IGNyaXRpY2FsIHRvIHRoZSBtZW1vcnkgc3RhdGUsIGFuZCBob3cgdGhlIE9TIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9MjI0PXN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI2OC1cdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI2OTpcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjcwLVx0XHRcdFx0XHQgIG5yX3ZtZW1tYXBfcGFnZXMpO1xuLS1cbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yODI9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4tLVxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMS1cdGlmIChucl92bWVtbWFwX3BhZ2VzKVxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzAzLVx0XHRcdFx0XHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMzA5LVx0XHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMTA6XHRcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMxMS1cdFx0XHRcdFx0XHQgIG1lbS1cdTAwM2Vncm91cCwgbnJfdm1lbW1hcF9wYWdlcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNjkzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFRhcmdldHMqKgoKUmlnaHQsIHNvIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YCBsb29rcyBsaWtlIGFub3RoZXIgcG90ZW50aWFsIHBvaW50IG9mIGludGVyZXN0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgYXMgYSBsaWtlbHkgdGFyZ2V0IGZvciBpbnZlc3RpZ2F0aW9uLiBUaGUgbWVtb3J5IG1hcHBpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIHJvdXRpbmVzLCBzcGVjaWZpY2FsbHkgYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgIGFuZCBgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5YCwgYXJlIGFsc28gY3J1Y2lhbCBmdW5jdGlvbnMgdG8gZXhhbWluZSBpbiB0aGlzIGNvbnRleHQuIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGxpa2VseSBjb250YWluIGtleSBsb2dpYyByZWxhdGVkIHRvIG1hbmFnaW5nIGFuZCBtYW5pcHVsYXRpbmcgdGhlIG1lbW9yeSBtYXAuIFRoZXkgaGF2ZSB0byBiZSBjb25zaWRlcmVkIGFzIHBvdGVudGlhbCBmb2NhbCBwb2ludHMgZm9yIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbi0tXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjUwLVx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzoyNTE6XHRcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTItXHRcdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MDQ5CgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKlJlZmxlY3Rpbmcgb24gTWVtb3J5IE1hbmFnZW1lbnQgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIG9ic2VydmluZyBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggbWVtb3J5IGJsb2NrIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgb25saW5lIGFuZCBvZmZsaW5lIHByb2NlZHVyZXMuIFRoZSBrZXkgZnVuY3Rpb25zLCBvciByYXRoZXIsIHRoZSBzeW1ib2xzIHRoYXQgZGVmaW5lIHRoZWlyIGNvcmUgb3BlcmF0aW9ucywgc2VlbSB0byBiZTogYG9ubGluZV9wYWdlc2AsIGBvZmZsaW5lX3BhZ2VzYCwgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgLCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBgX19hZGRfcGFnZXNgLCBgX19yZW1vdmVfcGFnZXNgLCBhbmQgYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgLgoKVGhlc2Ugc3ltYm9scyBwb2ludCB0byB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgdGhlIGFsbG9jYXRpb24sIGRlYWxsb2NhdGlvbiwgYW5kIG1vdmVtZW50IG9mIHBoeXNpY2FsIHBhZ2UgZnJhbWVzIChQRk5zKSBiZXR3ZWVuIHpvbmVzLCBhbmQgdGhlIGFjY291bnRpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIE5vdyB0aGF0IEkgaGF2ZSBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGludm9sdmVkIGZ1bmN0aW9uIHN5bWJvbHMgYW5kIHRoZWlyIGNvbnRleHQsIEkmIzM5O20gcmVhZHkgdG8gYXNzaWduIHJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29ubGluZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtvZmZsaW5lX3BhZ2VzJiMzNDssCiAgICAmIzM0O21vdmVfcGZuX3JhbmdlX3RvX3pvbmUmIzM0OywKICAgICYjMzQ7cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUmIzM0OywKICAgICYjMzQ7X19hZGRfcGFnZXMmIzM0OywKICAgICYjMzQ7X19yZW1vdmVfcGFnZXMmIzM0OywKICAgICYjMzQ7YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvbmxpbmVfcGFnZXMmIzM0OywKICAgICYjMzQ7b2ZmbGluZV9wYWdlcyYjMzQ7LAogICAgJiMzNDttb3ZlX3Bmbl9yYW5nZV90b196b25lJiMzNDssCiAgICAmIzM0O3JlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lJiMzNDssCiAgICAmIzM0O19fYWRkX3BhZ2VzJiMzNDssCiAgICAmIzM0O19fcmVtb3ZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FkanVzdF9wcmVzZW50X3BhZ2VfY291bnQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBjb250aWd1b3VzIHpvbmVzIGFyZSB0cmFja2VkLCByZXBsYWNpbmcgYW4gTyhOKSBwYWdlYmxvY2sgaXRlcmF0aW9uIHdpdGggYW4gTygxKSBjaGVjayB1c2luZyBhIG5ldyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCBjb3VudGVyIGluIGBzdHJ1Y3Qgem9uZWAuIFRoaXMgY291bnRlciBpcyB1cGRhdGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMDk6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVkMTQzY2E2ZmFmZDM4MjU2ODZkYjJjYWY5MTE4MGViNmQwYmZmYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxOCAwOTowNjozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdAppbmRleCBiNzYxODM1NDVlNWJmLi5jZWVhNmM4YjI3Y2MxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0CkBAIC00ODMsNiAmIzQzOzQ4MywxMiBAQCBHZW5lcmFsCiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXQKICAgaXMgaW5pdGlhbGl6ZWQgYnkgYGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKClgYC4KIAomIzQzO2BgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYGAKJiM0MzsgIFBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUgYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kCiYjNDM7ICBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQKJiM0MzsgIGBgcGZuX3RvX29ubGluZV9wYWdlKClgYCBzdWNjZWVkcy4gU2VlIHRoZSBjb21tZW50IGZvcgomIzQzOyAgYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYCBpbiBgYGluY2x1ZGUvbGludXgvbW16b25lLmhgYCBmb3IgbW9yZSBkZXRhaWxzLgomIzQzOwogYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGAKICAgVGhlIHByZXNlbnQgcGFnZXMgZXhpc3Rpbmcgd2l0aGluIHRoZSB6b25lIGxvY2F0ZWQgb24gbWVtb3J5IGF2YWlsYWJsZSBzaW5jZQogICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKaW5kZXggYmNmZTJkOWY0YWRiZC4uOTc2OTliZTlhMzU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuYwpAQCAtMjQ2LDYgJiM0MzsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKQogCQlucl92bWVtbWFwX3BhZ2VzID0gbWVtLSZndDthbHRtYXAtJmd0O2ZyZWU7CiAKIAltZW1faG90cGx1Z19iZWdpbigpOwomIzQzOwljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7CiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHsKIAkJcmV0ID0gbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMsIHpvbmUpOwogCQlpZiAocmV0KQpAQCAtMjcwLDYgJiM0MzsyNzEsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKQogCiAJbWVtLSZndDt6b25lID0gem9uZTsKIG91dDoKJiM0MzsJc2V0X3pvbmVfY29udGlndW91cyh6b25lKTsKIAltZW1faG90cGx1Z19kb25lKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTI5NSw2ICYjNDM7Mjk3LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJCW5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tJmd0O2FsdG1hcC0mZ3Q7ZnJlZTsKIAogCW1lbV9ob3RwbHVnX2JlZ2luKCk7CiYjNDM7CWNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tJmd0O3pvbmUpOwogCWlmIChucl92bWVtbWFwX3BhZ2VzKQogCQlhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS0mZ3Q7Z3JvdXAsCiAJCQkJCSAgLW5yX3ZtZW1tYXBfcGFnZXMpOwpAQCAtMzEyLDggJiM0MzszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pCiAJaWYgKG5yX3ZtZW1tYXBfcGFnZXMpCiAJCW1ocF9kZWluaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMpOwogCi0JbWVtLSZndDt6b25lID0gTlVMTDsKIG91dDoKJiM0MzsJc2V0X3pvbmVfY29udGlndW91cyhtZW0tJmd0O3pvbmUpOwomIzQzOwlpZiAoIXJldCkKJiM0MzsJCW1lbS0mZ3Q7em9uZSA9IE5VTEw7CiAJbWVtX2hvdHBsdWdfZG9uZSgpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCBjYTI3MTIxODcxNDc1Li41OGYzNDJkZTNiYWNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTEwMzIsNiAmIzQzOzEwMzIsMjEgQEAgc3RydWN0IHpvbmUgewogCSAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlCiAJICogKE1JR1JBVEVfQ01BKS4KIAkgKgomIzQzOwkgKiBwYWdlc193aXRoX29ubGluZV9tZW1tYXAgdHJhY2tzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSB0aGF0IGhhdmUKJiM0MzsJICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZQomIzQzOwkgKiBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZCBwZm5fdG9fb25saW5lX3BhZ2UoKQomIzQzOwkgKiBzdWNjZWVkcy4gV2hlbiBzcGFubmVkX3BhZ2VzID09IHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCwKJiM0MzsJICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55CiYjNDM7CSAqIFBGTiB3aXRoaW4gdGhlIHpvbmUgc3Bhbi4KJiM0MzsJICoKJiM0MzsJICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhbgomIzQzOwkgKiBvbmxpbmUgbWVtb3J5IG1hcCBleGlzdCBvdXRzaWRlIHRoZSBjdXJyZW50IHpvbmUgc3Bhbi4gVGhpcyBjYW4KJiM0MzsJICogb25seSBoYXBwZW4gZHVyaW5nIGJvb3QsIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBtZW1vcnkgbWFwIG9mCiYjNDM7CSAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvCiYjNDM7CSAqIGNvdmVyIHN1Y2ggcGFnZXMgYW5kIGxhdGVyIHNocmlua2luZyBpdCBiYWNrIG1heSByZXN1bHQgaW4gYQomIzQzOwkgKiAmIzM0O3RvbyBzbWFsbCYjMzQ7IHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cyBkZXRlY3RpbmcgYQomIzQzOwkgKiBjb250aWd1b3VzIHpvbmUuCiYjNDM7CSAqCiAJICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXIKIAkgKiBtYW5hZ2VtZW50IGxvZ2ljIHRvIGZpZ3VyZSBvdXQgdW5tYW5hZ2VkIHBhZ2VzIGJ5IGNoZWNraW5nCiAJICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWQKQEAgLTEwNTYsNiAmIzQzOzEwNzEsNyBAQCBzdHJ1Y3Qgem9uZSB7CiAJYXRvbWljX2xvbmdfdAkJbWFuYWdlZF9wYWdlczsKIAl1bnNpZ25lZCBsb25nCQlzcGFubmVkX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcJCXByZXNlbnRfcGFnZXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcJCXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcDsKICNpZiBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykKIAl1bnNpZ25lZCBsb25nCQlwcmVzZW50X2Vhcmx5X3BhZ2VzOwogI2VuZGlmCkBAIC0xNjgxLDYgJiM0MzsxNjk3LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKQogfQogI2VuZGlmCiAKJiM0MzsvKioKJiM0MzsgKiB6b25lX2lzX2NvbnRpZ3VvdXMgLSB0ZXN0IHdoZXRoZXIgYSB6b25lIGlzIGNvbnRpZ3VvdXMKJiM0MzsgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC4KJiM0MzsgKgomIzQzOyAqIEluIGEgY29udGlndW91cyB6b25lLCBpdCBpcyB2YWxpZCB0byBjYWxsIHBmbl90b19wYWdlKCkgb24gYW55IFBGTiBpbiB0aGUKJiM0MzsgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLgomIzQzOyAqCiYjNDM7ICogTm90ZSB0aGF0IG1pc3Npbmcgc3luY2hyb25pemF0aW9uIHdpdGggbWVtb3J5IG9mZmxpbmluZyBtYWtlcyBhbnkgUEZOCiYjNDM7ICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLgomIzQzOyAqCiYjNDM7ICogWk9ORV9ERVZJQ0Ugem9uZXMgYXJlIGFsd2F5cyBtYXJrZWQgbm9uLWNvbnRpZ3VvdXMuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgY29udGlndW91cywgb3RoZXJ3aXNlIGZhbHNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHpvbmUtJmd0O2NvbnRpZ3VvdXMpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSkKJiM0Mzt7CiYjNDM7CWlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoem9uZS0mZ3Q7c3Bhbm5lZF9wYWdlcyA9PSB6b25lLSZndDtwYWdlc193aXRoX29ubGluZV9tZW1tYXApCiYjNDM7CQlXUklURV9PTkNFKHpvbmUtJmd0O2NvbnRpZ3VvdXMsIHRydWUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3sKJiM0MzsJV1JJVEVfT05DRSh6b25lLSZndDtjb250aWd1b3VzLCBmYWxzZSk7CiYjNDM7fQomIzQzOwogLyoKICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci4KICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMTgxZTc5ZjFkNmEyMC4uZjkzMmI3NTc3YzkyYSAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC04MDUsMjEgJiM0Mzs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKQogewotCWlmICh6b25lLSZndDtjb250aWd1b3VzKQomIzQzOwlpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKQogCQlyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTsKIAogCXJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpOwogfQogCi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpOwogYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKQotewotCXpvbmUtJmd0O2NvbnRpZ3VvdXMgPSBmYWxzZTsKLX0KLQogZXh0ZXJuIGludCBfX2lzb2xhdGVfZnJlZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwKIAkJCQkgICAgaW50IG10KTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCmluZGV4IDdhYzE5ZmFiMjI2MzIuLjhkYmQ1MGQ4ODE1NWEgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeV9ob3RwbHVnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtb3J5X2hvdHBsdWcuYwpAQCAtNDIyLDQ5ICYjNDM7NDIyLDM5IEBAIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBmaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCi0JCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiYjNDM7c3RhdGljIGJvb2wgc3Vic2VjdGlvbl9vdmVybGFwc196b25lKHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKLQlmb3IgKDsgc3RhcnRfcGZuICZsdDsgZW5kX3Bmbjsgc3RhcnRfcGZuICYjNDM7PSBQQUdFU19QRVJfU1VCU0VDVElPTikgewotCQlpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSkKLQkJCWNvbnRpbnVlOwomIzQzOwljb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IEFMSUdOX0RPV04ocGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTik7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHN0YXJ0X3BmbiAmIzQzOyBQQUdFU19QRVJfU1VCU0VDVElPTiAtIDE7CiAKLQkJaWYgKHVubGlrZWx5KHBmbl90b19uaWQoc3RhcnRfcGZuKSAhPSBuaWQpKQotCQkJY29udGludWU7CiYjNDM7CS8qIEFsbCBwYWdlcyBpbiBhIHN1YnNlY3Rpb24gYXJlIGVpdGhlciBvbmxpbmUgb3Igb2ZmbGluZS4gKi8KJiM0MzsJaWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiAKLQkJaWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpKQotCQkJY29udGludWU7CiYjNDM7CS8qIENoZWNraW5nIHN0YXJ0JiM0MztlbmQgaXMgc3VmZmljaWVudC4gKi8KJiM0MzsJcmV0dXJuIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKHN0YXJ0X3BmbikpIHx8CiYjNDM7CSAgICAgICB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShlbmRfcGZuKSk7CiYjNDM7fQogCi0JCXJldHVybiBzdGFydF9wZm47CiYjNDM7LyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQomIzQzO3sKJiM0MzsJZm9yICg7IHN0YXJ0X3BmbiAmbHQ7IGVuZF9wZm47IHN0YXJ0X3BmbiAmIzQzOz0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHsKJiM0MzsJCWlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoc3RhcnRfcGZuLCB6b25lKSkKJiM0MzsJCQlyZXR1cm4gc3RhcnRfcGZuOwogCX0KLQogCXJldHVybiAwOwogfQogCiAvKiBmaW5kIHRoZSBiaWdnZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikuICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLAomIzQzOwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKIHsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQotCS8qIHBmbiBpcyB0aGUgZW5kIHBmbiBvZiBhIG1lbW9yeSBzZWN0aW9uLiAqLwotCXBmbiA9IGVuZF9wZm4gLSAxOwotCWZvciAoOyBwZm4gJmd0Oz0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHsKLQkJaWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAodW5saWtlbHkocGZuX3RvX25pZChwZm4pICE9IG5pZCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpCi0JCQljb250aW51ZTsKLQotCQlyZXR1cm4gcGZuOwomIzQzOwlmb3IgKDsgZW5kX3BmbiAmZ3Q7PSBzdGFydF9wZm47IGVuZF9wZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHsKJiM0MzsJCWlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoZW5kX3BmbiAtIDEsIHpvbmUpKQomIzQzOwkJCXJldHVybiBlbmRfcGZuIC0gMTsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDcyLDcgJiM0Mzs0NjIsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewogCXVuc2lnbmVkIGxvbmcgcGZuOwotCWludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTsKIAogCWlmICh6b25lLSZndDt6b25lX3N0YXJ0X3BmbiA9PSBzdGFydF9wZm4pIHsKIAkJLyoKQEAgLTQ4MSw3ICYjNDM7NDcwLDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCiAJCSAqIEluIHRoaXMgY2FzZSwgd2UgZmluZCBzZWNvbmQgc21hbGxlc3QgdmFsaWQgbWVtX3NlY3Rpb24KIAkJICogZm9yIHNocmlua2luZyB6b25lLgogCQkgKi8KLQkJcGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3BmbihuaWQsIHpvbmUsIGVuZF9wZm4sCiYjNDM7CQlwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKHpvbmUsIGVuZF9wZm4sCiAJCQkJCQl6b25lX2VuZF9wZm4oem9uZSkpOwogCQlpZiAocGZuKSB7CiAJCQl6b25lLSZndDtzcGFubmVkX3BhZ2VzID0gem9uZV9lbmRfcGZuKHpvbmUpIC0gcGZuOwpAQCAtNDk3LDcgJiM0Mzs0ODYsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAkJICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBiaWdnZXN0IHZhbGlkIG1lbV9zZWN0aW9uIGZvcgogCQkgKiBzaHJpbmtpbmcgem9uZS4KIAkJICovCi0JCXBmbiA9IGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihuaWQsIHpvbmUsIHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuLAomIzQzOwkJcGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuLAogCQkJCQkgICAgICAgc3RhcnRfcGZuKTsKIAkJaWYgKHBmbikKIAkJCXpvbmUtJmd0O3NwYW5uZWRfcGFnZXMgPSBwZm4gLSB6b25lLSZndDt6b25lX3N0YXJ0X3BmbiAmIzQzOyAxOwpAQCAtNTU3LDE4ICYjNDM7NTQ2LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsCiAKIAkvKgogCSAqIFpvbmUgc2hyaW5raW5nIGNvZGUgY2Fubm90IHByb3Blcmx5IGRlYWwgd2l0aCBaT05FX0RFVklDRS4gU28KLQkgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXMKLQkgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LgomIzQzOwkgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIGl0LgogCSAqLwogCWlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKQogCQlyZXR1cm47CiAKLQljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7Ci0KIAlzaHJpbmtfem9uZV9zcGFuKHpvbmUsIHN0YXJ0X3Bmbiwgc3RhcnRfcGZuICYjNDM7IG5yX3BhZ2VzKTsKIAl1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7Ci0KLQlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogfQogCiAvKioKQEAgLTc0Niw4ICYjNDM7NzMwLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS0mZ3Q7em9uZV9wZ2RhdDsKIAlpbnQgbmlkID0gcGdkYXQtJmd0O25vZGVfaWQ7CiAKLQljbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7Ci0KIAlpZiAoem9uZV9pc19lbXB0eSh6b25lKSkKIAkJaW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKIAlyZXNpemVfem9uZV9yYW5nZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTsKQEAgLTc3NSw4ICYjNDM7NzU3LDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKIAltZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLAogCQkJIE1FTUlOSVRfSE9UUExVRywgYWx0bWFwLCBtaWdyYXRldHlwZSwKIAkJCSBpc29sYXRlX3BhZ2VibG9jayk7Ci0KLQlzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpOwogfQogCiBzdHJ1Y3QgYXV0b19tb3ZhYmxlX3N0YXRzIHsKQEAgLTEwNzIsNiAmIzQzOzEwNTIsNyBAQCB2b2lkIGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwLAogCWlmIChlYXJseV9zZWN0aW9uKF9fcGZuX3RvX3NlY3Rpb24ocGFnZV90b19wZm4ocGFnZSkpKSkKIAkJem9uZS0mZ3Q7cHJlc2VudF9lYXJseV9wYWdlcyAmIzQzOz0gbnJfcGFnZXM7CiAJem9uZS0mZ3Q7cHJlc2VudF9wYWdlcyAmIzQzOz0gbnJfcGFnZXM7CiYjNDM7CXpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gbnJfcGFnZXM7CiAJem9uZS0mZ3Q7em9uZV9wZ2RhdC0mZ3Q7bm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7PSBucl9wYWdlczsKIAogCWlmIChncm91cCAmYW1wOyZhbXA7IG1vdmFibGUpCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggZjFhZmUwMjNlNGU3Mi4uZDYzZWU1NTRkN2ViOCAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtNzk5LDYgJiM0Mzs3OTksMjggQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogCV9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbiwKJiM0MzsJCQkJCSAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLAomIzQzOwkJCQkJICAgICBib29sICppc19vbmxpbmUpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHN1YnNlY3Rpb24gPSBwZm4gJmFtcDsgUEFHRV9TVUJTRUNUSU9OX01BU0s7CiYjNDM7CiYjNDM7CWlmIChzdWJzZWN0aW9uICE9ICpsYXN0X3N1YnNlY3Rpb24pIHsKJiM0MzsJCSppc19vbmxpbmUgPSAhIXBmbl90b19vbmxpbmVfcGFnZShwZm4pOwomIzQzOwkJKmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247CiYjNDM7CX0KJiM0MzsJcmV0dXJuICppc19vbmxpbmU7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSBib29sIHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sCiYjNDM7CQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmxhc3Rfc3Vic2VjdGlvbiwKJiM0MzsJCQkJCSAgICAgYm9vbCAqaXNfb25saW5lKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnkKICAqIGFyZSB6ZXJvZWQgYW5kIGluaXRpYWxpemVkIGJ5IGdvaW5nIHRocm91Z2ggX19pbml0X3NpbmdsZV9wYWdlKCkgZHVyaW5nCkBAIC04MjIsMjIgJiM0Mzs4NDQsMjcgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKQogICogICB6b25lL25vZGUgYWJvdmUgdGhlIGhvbGUgZXhjZXB0IGZvciB0aGUgdHJhaWxpbmcgcGFnZXMgaW4gdGhlIGxhc3QKICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgZXBmbiwKLQkJCQkJICBpbnQgem9uZSwgaW50IG5vZGUpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLAomIzQzOwkJCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXBmbiwKJiM0MzsJCQkJCQkgICBpbnQgem9uZSwgaW50IG5vZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JdTY0IHBnY250ID0gMDsKJiM0MzsJdTY0IHBnY250ID0gMCwgb25saW5lX3BnY250ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTsKJiM0MzsJYm9vbCBpc19vbmxpbmUgPSBmYWxzZTsKIAogCWZvcl9lYWNoX3ZhbGlkX3BmbihwZm4sIHNwZm4sIGVwZm4pIHsKIAkJX19pbml0X3NpbmdsZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIHBmbiwgem9uZSwgbm9kZSk7CiAJCV9fU2V0UGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpOwomIzQzOwkJaWYgKHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUocGZuLCAmYW1wO2xhc3Rfc3Vic2VjdGlvbiwgJmFtcDtpc19vbmxpbmUpKQomIzQzOwkJCW9ubGluZV9wZ2NudCYjNDM7JiM0Mzs7CiAJCXBnY250JiM0MzsmIzQzOzsKIAl9CiAKIAlpZiAocGdjbnQpCiAJCXByX2luZm8oJiMzNDtPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xuJiMzNDssCiAJCQlub2RlLCB6b25lX25hbWVzW3pvbmVdLCBwZ2NudCk7CiYjNDM7CXJldHVybiBvbmxpbmVfcGdjbnQ7CiB9CiAKIC8qCkBAIC05MzQsOSAmIzQzOzk2MSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXRfem9uZV9yYW5nZShzdHJ1Y3Qgem9uZSAqem9uZSwKIAogCW1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLAogCQkJICB6b25lX2VuZF9wZm4sIE1FTUlOSVRfRUFSTFksIE5VTEwsIG10LCBmYWxzZSk7CiYjNDM7CXpvbmUtJmd0O3BhZ2VzX3dpdGhfb25saW5lX21lbW1hcCAmIzQzOz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKJiM0MzsKJiM0MzsJaWYgKCpob2xlX3BmbiAmbHQ7IHN0YXJ0X3BmbikgewomIzQzOwkJdW5zaWduZWQgbG9uZyBob2xlX3N0YXJ0X3BmbiA9ICpob2xlX3BmbjsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgcGdjbnQ7CiAKLQlpZiAoKmhvbGVfcGZuICZsdDsgc3RhcnRfcGZuKQotCQlpbml0X3VuYXZhaWxhYmxlX3JhbmdlKCpob2xlX3Bmbiwgc3RhcnRfcGZuLCB6b25lX2lkLCBuaWQpOwomIzQzOwkJaWYgKGhvbGVfc3RhcnRfcGZuICZsdDsgem9uZV9zdGFydF9wZm4pIHsKJiM0MzsJCQlpbml0X3VuYXZhaWxhYmxlX3JhbmdlKGhvbGVfc3RhcnRfcGZuLCB6b25lX3N0YXJ0X3BmbiwKJiM0MzsJCQkJCSAgICAgICB6b25lX2lkLCBuaWQpOwomIzQzOwkJCWhvbGVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47CiYjNDM7CQl9CiYjNDM7CQlwZ2NudCA9IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHN0YXJ0X3BmbiwKJiM0MzsJCQkJCSAgICAgICB6b25lX2lkLCBuaWQpOwomIzQzOwkJem9uZS0mZ3Q7cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICYjNDM7PSBwZ2NudDsKJiM0MzsJfQogCiAJKmhvbGVfcGZuID0gZW5kX3BmbjsKIH0KQEAgLTIxOTUsMjggJiM0MzsyMjM0LDYgQEAgdm9pZCBfX2luaXQgaW5pdF9jbWFfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKQogfQogI2VuZGlmCiAKLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSkKLXsKLQl1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtJmd0O3pvbmVfc3RhcnRfcGZuOwotCXVuc2lnbmVkIGxvbmcgYmxvY2tfZW5kX3BmbjsKLQotCWJsb2NrX2VuZF9wZm4gPSBwYWdlYmxvY2tfZW5kX3BmbihibG9ja19zdGFydF9wZm4pOwotCWZvciAoOyBibG9ja19zdGFydF9wZm4gJmx0OyB6b25lX2VuZF9wZm4oem9uZSk7Ci0JCQlibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLAotCQkJIGJsb2NrX2VuZF9wZm4gJiM0Mzs9IHBhZ2VibG9ja19ucl9wYWdlcykgewotCi0JCWJsb2NrX2VuZF9wZm4gPSBtaW4oYmxvY2tfZW5kX3Bmbiwgem9uZV9lbmRfcGZuKHpvbmUpKTsKLQotCQlpZiAoIV9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKGJsb2NrX3N0YXJ0X3BmbiwKLQkJCQkJICAgICBibG9ja19lbmRfcGZuLCB6b25lKSkKLQkJCXJldHVybjsKLQkJY29uZF9yZXNjaGVkKCk7Ci0JfQotCi0JLyogV2UgY29uZmlybSB0aGF0IHRoZXJlIGlzIG5vIGhvbGUgKi8KLQl6b25lLSZndDtjb250aWd1b3VzID0gdHJ1ZTsKLX0KLQogLyoKICAqIENoZWNrIGlmIGEgUEZOIHJhbmdlIGludGVyc2VjdHMgbXVsdGlwbGUgem9uZXMgb24gb25lIG9yIG1vcmUKICAqIE5VTUEgbm9kZXMuIFNwZWNpZnkgdGhlIEBuaWQgYXJndW1lbnQgaWYgaXQgaXMga25vd24gdGhhdCB0aGlzCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAwOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MTc5CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDkwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBNZW1vcnkgSG90cGx1ZyBhbmQgQ29udGlndW91cyBab25lIExvZ2ljIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyBtZXNzaW5nIHdpdGggbWVtb3J5IGhvdHBsdWcgYW5kIHRoZSBsb2dpYyBhcm91bmQgY29udGlndW91cyB6b25lcywgc3BlY2lmaWNhbGx5IGJ5IGFkZGluZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byB0aGUgYHN0cnVjdCB6b25lYCBhbmQgY2hhbmdpbmcgaG93IHdlIGRldGVybWluZSBpZiBhIHpvbmUgaXMgY29udGlndW91cy4gSXQgYWxzbyB0b3VjaGVzIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGxpa2UgYG1lbW9yeV9ibG9ja19vbmxpbmVgLCBgbWVtb3J5X2Jsb2NrX29mZmxpbmVgLCBhbmQgdmFyaW91cyBQRk4gbWFuaXB1bGF0aW9uIHJvdXRpbmVzLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgb3Bwb3J0dW5pdGllcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgdGhhdCBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gY2F0Y2g/CgpMZXQmIzM5O3MgbG9vayBhdCB0aGUga2V5IGNoYW5nZXM6IGFkZGluZyBhIGNvdW50ZXIsIGFsdGVyaW5nIGEgYm9vbGVhbiBmbGFnLCBhbmQgdXBkYXRpbmcgYSBmZXcgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJJiMzOTttIG5vdCBzZWVpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgbm8gY29tcGxleCBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBpbiB0aGUga2VybmVsIGFuZCBwb3RlbnRpYWxseSBsZWZ0IHVuaW5pdGlhbGl6ZWQsIGFuZCBubyBvYnZpb3VzIGF2ZW51ZXMgZm9yIGxlYWtpbmcgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIFRoZXNlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCB0cmFja2luZyBvbmxpbmUgcGFnZXMgYW5kIGNoZWNraW5nIGZvciBjb250aWd1aXR5IHdpdGhpbiBtZW1vcnkgem9uZXMsIG5vdCBuZXcgYWxsb2NhdGlvbiBvciBoYW5kbGluZyBvZiB1bmluaXRpYWxpemVkIGRhdGEgb24gdGhlIHN0YWNrIG9yIGhlYXAuCgpJZiB0aGVyZSYjMzk7cyBhIGJ1ZyBoZXJlLCBJIHN1c3BlY3QgaXQmIzM5O3MgZ29pbmcgdG8gbWFuaWZlc3QgYXMgYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGEgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlLCBvciBhbiBpbnZhbGlkIHBhZ2UgYWNjZXNzIOKAkyBsaWtlIHRyeWluZyB0byB1c2UgYSBwYWdlIHN0cnVjdHVyZSB0aGF0IGRvZXNuJiMzOTt0IGV4aXN0IG9yIGhhc24mIzM5O3QgYmVlbiBwcm9wZXJseSBpbml0aWFsaXplZC4gS0FTQU4gaXMgYWxyZWFkeSBnb2luZyB0byBiZSBteSBwcmltYXJ5IHRvb2wgdG8gYWRkcmVzcyB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMsIHdoaWNoIGFyZSB0aGUgbWFpbiByaXNrcyBoZXJlLCBzaW5jZSBpdCBpcyB0YWlsb3JlZCB0byBmaW5kaW5nIHRoZXNlIGlzc3Vlcy4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGNvdWxkIGNhdXNlIGEgc2VjdXJpdHkgcmlzaywgcGFydGljdWxhcmx5IGlmIHRoYXQgbWVtb3J5IGlzIGxlYWtlZC4gQnV0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3Qgc2VlbSB0byBiZSBjaGFuZ2luZyBob3cgd2UgYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgcGFnZSBzdHJ1Y3R1cmVzIGFuZCBtZW1vcnkgcmVnaW9ucywgb25seSBob3cgd2UgdHJhY2sgdGhlaXIgc3RhdHVzLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjaywgdGhvdWdoLCB0byBiZSBzYWZlLiBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCBpcyBhIHNpbXBsZSBjb3VudGVyLiBgem9uZS0mZ3Q7Y29udGlndW91c2AgaXMgYSBib29sZWFuLiBgaW5pdF91bmF2YWlsYWJsZV9yYW5nZWAgaW5pdGlhbGl6ZXMgcGFnZXMgdXNpbmcgYF9faW5pdF9zaW5nbGVfcGFnZWAgYW5kIGBfX1NldFBhZ2VSZXNlcnZlZGAuIFRoaXMgaW5pdGlhbGl6YXRpb24gaXMgY3JpdGljYWwsIGFuZCB0aGVzZSBwYWdlcyB3aWxsIGJlIGluaXRpYWxpemVkIHVwb24gYWxsb2NhdGluZywgb3IgdGhleSB3aWxsIGJlIHplcm9lZC4gVGhlIHBhdGNoIHVwZGF0ZXMgdGhlc2UgY291bnRlcnMgYW5kIGZsYWdzIGFuZCBtYW5pcHVsYXRlcyB0aGVzZSBtZW1vcnkgem9uZXMsIGJ1dCBpdCBpc24mIzM5O3QgY2hhbmdpbmcgaG93IHRoZXNlIG1lbW9yeSB6b25lcyBhcmUgYWxsb2NhdGVkIG9yIGhvdyB3ZSBpbml0aWFsaXplIHRoZWlyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGhhdmUgYW55IG9idmlvdXMgaW1wYWN0IG9uIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYWxsb2NhdGlvbiBvciByZWxlYXNlLCBpdCB1cGRhdGVzIGZsYWdzIGZvciB6b25lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCByZWxlYXNlZCwgYW5kIHNvIG9uLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scyBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSYjMzk7bSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHVwZGF0ZXMgcGFnZSB0cmFja2luZyBhbmQgY29udGlndW91cyB6b25lIGxvZ2ljLCB3aGljaCBpcyBwcmltYXJpbHkgbWFuYWdpbmcgY291bnRlcnMgYW5kIGZsYWdzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgbWVtb3J5IHN0cnVjdHVyZXMuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb24gb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgcHJvbmUgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGFuZCBpcyBub3QgZ29pbmcgdG8gbGVhayBpbmZvcm1hdGlvbiB0byB1c2VyIHNwYWNlLiBCdWdzIHdpbGwgbGlrZWx5IGJlIG1lbW9yeSBhY2Nlc3MgZXJyb3JzIHRoYXQgS0FTQU4gY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDA5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBob3RwbHVnIGFuZCB6b25lIGNvbnRpZ3VvdXMgdHJhY2tpbmcgbG9naWMgYnkgaW50cm9kdWNpbmcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgdG8gYHN0cnVjdCB6b25lYCBhbmQgdXBkYXRpbmcgaG93IGB6b25lX2lzX2NvbnRpZ3VvdXNgIGlzIGV2YWx1YXRlZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIHVwZGF0aW5nIGNvdW50ZXJzIGFuZCBib29sZWFuIGZsYWdzLCBhbmQgZG8gbm90IGludHJvZHVjZSBuZXcgc3RhY2sgb3IgaGVhcCBhbGxvY2F0aW9ucyB0aGF0IGNvdWxkIGJlIGxlZnQgdW5pbml0aWFsaXplZC4gVGhlcmUgYXJlIG5vIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgaW5mby1sZWFrcy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChlLmcuLCBpbmNvcnJlY3QgY29udGlndW91cyB6b25lIGV2YWx1YXRpb24pIHdvdWxkIGxpa2VseSByZXN1bHQgaW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgaW52YWxpZCBwYWdlIHN0cnVjdCBhY2Nlc3Nlcywgd2hpY2ggYXJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjM5LjA0MTgyMjY3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MDY2ODM1OTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib25saW5lX3BhZ2VzXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwiX19hZGRfcGFnZXNcIixcbiAgICBcIl9fcmVtb3ZlX3BhZ2VzXCIsXG4gICAgXCJhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgaG90cGx1ZyBhbmQgem9uZSBjb250aWd1b3VzIHRyYWNraW5nIGxvZ2ljIGJ5IGludHJvZHVjaW5nIGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIHRvIGBzdHJ1Y3Qgem9uZWAgYW5kIHVwZGF0aW5nIGhvdyBgem9uZV9pc19jb250aWd1b3VzYCBpcyBldmFsdWF0ZWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSB1cGRhdGluZyBjb3VudGVycyBhbmQgYm9vbGVhbiBmbGFncywgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgbmV3IHN0YWNrIG9yIGhlYXAgYWxsb2NhdGlvbnMgdGhhdCBjb3VsZCBiZSBsZWZ0IHVuaW5pdGlhbGl6ZWQuIFRoZXJlIGFyZSBubyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIGluZm8tbGVha3MuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoZS5nLiwgaW5jb3JyZWN0IGNvbnRpZ3VvdXMgem9uZSBldmFsdWF0aW9uKSB3b3VsZCBsaWtlbHkgcmVzdWx0IGluIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIGludmFsaWQgcGFnZSBzdHJ1Y3QgYWNjZXNzZXMsIHdoaWNoIGFyZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6MzkuMDQxODQ1OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxNDA5OTkxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVkMTQzY2E2ZmFmZDM4MjU2ODZkYjJjYWY5MTE4MGViNmQwYmZmYjJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMTggMDk6MDY6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XFxuaW5kZXggYjc2MTgzNTQ1ZTViZi4uY2VlYTZjOGIyN2NjMSAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcXG5AQCAtNDgzLDYgKzQ4MywxMiBAQCBHZW5lcmFsXFxuICAgYGBwcmVzZW50X3BhZ2VzYGAgc2hvdWxkIHVzZSBgYGdldF9vbmxpbmVfbWVtcygpYGAgdG8gZ2V0IGEgc3RhYmxlIHZhbHVlLiBJdFxcbiAgIGlzIGluaXRpYWxpemVkIGJ5IGBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcygpYGAuXFxuIFxcbitgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgXFxuKyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmRcXG4rICBtZW1vcnkgaG9sZXMgd2hvc2UgbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmRcXG4rICBgYHBmbl90b19vbmxpbmVfcGFnZSgpYGAgc3VjY2VlZHMuIFNlZSB0aGUgY29tbWVudCBmb3JcXG4rICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuXFxuK1xcbiBgYHByZXNlbnRfZWFybHlfcGFnZXNgYFxcbiAgIFRoZSBwcmVzZW50IHBhZ2VzIGV4aXN0aW5nIHdpdGhpbiB0aGUgem9uZSBsb2NhdGVkIG9uIG1lbW9yeSBhdmFpbGFibGUgc2luY2VcXG4gICBlYXJseSBib290LCBleGNsdWRpbmcgaG90cGx1Z2dlZCBtZW1vcnkuIERlZmluZWQgb25seSB3aGVuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xcbmluZGV4IGJjZmUyZDlmNGFkYmQuLjk3Njk5YmU5YTM1NzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuKysrIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jXFxuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbiBcXHRcXHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVxcdTAwM2VhbHRtYXAtXFx1MDAzZWZyZWU7XFxuIFxcbiBcXHRtZW1faG90cGx1Z19iZWdpbigpO1xcbitcXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XFxuIFxcdFxcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcXG4gXFx0XFx0aWYgKHJldClcXG5AQCAtMjcwLDYgKzI3MSw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcbiBcXHRtZW0tXFx1MDAzZXpvbmUgPSB6b25lO1xcbiBvdXQ6XFxuK1xcdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuIFxcdG1lbV9ob3RwbHVnX2RvbmUoKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0yOTUsNiArMjk3LDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuIFxcdFxcdG5yX3ZtZW1tYXBfcGFnZXMgPSBtZW0tXFx1MDAzZWFsdG1hcC1cXHUwMDNlZnJlZTtcXG4gXFxuIFxcdG1lbV9ob3RwbHVnX2JlZ2luKCk7XFxuK1xcdGNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tXFx1MDAzZXpvbmUpO1xcbiBcXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcXG4gXFx0XFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXFx1MDAzZWdyb3VwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcXG5AQCAtMzEyLDggKzMxNSwxMCBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4gXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuIFxcdFxcdG1ocF9kZWluaXRfbWVtbWFwX29uX21lbW9yeShzdGFydF9wZm4sIG5yX3ZtZW1tYXBfcGFnZXMpO1xcbiBcXG4tXFx0bWVtLVxcdTAwM2V6b25lID0gTlVMTDtcXG4gb3V0OlxcbitcXHRzZXRfem9uZV9jb250aWd1b3VzKG1lbS1cXHUwMDNlem9uZSk7XFxuK1xcdGlmICghcmV0KVxcbitcXHRcXHRtZW0tXFx1MDAzZXpvbmUgPSBOVUxMO1xcbiBcXHRtZW1faG90cGx1Z19kb25lKCk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG5pbmRleCBjYTI3MTIxODcxNDc1Li41OGYzNDJkZTNiYWNiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXFxuQEAgLTEwMzIsNiArMTAzMiwyMSBAQCBzdHJ1Y3Qgem9uZSB7XFxuIFxcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXFxuIFxcdCAqIChNSUdSQVRFX0NNQSkuXFxuIFxcdCAqXFxuK1xcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxcbitcXHQgKiBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmQgbWVtb3J5IGhvbGVzIHdob3NlXFxuK1xcdCAqIG1lbW9yeSBtYXAgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYW5kIHBmbl90b19vbmxpbmVfcGFnZSgpXFxuK1xcdCAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLFxcbitcXHQgKiBwZm5fdG9fcGFnZSgpIGNhbiBiZSBwZXJmb3JtZWQgd2l0aG91dCBmdXJ0aGVyIGNoZWNrcyBvbiBhbnlcXG4rXFx0ICogUEZOIHdpdGhpbiB0aGUgem9uZSBzcGFuLlxcbitcXHQgKlxcbitcXHQgKiBOb3RlOiB0aGlzIGNvdW50ZXIgbWF5IHRlbXBvcmFyaWx5IHVuZGVyY291bnQgd2hlbiBwYWdlcyB3aXRoIGFuXFxuK1xcdCAqIG9ubGluZSBtZW1vcnkgbWFwIGV4aXN0IG91dHNpZGUgdGhlIGN1cnJlbnQgem9uZSBzcGFuLiBUaGlzIGNhblxcbitcXHQgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2ZcXG4rXFx0ICogcGFnZXMgdGhhdCBkbyBub3QgZmFsbCBpbnRvIGFueSB6b25lIHNwYW4uIEdyb3dpbmcgdGhlIHpvbmUgdG9cXG4rXFx0ICogY292ZXIgc3VjaCBwYWdlcyBhbmQgbGF0ZXIgc2hyaW5raW5nIGl0IGJhY2sgbWF5IHJlc3VsdCBpbiBhXFxuK1xcdCAqIFxcXCJ0b28gc21hbGxcXFwiIHZhbHVlLiBUaGlzIGlzIHNhZmU6IGl0IG1lcmVseSBwcmV2ZW50cyBkZXRlY3RpbmcgYVxcbitcXHQgKiBjb250aWd1b3VzIHpvbmUuXFxuK1xcdCAqXFxuIFxcdCAqIFNvIHByZXNlbnRfcGFnZXMgbWF5IGJlIHVzZWQgYnkgbWVtb3J5IGhvdHBsdWcgb3IgbWVtb3J5IHBvd2VyXFxuIFxcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcXG4gXFx0ICogKHByZXNlbnRfcGFnZXMgLSBtYW5hZ2VkX3BhZ2VzKS4gQW5kIG1hbmFnZWRfcGFnZXMgc2hvdWxkIGJlIHVzZWRcXG5AQCAtMTA1Niw2ICsxMDcxLDcgQEAgc3RydWN0IHpvbmUge1xcbiBcXHRhdG9taWNfbG9uZ190XFx0XFx0bWFuYWdlZF9wYWdlcztcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdHNwYW5uZWRfcGFnZXM7XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRwcmVzZW50X3BhZ2VzO1xcbitcXHR1bnNpZ25lZCBsb25nXFx0XFx0cGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwO1xcbiAjaWYgZGVmaW5lZChDT05GSUdfTUVNT1JZX0hPVFBMVUcpXFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRwcmVzZW50X2Vhcmx5X3BhZ2VzO1xcbiAjZW5kaWZcXG5AQCAtMTY4MSw2ICsxNjk3LDM4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX3pvbmVfZGV2aWNlKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rLyoqXFxuKyAqIHpvbmVfaXNfY29udGlndW91cyAtIHRlc3Qgd2hldGhlciBhIHpvbmUgaXMgY29udGlndW91c1xcbisgKiBAem9uZTogdGhlIHpvbmUgdG8gdGVzdC5cXG4rICpcXG4rICogSW4gYSBjb250aWd1b3VzIHpvbmUsIGl0IGlzIHZhbGlkIHRvIGNhbGwgcGZuX3RvX3BhZ2UoKSBvbiBhbnkgUEZOIGluIHRoZVxcbisgKiBzcGFubmVkIHpvbmUgd2l0aG91dCByZXF1aXJpbmcgcGZuX3ZhbGlkKCkgb3IgcGZuX3RvX29ubGluZV9wYWdlKCkgY2hlY2tzLlxcbisgKlxcbisgKiBOb3RlIHRoYXQgbWlzc2luZyBzeW5jaHJvbml6YXRpb24gd2l0aCBtZW1vcnkgb2ZmbGluaW5nIG1ha2VzIGFueSBQRk5cXG4rICogdHJhdmVyc2FsIHByb25lIHRvIHJhY2VzLlxcbisgKlxcbisgKiBaT05FX0RFVklDRSB6b25lcyBhcmUgYWx3YXlzIG1hcmtlZCBub24tY29udGlndW91cy5cXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB6b25lX2lzX2NvbnRpZ3VvdXMoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRSh6b25lLVxcdTAwM2Vjb250aWd1b3VzKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuK3tcXG4rXFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0aWYgKHpvbmUtXFx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwKVxcbitcXHRcXHRXUklURV9PTkNFKHpvbmUtXFx1MDAzZWNvbnRpZ3VvdXMsIHRydWUpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxcbit7XFxuK1xcdFdSSVRFX09OQ0Uoem9uZS1cXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm5zIHRydWUgaWYgYSB6b25lIGhhcyBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBidWRkeSBhbGxvY2F0b3IuXFxuICAqIEFsbCB0aGUgcmVjbGFpbSBkZWNpc2lvbnMgaGF2ZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhblxcbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxcbmluZGV4IDE4MWU3OWYxZDZhMjAuLmY5MzJiNzU3N2M5MmEgMTAwNjQ0XFxuLS0tIGEvbW0vaW50ZXJuYWwuaFxcbisrKyBiL21tL2ludGVybmFsLmhcXG5AQCAtODA1LDIxICs4MDUsMTUgQEAgZXh0ZXJuIHN0cnVjdCBwYWdlICpfX3BhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGVuZF9wZm4sIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuLVxcdGlmICh6b25lLVxcdTAwM2Vjb250aWd1b3VzKVxcbitcXHRpZiAoem9uZV9pc19jb250aWd1b3VzKHpvbmUpKVxcbiBcXHRcXHRyZXR1cm4gcGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKTtcXG4gXFxuIFxcdHJldHVybiBfX3BhZ2VibG9ja19wZm5fdG9fcGFnZShzdGFydF9wZm4sIGVuZF9wZm4sIHpvbmUpO1xcbiB9XFxuIFxcbi12b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpO1xcbiBib29sIHBmbl9yYW5nZV9pbnRlcnNlY3RzX3pvbmVzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXFxuLXtcXG4tXFx0em9uZS1cXHUwMDNlY29udGlndW91cyA9IGZhbHNlO1xcbi19XFxuLVxcbiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XFxuIGV4dGVybiB2b2lkIF9fcHV0YmFja19pc29sYXRlZF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdFxcdFxcdFxcdCAgICBpbnQgbXQpO1xcbmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbmluZGV4IDdhYzE5ZmFiMjI2MzIuLjhkYmQ1MGQ4ODE1NWEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xcbisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmNcXG5AQCAtNDIyLDQ5ICs0MjIsMzkgQEAgaW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbi0vKiBmaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pICovXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLVxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbitzdGF0aWMgYm9vbCBzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUodW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCB6b25lICp6b25lKVxcbiB7XFxuLVxcdGZvciAoOyBzdGFydF9wZm4gXFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gKz0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcXG4tXFx0XFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IEFMSUdOX0RPV04ocGZuLCBQQUdFU19QRVJfU1VCU0VDVElPTik7XFxuK1xcdGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IHN0YXJ0X3BmbiArIFBBR0VTX1BFUl9TVUJTRUNUSU9OIC0gMTtcXG4gXFxuLVxcdFxcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHN0YXJ0X3BmbikgIT0gbmlkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdC8qIEFsbCBwYWdlcyBpbiBhIHN1YnNlY3Rpb24gYXJlIGVpdGhlciBvbmxpbmUgb3Igb2ZmbGluZS4gKi9cXG4rXFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2Uoc3RhcnRfcGZuKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdFxcdGlmICh6b25lICE9IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdC8qIENoZWNraW5nIHN0YXJ0K2VuZCBpcyBzdWZmaWNpZW50LiAqL1xcbitcXHRyZXR1cm4gem9uZSA9PSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkgfHxcXG4rXFx0ICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTtcXG4rfVxcbiBcXG4tXFx0XFx0cmV0dXJuIHN0YXJ0X3BmbjtcXG4rLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbit7XFxuK1xcdGZvciAoOyBzdGFydF9wZm4gXFx1MDAzYyBlbmRfcGZuOyBzdGFydF9wZm4gKz0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcXG4rXFx0XFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShzdGFydF9wZm4sIHpvbmUpKVxcbitcXHRcXHRcXHRyZXR1cm4gc3RhcnRfcGZuO1xcbiBcXHR9XFxuLVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gLyogZmluZCB0aGUgYmlnZ2VzdCB2YWxpZCBwZm4gaW4gdGhlIHJhbmdlIFtzdGFydF9wZm4sIGVuZF9wZm4pLiAqL1xcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXFxuLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXG4tXFx0LyogcGZuIGlzIHRoZSBlbmQgcGZuIG9mIGEgbWVtb3J5IHNlY3Rpb24uICovXFxuLVxcdHBmbiA9IGVuZF9wZm4gLSAxO1xcbi1cXHRmb3IgKDsgcGZuIFxcdTAwM2U9IHN0YXJ0X3BmbjsgcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XFxuLVxcdFxcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHBmbikpKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcbi1cXHRcXHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2UocGZuKSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0cmV0dXJuIHBmbjtcXG4rXFx0Zm9yICg7IGVuZF9wZm4gXFx1MDAzZT0gc3RhcnRfcGZuOyBlbmRfcGZuIC09IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XFxuK1xcdFxcdGlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoZW5kX3BmbiAtIDEsIHpvbmUpKVxcbitcXHRcXHRcXHRyZXR1cm4gZW5kX3BmbiAtIDE7XFxuIFxcdH1cXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC00NzIsNyArNDYyLDYgQEAgc3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgcGZuO1xcbi1cXHRpbnQgbmlkID0gem9uZV90b19uaWQoem9uZSk7XFxuIFxcbiBcXHRpZiAoem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm4gPT0gc3RhcnRfcGZuKSB7XFxuIFxcdFxcdC8qXFxuQEAgLTQ4MSw3ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxcbiBcXHRcXHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcXG4rXFx0XFx0cGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3Bmbih6b25lLCBlbmRfcGZuLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHR6b25lX2VuZF9wZm4oem9uZSkpO1xcbiBcXHRcXHRpZiAocGZuKSB7XFxuIFxcdFxcdFxcdHpvbmUtXFx1MDAzZXNwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47XFxuQEAgLTQ5Nyw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4gXFx0XFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBiaWdnZXN0IHZhbGlkIG1lbV9zZWN0aW9uIGZvclxcbiBcXHRcXHQgKiBzaHJpbmtpbmcgem9uZS5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdHBmbiA9IGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihuaWQsIHpvbmUsIHpvbmUtXFx1MDAzZXpvbmVfc3RhcnRfcGZuLFxcbitcXHRcXHRwZm4gPSBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oem9uZSwgem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdGFydF9wZm4pO1xcbiBcXHRcXHRpZiAocGZuKVxcbiBcXHRcXHRcXHR6b25lLVxcdTAwM2VzcGFubmVkX3BhZ2VzID0gcGZuIC0gem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm4gKyAxO1xcbkBAIC01NTcsMTggKzU0NiwxMyBAQCB2b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXG4gXFx0LypcXG4gXFx0ICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTb1xcbi1cXHQgKiB3ZSB3aWxsIG5vdCB0cnkgdG8gc2hyaW5rIHRoZSB6b25lcyAtIHdoaWNoIGlzIG9rYXkgYXNcXG4tXFx0ICogc2V0X3pvbmVfY29udGlndW91cygpIGNhbm5vdCBkZWFsIHdpdGggWk9ORV9ERVZJQ0UgZWl0aGVyIHdheS5cXG4rXFx0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cXG4gXFx0ICovXFxuIFxcdGlmICh6b25lX2lzX3pvbmVfZGV2aWNlKHpvbmUpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuLVxcbiBcXHRzaHJpbmtfem9uZV9zcGFuKHpvbmUsIHN0YXJ0X3Bmbiwgc3RhcnRfcGZuICsgbnJfcGFnZXMpO1xcbiBcXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XFxuLVxcbi1cXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtNzQ2LDggKzczMCw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuIFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbiBcXHRpbnQgbmlkID0gcGdkYXQtXFx1MDAzZW5vZGVfaWQ7XFxuIFxcbi1cXHRjbGVhcl96b25lX2NvbnRpZ3VvdXMoem9uZSk7XFxuLVxcbiBcXHRpZiAoem9uZV9pc19lbXB0eSh6b25lKSlcXG4gXFx0XFx0aW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZSh6b25lLCBzdGFydF9wZm4sIG5yX3BhZ2VzKTtcXG4gXFx0cmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XFxuQEAgLTc3NSw4ICs3NTcsNiBAQCB2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbiBcXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxcbiBcXHRcXHRcXHQgTUVNSU5JVF9IT1RQTFVHLCBhbHRtYXAsIG1pZ3JhdGV0eXBlLFxcbiBcXHRcXHRcXHQgaXNvbGF0ZV9wYWdlYmxvY2spO1xcbi1cXG4tXFx0c2V0X3pvbmVfY29udGlndW91cyh6b25lKTtcXG4gfVxcbiBcXG4gc3RydWN0IGF1dG9fbW92YWJsZV9zdGF0cyB7XFxuQEAgLTEwNzIsNiArMTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuIFxcdGlmIChlYXJseV9zZWN0aW9uKF9fcGZuX3RvX3NlY3Rpb24ocGFnZV90b19wZm4ocGFnZSkpKSlcXG4gXFx0XFx0em9uZS1cXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyArPSBucl9wYWdlcztcXG4gXFx0em9uZS1cXHUwMDNlcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcXG4rXFx0em9uZS1cXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IG5yX3BhZ2VzO1xcbiBcXHR6b25lLVxcdTAwM2V6b25lX3BnZGF0LVxcdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKz0gbnJfcGFnZXM7XFxuIFxcbiBcXHRpZiAoZ3JvdXAgXFx1MDAyNlxcdTAwMjYgbW92YWJsZSlcXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggZjFhZmUwMjNlNGU3Mi4uZDYzZWU1NTRkN2ViOCAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtNzk5LDYgKzc5OSwyOCBAQCB2b2lkIF9fbWVtaW5pdCBpbml0X2RlZmVycmVkX3BhZ2UodW5zaWduZWQgbG9uZyBwZm4sIGludCBuaWQpXFxuIFxcdF9faW5pdF9kZWZlcnJlZF9wYWdlKHBmbiwgbmlkKTtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fVk1FTU1BUFxcbitzdGF0aWMgYm9vbCBfX2luaXQgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYm9vbCAqaXNfb25saW5lKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3Vic2VjdGlvbiA9IHBmbiBcXHUwMDI2IFBBR0VfU1VCU0VDVElPTl9NQVNLO1xcbitcXG4rXFx0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xcbitcXHRcXHQqaXNfb25saW5lID0gISFwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcXG4rXFx0XFx0Kmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247XFxuK1xcdH1cXG4rXFx0cmV0dXJuICppc19vbmxpbmU7XFxuK31cXG4rI2Vsc2VcXG4rc3RhdGljIGlubGluZSBib29sIHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgKmlzX29ubGluZSlcXG4re1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcXG4gICogYXJlIHplcm9lZCBhbmQgaW5pdGlhbGl6ZWQgYnkgZ29pbmcgdGhyb3VnaCBfX2luaXRfc2luZ2xlX3BhZ2UoKSBkdXJpbmdcXG5AQCAtODIyLDIyICs4NDQsMjcgQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxcbiAgKiAgIHNlY3Rpb24gdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSB6b25lL25vZGUgYmVsb3cuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXFxuLVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGludCB6b25lLCBpbnQgbm9kZSlcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzcGZuLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBsb25nIGVwZm4sXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4tXFx0dTY0IHBnY250ID0gMDtcXG4rXFx0dTY0IHBnY250ID0gMCwgb25saW5lX3BnY250ID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTtcXG4rXFx0Ym9vbCBpc19vbmxpbmUgPSBmYWxzZTtcXG4gXFxuIFxcdGZvcl9lYWNoX3ZhbGlkX3BmbihwZm4sIHNwZm4sIGVwZm4pIHtcXG4gXFx0XFx0X19pbml0X3NpbmdsZV9wYWdlKHBmbl90b19wYWdlKHBmbiksIHBmbiwgem9uZSwgbm9kZSk7XFxuIFxcdFxcdF9fU2V0UGFnZVJlc2VydmVkKHBmbl90b19wYWdlKHBmbikpO1xcbitcXHRcXHRpZiAodW5hdmFpbGFibGVfcGZuX2lzX29ubGluZShwZm4sIFxcdTAwMjZsYXN0X3N1YnNlY3Rpb24sIFxcdTAwMjZpc19vbmxpbmUpKVxcbitcXHRcXHRcXHRvbmxpbmVfcGdjbnQrKztcXG4gXFx0XFx0cGdjbnQrKztcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHBnY250KVxcbiBcXHRcXHRwcl9pbmZvKFxcXCJPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0bm9kZSwgem9uZV9uYW1lc1t6b25lXSwgcGdjbnQpO1xcbitcXHRyZXR1cm4gb25saW5lX3BnY250O1xcbiB9XFxuIFxcbiAvKlxcbkBAIC05MzQsOSArOTYxLDIxIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBtZW1tYXBfaW5pdF96b25lX3JhbmdlKHN0cnVjdCB6b25lICp6b25lLFxcbiBcXG4gXFx0bWVtbWFwX2luaXRfcmFuZ2UoZW5kX3BmbiAtIHN0YXJ0X3BmbiwgbmlkLCB6b25lX2lkLCBzdGFydF9wZm4sXFxuIFxcdFxcdFxcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xcbitcXHR6b25lLVxcdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcXG4rXFxuK1xcdGlmICgqaG9sZV9wZm4gXFx1MDAzYyBzdGFydF9wZm4pIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBob2xlX3N0YXJ0X3BmbiA9ICpob2xlX3BmbjtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBwZ2NudDtcXG4gXFxuLVxcdGlmICgqaG9sZV9wZm4gXFx1MDAzYyBzdGFydF9wZm4pXFxuLVxcdFxcdGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoKmhvbGVfcGZuLCBzdGFydF9wZm4sIHpvbmVfaWQsIG5pZCk7XFxuK1xcdFxcdGlmIChob2xlX3N0YXJ0X3BmbiBcXHUwMDNjIHpvbmVfc3RhcnRfcGZuKSB7XFxuK1xcdFxcdFxcdGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHpvbmVfc3RhcnRfcGZuLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgem9uZV9pZCwgbmlkKTtcXG4rXFx0XFx0XFx0aG9sZV9zdGFydF9wZm4gPSB6b25lX3N0YXJ0X3BmbjtcXG4rXFx0XFx0fVxcbitcXHRcXHRwZ2NudCA9IGluaXRfdW5hdmFpbGFibGVfcmFuZ2UoaG9sZV9zdGFydF9wZm4sIHN0YXJ0X3BmbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHpvbmVfaWQsIG5pZCk7XFxuK1xcdFxcdHpvbmUtXFx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBwZ2NudDtcXG4rXFx0fVxcbiBcXG4gXFx0KmhvbGVfcGZuID0gZW5kX3BmbjtcXG4gfVxcbkBAIC0yMTk1LDI4ICsyMjM0LDYgQEAgdm9pZCBfX2luaXQgaW5pdF9jbWFfcGFnZWJsb2NrKHN0cnVjdCBwYWdlICpwYWdlKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tdm9pZCBzZXRfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxcbi17XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmxvY2tfc3RhcnRfcGZuID0gem9uZS1cXHUwMDNlem9uZV9zdGFydF9wZm47XFxuLVxcdHVuc2lnbmVkIGxvbmcgYmxvY2tfZW5kX3BmbjtcXG4tXFxuLVxcdGJsb2NrX2VuZF9wZm4gPSBwYWdlYmxvY2tfZW5kX3BmbihibG9ja19zdGFydF9wZm4pO1xcbi1cXHRmb3IgKDsgYmxvY2tfc3RhcnRfcGZuIFxcdTAwM2Mgem9uZV9lbmRfcGZuKHpvbmUpO1xcbi1cXHRcXHRcXHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxcbi1cXHRcXHRcXHQgYmxvY2tfZW5kX3BmbiArPSBwYWdlYmxvY2tfbnJfcGFnZXMpIHtcXG4tXFxuLVxcdFxcdGJsb2NrX2VuZF9wZm4gPSBtaW4oYmxvY2tfZW5kX3Bmbiwgem9uZV9lbmRfcGZuKHpvbmUpKTtcXG4tXFxuLVxcdFxcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuLVxcbi1cXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xcbi1cXHR6b25lLVxcdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcXG4tfVxcbi1cXG4gLypcXG4gICogQ2hlY2sgaWYgYSBQRk4gcmFuZ2UgaW50ZXJzZWN0cyBtdWx0aXBsZSB6b25lcyBvbiBvbmUgb3IgbW9yZVxcbiAgKiBOVU1BIG5vZGVzLiBTcGVjaWZ5IHRoZSBAbmlkIGFyZ3VtZW50IGlmIGl0IGlzIGtub3duIHRoYXQgdGhpc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNjo0MC40NTY2NDM3OTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzkxNjEzMTk2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvbmxpbmVfcGFnZXNcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIixcbiAgICBcIm1vdmVfcGZuX3JhbmdlX3RvX3pvbmVcIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJfX2FkZF9wYWdlc1wiLFxuICAgIFwiX19yZW1vdmVfcGFnZXNcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5pbmRleCBiNzYxODM1NDVlNWJmLi5jZWVhNmM4YjI3Y2MxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbkBAIC00ODMsNiArNDgzLDEyIEBAIEdlbmVyYWxcbiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXRcbiAgIGlzIGluaXRpYWxpemVkIGJ5IGBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcygpYGAuXG4gXG4rYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYFxuKyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmRcbisgIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZFxuKyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yXG4rICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuXG4rXG4gYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGBcbiAgIFRoZSBwcmVzZW50IHBhZ2VzIGV4aXN0aW5nIHdpdGhpbiB0aGUgem9uZSBsb2NhdGVkIG9uIG1lbW9yeSBhdmFpbGFibGUgc2luY2VcbiAgIGVhcmx5IGJvb3QsIGV4Y2x1ZGluZyBob3RwbHVnZ2VkIG1lbW9yeS4gRGVmaW5lZCBvbmx5IHdoZW5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbmluZGV4IGJjZmUyZDlmNGFkYmQuLjk3Njk5YmU5YTM1NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XG4gXHRcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcbiBcdFx0aWYgKHJldClcbkBAIC0yNzAsNiArMjcxLDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcbiBcdG1lbS1cdTAwM2V6b25lID0gem9uZTtcbiBvdXQ6XG4rXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjk1LDYgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG4gXHRcdFx0XHRcdCAgLW5yX3ZtZW1tYXBfcGFnZXMpO1xuQEAgLTMxMiw4ICszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0bWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7XG4gXG4tXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4rXHRpZiAoIXJldClcbitcdFx0bWVtLVx1MDAzZXpvbmUgPSBOVUxMO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICsxMDMyLDIxIEBAIHN0cnVjdCB6b25lIHtcbiBcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXG4gXHQgKiAoTUlHUkFURV9DTUEpLlxuIFx0ICpcbitcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuK1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZVxuK1x0ICogbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQgcGZuX3RvX29ubGluZV9wYWdlKClcbitcdCAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLFxuK1x0ICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55XG4rXHQgKiBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXG4rXHQgKlxuK1x0ICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhblxuK1x0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXG4rXHQgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2ZcbitcdCAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvXG4rXHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcbitcdCAqIFwidG9vIHNtYWxsXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXG4rXHQgKiBjb250aWd1b3VzIHpvbmUuXG4rXHQgKlxuIFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcbiBcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcbiBcdCAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkXG5AQCAtMTA1Niw2ICsxMDcxLDcgQEAgc3RydWN0IHpvbmUge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRtYW5hZ2VkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzcGFubmVkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwYWdlc193aXRoX29ubGluZV9tZW1tYXA7XG4gI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X2Vhcmx5X3BhZ2VzO1xuICNlbmRpZlxuQEAgLTE2ODEsNiArMTY5NywzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB9XG4gI2VuZGlmXG4gXG4rLyoqXG4rICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzXG4rICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuXG4rICpcbisgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlXG4rICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy5cbisgKlxuKyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTlxuKyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy5cbisgKlxuKyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4rXHRcdHJldHVybjtcbitcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4rXHRcdFdSSVRFX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xuK31cbitcbiAvKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cbiAgKiBBbGwgdGhlIHJlY2xhaW0gZGVjaXNpb25zIGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMC4uZjkzMmI3NTc3YzkyYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC04MDUsMjEgKzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbitcdGlmICh6b25lX2lzX2NvbnRpZ3VvdXMoem9uZSkpXG4gXHRcdHJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pO1xuIFxuIFx0cmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7XG4gfVxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuLXtcbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IGZhbHNlO1xuLX1cbi1cbiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdCAgICBpbnQgbXQpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyLi44ZGJkNTBkODgxNTVhIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTQyMiw0OSArNDIyLDM5IEBAIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyBib29sIHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBBTElHTl9ET1dOKHBmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICsgUEFHRVNfUEVSX1NVQlNFQ1RJT04gLSAxO1xuIFxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBBbGwgcGFnZXMgaW4gYSBzdWJzZWN0aW9uIGFyZSBlaXRoZXIgb25saW5lIG9yIG9mZmxpbmUuICovXG4rXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBDaGVja2luZyBzdGFydCtlbmQgaXMgc3VmZmljaWVudC4gKi9cbitcdHJldHVybiB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSB8fFxuK1x0ICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTtcbit9XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4rLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4re1xuK1x0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4rXHRcdGlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoc3RhcnRfcGZuLCB6b25lKSlcbitcdFx0XHRyZXR1cm4gc3RhcnRfcGZuO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIGZpbmQgdGhlIGJpZ2dlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKS4gKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cbi1cdC8qIHBmbiBpcyB0aGUgZW5kIHBmbiBvZiBhIG1lbW9yeSBzZWN0aW9uLiAqL1xuLVx0cGZuID0gZW5kX3BmbiAtIDE7XG4tXHRmb3IgKDsgcGZuIFx1MDAzZT0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbi1cdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRyZXR1cm4gcGZuO1xuK1x0Zm9yICg7IGVuZF9wZm4gXHUwMDNlPSBzdGFydF9wZm47IGVuZF9wZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbitcdFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpXG4rXHRcdFx0cmV0dXJuIGVuZF9wZm4gLSAxO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ3Miw3ICs0NjIsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdGludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTtcbiBcbiBcdGlmICh6b25lLVx1MDAzZXpvbmVfc3RhcnRfcGZuID09IHN0YXJ0X3Bmbikge1xuIFx0XHQvKlxuQEAgLTQ4MSw3ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxuIFx0XHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcbitcdFx0cGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3Bmbih6b25lLCBlbmRfcGZuLFxuIFx0XHRcdFx0XHRcdHpvbmVfZW5kX3Bmbih6b25lKSk7XG4gXHRcdGlmIChwZm4pIHtcbiBcdFx0XHR6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47XG5AQCAtNDk3LDcgKzQ4Niw3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHQgKiBJbiB0aGlzIGNhc2UsIHdlIGZpbmQgc2Vjb25kIGJpZ2dlc3QgdmFsaWQgbWVtX3NlY3Rpb24gZm9yXG4gXHRcdCAqIHNocmlua2luZyB6b25lLlxuIFx0XHQgKi9cbi1cdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgem9uZS1cdTAwM2V6b25lX3N0YXJ0X3BmbixcbitcdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgICAgICBzdGFydF9wZm4pO1xuIFx0XHRpZiAocGZuKVxuIFx0XHRcdHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gKyAxO1xuQEAgLTU1NywxOCArNTQ2LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4gXG4gXHQvKlxuIFx0ICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTb1xuLVx0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayB0aGUgem9uZXMgLSB3aGljaCBpcyBva2F5IGFzXG4tXHQgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LlxuK1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gKyBucl9wYWdlcyk7XG4gXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XG4tXG4tXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIH1cbiBcbiAvKipcbkBAIC03NDYsOCArNzMwLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdGlmICh6b25lX2lzX2VtcHR5KHpvbmUpKVxuIFx0XHRpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xuIFx0cmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG5AQCAtNzc1LDggKzc1Nyw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiArMTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4gXHRpZiAoZWFybHlfc2VjdGlvbihfX3Bmbl90b19zZWN0aW9uKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpXG4gXHRcdHpvbmUtXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyArPSBucl9wYWdlcztcbiBcdHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbitcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIuLmQ2M2VlNTU0ZDdlYjggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTc5OSw2ICs3OTksMjggQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFx0X19pbml0X2RlZmVycmVkX3BhZ2UocGZuLCBuaWQpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4rc3RhdGljIGJvb2wgX19pbml0IHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4rXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgKmlzX29ubGluZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIHN1YnNlY3Rpb24gPSBwZm4gXHUwMDI2IFBBR0VfU1VCU0VDVElPTl9NQVNLO1xuK1xuK1x0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xuK1x0XHQqaXNfb25saW5lID0gISFwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcdFx0Kmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247XG4rXHR9XG4rXHRyZXR1cm4gKmlzX29ubGluZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbixcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbisjZW5kaWZcbitcbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTgyMiwyMiArODQ0LDI3IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxuICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxuLVx0XHRcdFx0XHQgIGludCB6b25lLCBpbnQgbm9kZSlcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlcGZuLFxuK1x0XHRcdFx0XHRcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHU2NCBwZ2NudCA9IDA7XG4rXHR1NjQgcGdjbnQgPSAwLCBvbmxpbmVfcGdjbnQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTtcbitcdGJvb2wgaXNfb25saW5lID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XG4gXHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xuIFx0XHRfX1NldFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTtcbitcdFx0aWYgKHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUocGZuLCBcdTAwMjZsYXN0X3N1YnNlY3Rpb24sIFx1MDAyNmlzX29ubGluZSkpXG4rXHRcdFx0b25saW5lX3BnY250Kys7XG4gXHRcdHBnY250Kys7XG4gXHR9XG4gXG4gXHRpZiAocGdjbnQpXG4gXHRcdHByX2luZm8oXCJPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xcblwiLFxuIFx0XHRcdG5vZGUsIHpvbmVfbmFtZXNbem9uZV0sIHBnY250KTtcbitcdHJldHVybiBvbmxpbmVfcGdjbnQ7XG4gfVxuIFxuIC8qXG5AQCAtOTM0LDkgKzk2MSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXRfem9uZV9yYW5nZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxuIFx0XHRcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xuK1x0em9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbitcbitcdGlmICgqaG9sZV9wZm4gXHUwMDNjIHN0YXJ0X3Bmbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuO1xuK1x0XHR1bnNpZ25lZCBsb25nIHBnY250O1xuIFxuLVx0aWYgKCpob2xlX3BmbiBcdTAwM2Mgc3RhcnRfcGZuKVxuLVx0XHRpbml0X3VuYXZhaWxhYmxlX3JhbmdlKCpob2xlX3Bmbiwgc3RhcnRfcGZuLCB6b25lX2lkLCBuaWQpO1xuK1x0XHRpZiAoaG9sZV9zdGFydF9wZm4gXHUwMDNjIHpvbmVfc3RhcnRfcGZuKSB7XG4rXHRcdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgem9uZV9zdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHRcdGhvbGVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47XG4rXHRcdH1cbitcdFx0cGdjbnQgPSBpbml0X3VuYXZhaWxhYmxlX3JhbmdlKGhvbGVfc3RhcnRfcGZuLCBzdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBwZ2NudDtcbitcdH1cbiBcbiBcdCpob2xlX3BmbiA9IGVuZF9wZm47XG4gfVxuQEAgLTIxOTUsMjggKzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xuLVxuLVx0XHRibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7XG4tXG4tXHRcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxuLVx0XHRcdFx0XHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4tXG4tXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXG4gICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjQwLjQ1NjY0NTAwNloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjc2NDY2MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgU2NvcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIHRoYXQgd2FycmFudCBmdXp6aW5nIGF0dGVudGlvbi4gU2VlbXMgbGlrZSBpdCdzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGhvdHBsdWcsIHdoaWNoIGFsd2F5cyByYWlzZXMgYSBmbGFnLlxuXG5MZXQncyBicmVhayBkb3duIHRoZSBjaGFuZ2VzOiBGcm9tIHdoYXQgSSdtIHNlZWluZywgdGhpcyBwYXRjaCBpcyByZWZhY3RvcmluZyB0aGUgdHJhY2tpbmcgb2YgY29udGlndW91cyBtZW1vcnkgem9uZXMuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIG9wdGltaXppbmcgdGhlIGNhbGN1bGF0aW9uIG9mIGB6b25lLVx1MDAzZWNvbnRpZ3VvdXNgLiBJbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIHBhZ2VibG9ja3MsIGl0J3Mgbm93IHVzaW5nIGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGFuZCBpbnRyb2R1Y2luZyBgem9uZV9pc19jb250aWd1b3VzKClgLCBgc2V0X3pvbmVfY29udGlndW91cygpYCwgYW5kIGBjbGVhcl96b25lX2NvbnRpZ3VvdXMoKWAgd2hpY2ggaXMgbW9yZSBlZmZpY2llbnQsIGVzcGVjaWFsbHkgaW4gbGFyZ2VyIHpvbmVzLlxuXG5TcGVjaWZpY2FsbHksIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG86XG5cbiogICBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGA6IERlZmluaW5nIHRoZSBuZXcgZGF0YSBhbmQgZnVuY3Rpb25zLlxuKiAgIGBtbS9pbnRlcm5hbC5oYDogUmVwbGFjaW5nIHNvbWUgb2YgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIHdpdGggdGhlIG5ldyBoZWxwZXIgZnVuY3Rpb25zLlxuKiAgIGBtbS9tZW1vcnlfaG90cGx1Zy5jYDogVXBkYXRpbmcgc29tZSBvZiB0aGUgaG90cGx1ZyByb3V0aW5lcyBhbmQgaW50cm9kdWNpbmcgaGVscGVyIGZ1bmN0aW9ucy5cbiogICBgbW0vbW1faW5pdC5jYDogSW5pdGlhbGl6aW5nIHRoaW5ncyBmb3IgaG90cGx1ZyB3aXRoIHRoaXMgdXBkYXRlZCBpbXBsZW1lbnRhdGlvbi5cbiogICBgZHJpdmVycy9iYXNlL21lbW9yeS5jYDogQW5kIGltcG9ydGFudGx5LCBjaGFuZ2luZyBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAsIHdoaWNoIGFyZSBzeXNmcyBleHBvc2VkLCBzbyBpbnRlcmVzdGluZy5cblxuVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgY29udGlndW91cyBtZW1vcnkgaXMgbWFuYWdlZC4gSXQncyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFpbWVkIGF0IHBlcmZvcm1hbmNlLCB0aGF0IGlzIHdvcnRoIGFuYWx5emluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgYXMgZXZlbiBwZXJmb3JtYW5jZS1yZWxhdGVkIGNoYW5nZXMgY2FuIGhhdmUgc3VidGxlIGVmZmVjdHMgb24gdGhlIHN5c3RlbSdzIGJlaGF2aW9yLiBJIGNhbiBzZWUgdGhhdCB0aGlzIGlzIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIOKAkyBlc3BlY2lhbGx5IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEtWTSwgb3IgZXZlbiBBQ1BJIG1lbW9yeSBob3RwbHVnIG9yIHZpcnRpby1tZW0uXG5cblRoZSBgbW1faW5pdC5jYCBjaGFuZ2VzIG1lYW4gdGhpcyB3aWxsIGFsc28gYmUgZXhlY3V0ZWQgYXQgYm9vdCB0aW1lLCBhbmQgdGhhdCdzIHNvbWV0aGluZyBlbHNlIHRvIGtlZXAgaW4gbWluZC5cblxuTXkgdGhvdWdodCBwcm9jZXNzIGlzOiB3aGF0IHBhcnRzIGFyZSBtb3N0IGludGVyZXN0aW5nIHRvIGxvb2sgYXQ/XG5cbmBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgdHJpZ2dlcmVkIHZpYSBzeXNmcywgbWFraW5nIHRoZW0gcHJpbWUgZnV6emluZyB0YXJnZXRzIGR1ZSB0byB0aGVpciBleHRlcm5hbCBpbnRlcmZhY2UuIEFsc28sIGBfX2FkZF9wYWdlc2AgYW5kIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCwgYW5kIGBhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50YCwgdXNlZCBpbiBtZW1vcnkgaG90cGx1Zy4gTGV0J3Mgc2VlIGlmIENPTkZJR19NRU1PUllfSE9UUExVRyBpcyBzZXQ7IHNpbmNlIHRoaXMgaXMga2VybmVsLCBpdCdzIHByb2JhYmx5IGFsbW9zdCBhbHdheXMgZW5hYmxlZCBmb3IgZnV6emluZyBrZXJuZWxzLlxuXG5Ob3csIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBncmFwaCBmb3IgYG1lbW9yeV9ibG9ja19vbmxpbmVgLiBTaW5jZSBpdCdzIGEgc3RhdGljIGZ1bmN0aW9uLCBpdHMgY2FsbGluZyBjb250ZXh0cyBhcmUgbGltaXRlZCwgYnV0IGZpbmRpbmcgdGhlbSBpcyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTgyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODI1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6NTAuNzMzMTE0MDE1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODk3MTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9ibG9ja19vbmxpbmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMTU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1lbWJsa19ucl9wb2lzb24oc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyMy0gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjI0OnN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29ubGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTIyNS17XFxuLS1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM9MzMxPW1lbW9yeV9ibG9ja19hY3Rpb24oc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtLCB1bnNpZ25lZCBsb25nIGFjdGlvbilcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzYtXFx0Y2FzZSBNRU1fT05MSU5FOlxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYzozMzc6XFx0XFx0cmV0ID0gbWVtb3J5X2Jsb2NrX29ubGluZShtZW0pO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMzgtXFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjUwLjc3ODAxNjExOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTE1MzAzMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBTdWJzeXN0ZW0gT25saW5lIFRyaWdnZXIqKlxuXG5SaWdodCwgc28gYG1lbW9yeV9ibG9ja19hY3Rpb25gIGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgdWx0aW1hdGVseSBiZWluZyBjYWxsZWQgaGVyZS4gVGhhdCdzIHRoZSBrZXkgb3BlcmF0aW9uLiBBbmQgd2hlcmUncyBpdCBjb21pbmcgZnJvbT8gQWgsIGl0J3MgYmVpbmcgdHJpZ2dlcmVkIHZpYSBgbWVtb3J5X3N1YnN5c19vbmxpbmVgLiBJbnRlcmVzdGluZy4gYG1lbW9yeV9zdWJzeXNfb25saW5lYCBpdHNlbGYgaXMgaW5pdGlhdGVkIGJ5IGEgc3lzZnMgZXZlbnQuXG5cblNvLCB0aGUgY2F1c2FsIGNoYWluIGlzOiBzeXNmcyBldmVudCAtXHUwMDNlIGBtZW1vcnlfc3Vic3lzX29ubGluZWAgLVx1MDAzZSBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAuIEdpdmVuIHRoYXQsIG15IGZvY3VzIG5vdyBuZWVkcyB0byBiZSBvbiBgbWVtb3J5X3N1YnN5c19vbmxpbmVgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hhdCogaXQncyBkb2luZywgKndoeSogaXQncyBkb2luZyBpdCwgYW5kICpob3cqIHRoYXQgcmVsYXRlcyB0byB0aGUgc3lzZnMgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgaXQgaW4gdGhlIGZpcnN0IHBsYWNlLiBJcyB0aGlzIGEgaG90cGx1ZyBzY2VuYXJpbz8gRHluYW1pYyBtZW1vcnkgYWxsb2NhdGlvbj8gV2hhdCdzIHRoZSBjb250ZXh0PyBMZXQncyBkaXZlIGludG8gdGhlIGBtZW1vcnlfc3Vic3lzX29ubGluZWAgY29kZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgb25saW5lIHByb2NlZHVyZSB0byBiZSBhYmxlIHRvIHByZWRpY3Qgd2hhdCBgbWVtb3J5X2Jsb2NrX2FjdGlvbmAgd2lsbCBldmVudHVhbGx5IGRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6NTQuMTY5NTQ4NjE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzU4MzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9zdWJzeXNfb25saW5lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jhc2UvbWVtb3J5LmM9NTM9RVhQT1JUX1NZTUJPTChzZWN0aW9uc19wZXJfYmxvY2spO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01NC1cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NTU6c3RhdGljIGludCBtZW1vcnlfc3Vic3lzX29ubGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy01Ni1zdGF0aWMgaW50IG1lbW9yeV9zdWJzeXNfb2ZmbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYpO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgbWVtb3J5X3N1YnN5cyA9IHtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02MC1cXHQuZGV2X25hbWUgPSBNRU1PUllfQ0xBU1NfTkFNRSxcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6NjE6XFx0Lm9ubGluZSA9IG1lbW9yeV9zdWJzeXNfb25saW5lLFxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy02Mi1cXHQub2ZmbGluZSA9IG1lbW9yeV9zdWJzeXNfb2ZmbGluZSxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYz0zNTE9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfY2hhbmdlX3N0YXRlKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSxcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zNjgtLyogVGhlIGRldmljZSBsb2NrIHNlcmlhbGl6ZXMgb3BlcmF0aW9ucyBvbiBtZW1vcnlfc3Vic3lzX1tvbmxpbmV8b2ZmbGluZV0gKi9cXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MzY5OnN0YXRpYyBpbnQgbWVtb3J5X3N1YnN5c19vbmxpbmUoc3RydWN0IGRldmljZSAqZGV2KVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zNzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNjo1NC4yMTQ5MTUyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDI2OTU5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgU3lzdGVtIFRyaWdnZXIqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHRoYXQncyB0cmlnZ2VyZWQgdGhyb3VnaCBzeXNmcyDigJMgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gQnV0LCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGEgc3BlY2lmaWMgZnVuY3Rpb246IGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYC4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIHRoZSBtZWNoYW5pc20gYmVpbmcgdXNlZCwgb3IgaWYgaXQncyByZWxhdGVkIHRvIHRoZSBjdXJyZW50IHRyaWdnZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHN5c2ZzLCBvciBpZiBpdCdzIGV2ZW4gcGFydCBvZiB0aGUgY3VycmVudCBwcm9ibGVtLiBQZXJoYXBzIHRoZSBxdWVzdGlvbiBpc24ndCB3aGV0aGVyIGl0J3MgcmVsYXRlZCwgYnV0IGhvdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA2OjU3LjI1NzYxMjkwOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzA4Njk3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTcxMT1zdGF0aWMgaW5saW5lIHZvaWQgc2VjdGlvbl90YWludF96b25lX2RldmljZSh1bnNpZ25lZCBsb25nIHBmbilcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI0LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NzI1OnZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxubW0vbWVtb3J5X2hvdHBsdWcuYy03MjYtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDY0PWludCBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDczLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTA3NDpcXHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfVU5NT1ZBQkxFLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA3NS1cXHRcXHRcXHQgICAgICAgZmFsc2UpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNDUtXFx0LyogYXNzb2NpYXRlIHBmbiByYW5nZSB3aXRoIHRoZSB6b25lICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMTQ2OlxcdG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoem9uZSwgcGZuLCBucl9wYWdlcywgTlVMTCwgTUlHUkFURV9NT1ZBQkxFLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTE0Ny1cXHRcXHRcXHQgICAgICAgdHJ1ZSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTIxNjY9dm9pZCB0cnlfb2ZmbGluZV9ub2RlKGludCBuaWQpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNzEtXFx0ICogSWYgdGhlIG5vZGUgc3RpbGwgc3BhbnMgcGFnZXMgKGVzcGVjaWFsbHkgWk9ORV9ERVZJQ0UpLCBkb24ndFxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE3MjpcXHQgKiBvZmZsaW5lIGl0LiBBIG5vZGUgc3BhbnMgbWVtb3J5IGFmdGVyIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoKSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNzMtXFx0ICogZS5nLiwgYWZ0ZXIgdGhlIG1lbW9yeSBibG9jayB3YXMgb25saW5lZC5cXG4tLVxcbm1tL21lbXJlbWFwLmM9MTQ0PXN0YXRpYyBpbnQgcGFnZW1hcF9yYW5nZShzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwLCBzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zLFxcbi0tXFxubW0vbWVtcmVtYXAuYy0yMjgtXFx0XFx0em9uZSA9IFxcdTAwMjZOT0RFX0RBVEEobmlkKS1cXHUwMDNlbm9kZV96b25lc1taT05FX0RFVklDRV07XFxubW0vbWVtcmVtYXAuYzoyMjk6XFx0XFx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbm1tL21lbXJlbWFwLmMtMjMwLVxcdFxcdFxcdFxcdFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpLCBwYXJhbXMtXFx1MDAzZWFsdG1hcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDY6NTcuMzA0NzAyODMyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzMTc1NDIxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBNZW50YWwgV2Fsa3Rocm91Z2ggb2YgTWVtb3J5IEhvdHBsdWcgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHdyYXAgbXkgaGVhZCBhcm91bmQgdGhpcyBtZW1vcnkgaG90cGx1ZyBpbXBsZW1lbnRhdGlvbi4gSSBzZWUgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGJlaW5nIGNhbGxlZCDigJMgdGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBvYnZpb3VzbHkg4oCTIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBtYWluIHBhdGhzIHRvIGl0IGFyZSB0aHJvdWdoIGBvbmxpbmVfcGFnZXNgIGFuZCBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAuIFJpZ2h0LCBtYWtlcyBzZW5zZSBzbyBmYXIuIE5vdywgYG9ubGluZV9wYWdlc2AgaXRzZWxmIGlzIHRyaWdnZXJlZCBieSBgbWVtb3J5X2Jsb2NrX29ubGluZWAuIEFoYSEgVGhhdCB0ZWxscyBtZSBgbWVtb3J5X2Jsb2NrX29ubGluZWAgYW5kIGJ5IGV4dGVuc2lvbiwgaXRzIGNvdW50ZXJwYXJ0IGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAsIGFyZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludHMgZm9yIGRlYWxpbmcgd2l0aCB0aGlzIHdob2xlIGhvdHBsdWcgZnVuY3Rpb25hbGl0eS4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZC4gV2FpdCBhIHNlY29uZCwgZGlkbid0IEkgbm90aWNlIHRoYXQgYG1lbW9yeV9ibG9ja19vbmxpbmVgIGlzIGFjdHVhbGx5IGRlY2xhcmVkIGFzIGBzdGF0aWNgPyBUaGF0J3PigKYgaW50ZXJlc3RpbmcuIEl0IGxpbWl0cyBpdHMgdmlzaWJpbGl0eSB3aXRoaW4gdGhlIG1vZHVsZSwgZm9yIHN1cmUuIFNvLCB0aGVuIHdoYXQgYWJvdXQgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYD8gSSBuZWVkIHRvIGdvIGRlZXBlciBhbmQgdW5kZXJzdGFuZCB0aGVpciByb2xlIGluIHRoaXMuIEknbSBnb2luZyB0byBoYXZlIHRvIHRyYWNlIHRob3NlIGNhbGxzIHRvIHNlZSBob3cgdGhleSBmaXQgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjY5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjAxLjczNjQ2MDMzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNzgzMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ubGluZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz02MzM9RVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXJpY19vbmxpbmVfcGFnZSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy02MzQtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo2MzU6c3RhdGljIHZvaWQgb25saW5lX3BhZ2VzX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNjM2LXtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9OTM3PXN0YXRpYyBzdHJ1Y3Qgem9uZSAqYXV0b19tb3ZhYmxlX3pvbmVfZm9yX3BmbihpbnQgbmlkLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy05NDEte1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6OTQyOlxcdHVuc2lnbmVkIGxvbmcgb25saW5lX3BhZ2VzID0gMCwgbWF4X3BhZ2VzLCBlbmRfcGZuO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtOTQzLVxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy05NDktXFx0XFx0bWF4X3BhZ2VzID0gZ3JvdXAtXFx1MDAzZXMubWF4X3BhZ2VzO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6OTUwOlxcdFxcdG9ubGluZV9wYWdlcyA9IGdyb3VwLVxcdTAwM2VwcmVzZW50X21vdmFibGVfcGFnZXM7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy05NTEtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk3My1cXHRcXHRcXHRcXHRnb3RvIGtlcm5lbF96b25lO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6OTc0OlxcdFxcdFxcdG9ubGluZV9wYWdlcyArPSBQQUdFU19QRVJfU0VDVElPTjtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk3NS1cXHRcXHR9XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk4Mi1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjk4MzpcXHRucl9wYWdlcyA9IG1heF9wYWdlcyAtIG9ubGluZV9wYWdlcztcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTk4NC1cXHRpZiAoIWF1dG9fbW92YWJsZV9jYW5fb25saW5lX21vdmFibGUoTlVNQV9OT19OT0RFLCBncm91cCwgbnJfcGFnZXMpKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMDk1PXZvaWQgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTE3LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTExODppbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExOS1cXHRcXHQgICAgICAgc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTgwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MTpcXHRvbmxpbmVfcGFnZXNfcmFuZ2UocGZuLCBucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTgyLVxcdGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnQocGZuX3RvX3BhZ2UocGZuKSwgZ3JvdXAsIG5yX3BhZ2VzKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyMi1mYWlsZWRfYWRkaXRpb246XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjIzOlxcdHByX2RlYnVnKFxcXCJvbmxpbmVfcGFnZXMgW21lbSAlIzAxMGxseC0lIzAxMGxseF0gZmFpbGVkXFxcXG5cXFwiLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyNC1cXHRcXHQgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGZuIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE0NzU9aW50IGFkZF9tZW1vcnlfcmVzb3VyY2UoaW50IG5pZCwgc3RydWN0IHJlc291cmNlICpyZXMsIG1ocF90IG1ocF9mbGFncylcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU1My1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1NTQ6XFx0LyogZGV2aWNlX29ubGluZSgpIHdpbGwgdGFrZSB0aGUgbG9jayB3aGVuIGNhbGxpbmcgb25saW5lX3BhZ2VzKCkgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE1NTUtXFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODgzPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTE2LVxcdCAqIENvbnNlcXVlbnRseSwgbWVtb3J5IGJsb2NrcyB3aXRoIGhvbGVzIGNhbiBuZXZlciBnZXQgb25saW5lZFxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTkxNzpcXHQgKiB2aWEgdGhlIGhvdHBsdWcgcGF0aCAtIG9ubGluZV9wYWdlcygpIC0gYXMgaG90cGx1Z2dlZCBtZW1vcnkgaGFzXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xOTE4LVxcdCAqIG5vIGhvbGVzLiBUaGlzIHdheSwgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBtZW1vcnkgaG9sZXMsXFxuLS1cXG5tbS9tbV9pbml0LmM9MTUyMz12b2lkIF9fcmVmIGZyZWVfYXJlYV9pbml0X2NvcmVfaG90cGx1ZyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbW1faW5pdC5jLTE1NTQtXFx0ICogY2xlYXIgYWxsIHpvbmVzJyBwcmVzZW50X3BhZ2VzIGFuZCBtYW5hZ2VkX3BhZ2VzIGJlY2F1c2UgdGhleSB3aWxsXFxubW0vbW1faW5pdC5jOjE1NTU6XFx0ICogYmUgdXBkYXRlZCBpbiBvbmxpbmVfcGFnZXMoKSBhbmQgb2ZmbGluZV9wYWdlcygpLlxcbm1tL21tX2luaXQuYy0xNTU2LVxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzowMS44MzkyNDkyMzNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU2ODc0OTQxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29uc2lkZXJpbmcgU3RhdGljIENvbnRlbnQgXHUwMDI2IEV4cG9ydGVkIERhdGEqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHdlJ3JlIGhhbmRsaW5nIHRoZSBwcmVzZW50YXRpb24gb2Ygb3VyIGRhdGEuIEknbSBmb2N1c2luZyBvbiB0aGUgZXhwb3J0ZWQsIG9yIG5vbi1zdGF0aWMsIGNvbXBvbmVudHMgcmVwcmVzZW50ZWQgYnkgYG9ubGluZV9wYWdlc2AgYW5kIGBvZmZsaW5lX3BhZ2VzYC4gSSBuZWVkIHRvIGVuc3VyZSBldmVyeXRoaW5nJ3MgcHJvcGVybHkgYWNjb3VudGVkIGZvciwgYW5kIHRoYXQgdGhlIGV4cG9ydCBwcm9jZXNzIGlzIHJvYnVzdC4gU2luY2UgYm90aCBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIGFyZSBub24tc3RhdGljIGFuZCBwcm9iYWJseSBjb250YWluIHVzZWZ1bCBpbmZvcm1hdGlvbiwgSSBzaG91bGQgY2hlY2sgb24gdGhlIGBvZmZsaW5lX3BhZ2VzYCBjb21wb25lbnQgYXMgd2VsbC4gTGV0J3MgbWFrZSBzdXJlIGl04oCZcyBoYW5kbGVkIGp1c3QgYXMgY2FyZWZ1bGx5IGFzIHRoZSBvbmxpbmUgY29tcG9uZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTczNSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjA2LjQwODAwMTQxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDExNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZmbGluZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz01Mjg9dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTY3LSAqIHN1cmUgdGhhdCBwYWdlcyBhcmUgbWFya2VkIHJlc2VydmVkIGFuZCB6b25lcyBhcmUgYWRqdXN0IHByb3Blcmx5IGJ5XFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Njg6ICogY2FsbGluZyBvZmZsaW5lX3BhZ2VzKCkuXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NjktICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE4NzE9c3RhdGljIGludCBjb3VudF9zeXN0ZW1fcmFtX3BhZ2VzX2NiKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xODgyLSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTg4MzppbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE4ODQtXFx0XFx0XFx0c3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBtZW1vcnlfZ3JvdXAgKmdyb3VwKVxcbi0tXFxubW0vbW1faW5pdC5jPTE1MjM9dm9pZCBfX3JlZiBmcmVlX2FyZWFfaW5pdF9jb3JlX2hvdHBsdWcoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xNTU0LVxcdCAqIGNsZWFyIGFsbCB6b25lcycgcHJlc2VudF9wYWdlcyBhbmQgbWFuYWdlZF9wYWdlcyBiZWNhdXNlIHRoZXkgd2lsbFxcbm1tL21tX2luaXQuYzoxNTU1OlxcdCAqIGJlIHVwZGF0ZWQgaW4gb25saW5lX3BhZ2VzKCkgYW5kIG9mZmxpbmVfcGFnZXMoKS5cXG5tbS9tbV9pbml0LmMtMTU1Ni1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MDYuNDU3NDA3MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0OTkxMzA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgY29kZSBjYW5kaWRhdGVzIGZvciBmdXp6aW5nOlxuXG4qKk15IEZ1enppbmcgVGFyZ2V0IEJyYWluc3Rvcm0qKlxuXG5SaWdodCwgbGV0J3Mgc2VlLiBUaGlua2luZyBhYm91dCBmdXp6aW5nIHRoaXMgc3lzdGVtLCBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIGxvb2sgbGlrZSBwcmltZSByZWFsIGVzdGF0ZSBmb3IgYXR0YWNrLiBUaGVzZSBhcmUgdGhlIG9idmlvdXMgZW50cnkgcG9pbnRzIHdoZXJlIGRhdGEgaW50ZXJhY3Rpb24gaXMgbGlrZWx5LiBCZXlvbmQgdGhvc2UsIEknbSBhbHNvIGV5ZWluZyBtZXRob2RzIGxpa2UgYF9fYWRkX3BhZ2VzYCBhbmQgYF9fcmVtb3ZlX3BhZ2VzYC4gVGhvc2UgaW50ZXJuYWwgZnVuY3Rpb25zIGNvdWxkIGJlIHN1c2NlcHRpYmxlIHRvIGJ1ZmZlciBvdmVyZmxvd3Mgb3IgdW5leHBlY3RlZCBpbnB1dCBzY2VuYXJpb3MuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byBgX19hZGRfcGFnZXNgIGZpcnN0OyB0aGF0IHNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGJlZ2luIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI3NSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjA5LjUwNzMyMzY0OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0NzMyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19hZGRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9Mzc5PUVYUE9SVF9TWU1CT0xfR1BMKHBmbl90b19vbmxpbmVfcGFnZSk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0zODAtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzozODE6aW50IF9fYWRkX3BhZ2VzKGludCBuaWQsIHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMzgyLVxcdFxcdHN0cnVjdCBtaHBfcGFyYW1zICpwYXJhbXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjA5LjU1NDgwMzU5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNTAzMjc2MTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqQ2hlY2tpbmcgdGhlIFBhZ2UgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgX19hZGRfcGFnZXNgIGlzIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIFRoYXQgY29uZmlybXMgaXRzIGludGVuZGVkIHVzZSBhbmQgYWNjZXNzaWJpbGl0eS4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IGl0cyBjb3VudGVycGFydC4gTGV0J3MgbW92ZSBvbiB0byBjaGVja2luZyB0aGUgYXZhaWxhYmlsaXR5IGFuZCBmdW5jdGlvbmFsaXR5IG9mIGBfX3JlbW92ZV9wYWdlc2AuIEkgbmVlZCB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBjb21wbGV0ZSBhbmQgc3ltbWV0cmljIGluIGl0cyBwYWdlIG1hbmlwdWxhdGlvbiBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgaW1wb3J0YW50IGZvciBzeXN0ZW0gcmVsaWFiaWxpdHkgYW5kIHByZWRpY3RhYmxlIGJlaGF2aW9yLiBMZXQncyBzZWUgaWYgYF9fcmVtb3ZlX3BhZ2VzYCBpcyBhbHNvIGV4cG9ydGVkIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSdzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1OTcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzoxMi4wNTgwODI2MThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzkyNTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fcmVtb3ZlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTUyOD12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NTgtLyoqXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1NTk6ICogX19yZW1vdmVfcGFnZXMoKSAtIHJlbW92ZSBzZWN0aW9ucyBvZiBwYWdlc1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTYwLSAqIEBwZm46IHN0YXJ0aW5nIHBhZ2VmcmFtZSAobXVzdCBiZSBhbGlnbmVkIHRvIHN0YXJ0IG9mIGEgc2VjdGlvbilcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNTY5LSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6NTcwOnZvaWQgX19yZW1vdmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NzEtXFx0XFx0ICAgIHN0cnVjdCB2bWVtX2FsdG1hcCAqYWx0bWFwLCBzdHJ1Y3QgZGV2X3BhZ2VtYXAgKnBnbWFwKVxcbi0tXFxubW0vbWVtcmVtYXAuYz04Nj1zdGF0aWMgdm9pZCBwYWdldW5tYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgaW50IHJhbmdlX2lkKVxcbi0tXFxubW0vbWVtcmVtYXAuYy05OC1cXHRpZiAocGdtYXAtXFx1MDAzZXR5cGUgPT0gTUVNT1JZX0RFVklDRV9QUklWQVRFKSB7XFxubW0vbWVtcmVtYXAuYzo5OTpcXHRcXHRfX3JlbW92ZV9wYWdlcyhQSFlTX1BGTihyYW5nZS1cXHUwMDNlc3RhcnQpLFxcbm1tL21lbXJlbWFwLmMtMTAwLVxcdFxcdFxcdCAgICAgICBQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSwgTlVMTCwgcGdtYXApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzoxMi4xMDc0ODA5OTJaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2NTIxNTcxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBPcGVyYXRpb25zKipcblxuUmlnaHQsIHNvIGBfX3JlbW92ZV9wYWdlc2AgaXMgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIGtub3cgdGhhdCBmdW5jdGlvbiwgYW5kIGl0J3Mga2V5IGZvciBhIHNwZWNpZmljIHR5cGUgb2YgbWVtb3J5IHJlY2xhbWF0aW9uLiBCdXQgbm93IEknbSB0aGlua2luZyBhYm91dCByZWxhdGVkIG9wZXJhdGlvbnPigKYgd2hhdCBhYm91dCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgYW5kIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWA/IFRoZXkncmUgY2xlYXJseSBpbnRlbmRlZCBmb3IgbWFuaXB1bGF0aW5nIHBhZ2UgZnJhbWUgbnVtYmVycyAoUEZOcykgYW5kIHRoZWlyIGFsbG9jYXRpb24gc3RhdHVzIHdpdGhpbiBkaWZmZXJlbnQgbWVtb3J5IHpvbmVzLiBBcmUgdGhvc2UgZXhwb3J0ZWQgYXMgd2VsbD8gSSBjYW4gc2VlIGEgZmV3IHVzZS1jYXNlcyBmb3IgdGhhdCwgYW5kIGl0IHdvdWxkIHJlYWxseSBvcGVuIHVwIHNvbWUgcG9zc2liaWxpdGllcy4gSSBuZWVkIHRvIGNoZWNrIHRoZSBleHBvcnQgdGFibGVzLiBBcmUgdGhleSBpbnRlbmRlZCBmb3IgdXNlIGluIHNvbWUgaGlnaGVyLWxldmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHk/IEFyZSB0aGV5IG9ubHkgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzYWdlIHdpdGhpbiB0aGUga2VybmVsLCBvciBhcmUgdGhleSBwb3RlbnRpYWxseSB1c2VkIGJ5IHNvbWUgZHJpdmVycyB0b28/IEkgd2FudCB0byBkZXRlcm1pbmUgdGhlaXIgYXZhaWxhYmlsaXR5LiBJdCBzZWVtcyB0aGVpciBleHBvc3VyZSBkaWN0YXRlcyBhIGxvdCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA5NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjE1Ljg3MjcwNTQwOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0ODQyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW92ZV9wZm5fcmFuZ2VfdG9fem9uZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz03MTE9c3RhdGljIGlubGluZSB2b2lkIHNlY3Rpb25fdGFpbnRfem9uZV9kZXZpY2UodW5zaWduZWQgbG9uZyBwZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTcyNC0gKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjcyNTp2b2lkIG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtNzI2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA2ND1pbnQgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA3My1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjEwNzQ6XFx0bW92ZV9wZm5fcmFuZ2VfdG9fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzLCBOVUxMLCBNSUdSQVRFX1VOTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNzUtXFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTExOD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTQ1LVxcdC8qIGFzc29jaWF0ZSBwZm4gcmFuZ2Ugd2l0aCB0aGUgem9uZSAqL1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE0NjpcXHRtb3ZlX3Bmbl9yYW5nZV90b196b25lKHpvbmUsIHBmbiwgbnJfcGFnZXMsIE5VTEwsIE1JR1JBVEVfTU9WQUJMRSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExNDctXFx0XFx0XFx0ICAgICAgIHRydWUpO1xcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0yMTY2PXZvaWQgdHJ5X29mZmxpbmVfbm9kZShpbnQgbmlkKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTcxLVxcdCAqIElmIHRoZSBub2RlIHN0aWxsIHNwYW5zIHBhZ2VzIChlc3BlY2lhbGx5IFpPTkVfREVWSUNFKSwgZG9uJ3RcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjIxNzI6XFx0ICogb2ZmbGluZSBpdC4gQSBub2RlIHNwYW5zIG1lbW9yeSBhZnRlciBtb3ZlX3Bmbl9yYW5nZV90b196b25lKCksXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTczLVxcdCAqIGUuZy4sIGFmdGVyIHRoZSBtZW1vcnkgYmxvY2sgd2FzIG9ubGluZWQuXFxuLS1cXG5tbS9tZW1yZW1hcC5jPTE0ND1zdGF0aWMgaW50IHBhZ2VtYXBfcmFuZ2Uoc3RydWN0IGRldl9wYWdlbWFwICpwZ21hcCwgc3RydWN0IG1ocF9wYXJhbXMgKnBhcmFtcyxcXG4tLVxcbm1tL21lbXJlbWFwLmMtMjI4LVxcdFxcdHpvbmUgPSBcXHUwMDI2Tk9ERV9EQVRBKG5pZCktXFx1MDAzZW5vZGVfem9uZXNbWk9ORV9ERVZJQ0VdO1xcbm1tL21lbXJlbWFwLmM6MjI5OlxcdFxcdG1vdmVfcGZuX3JhbmdlX3RvX3pvbmUoem9uZSwgUEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG5tbS9tZW1yZW1hcC5jLTIzMC1cXHRcXHRcXHRcXHRQSFlTX1BGTihyYW5nZV9sZW4ocmFuZ2UpKSwgcGFyYW1zLVxcdTAwM2VhbHRtYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjE1LjkyMjE5ODgxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDk1MjM2NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKkV4YW1pbmluZyBQRk4gUmFuZ2UgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCBpc24ndCBhIHN5bWJvbCBhdmFpbGFibGUgZm9yIHVzZSBvdXRzaWRlIHRoZSBrZXJuZWwgbW9kdWxlLiBUaGF0J3MgYSBsaXR0bGUgdW51c3VhbCwgYnV0IG5vdCBuZWNlc3NhcmlseSBhIHNob3dzdG9wcGVyLiBXaGF0IEkgKnJlYWxseSogbmVlZCB0byB1bmRlcnN0YW5kIGlzIGhvdyBtZW1vcnkgcmFuZ2VzIGFyZSBiZWluZyBtYW5hZ2VkIGF0IHRoZSB6b25lIGxldmVsLCB3aGljaCBpcyB3aHkgdGhpcyBjYW1lIHRvIG1pbmQgaW4gdGhlIGZpcnN0IHBsYWNlLCBhbmQgd2h5IEkgd2FudGVkIHRvIHN0dWR5IHRoaXMgZnVuY3Rpb24gY2FsbCwgbm93IHVuYXZhaWxhYmxlIHRvIG1lLlxuXG5TaW5jZSBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgaXMgaW5hY2Nlc3NpYmxlLCBsZXQncyBwaXZvdCBhbmQgbG9vayBhdCBpdHMgcG90ZW50aWFsIGNvdW50ZXJwYXJ0IGZ1bmN0aW9uLiBUaGUgbG9naWNhbCBuZXh0IHBsYWNlIHRvIGRpZyBpcyBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLiBJdCdzIGxpa2VseSB0aGF0IGEgcGFpcmVkIGZ1bmN0aW9uIGxpa2UgdGhpcyBleGlzdHMsIGFuZCB1bmRlcnN0YW5kaW5nIHRoZSByZXZlcnNlIG9wZXJhdGlvbiB3aWxsIHByb3ZpZGUgY3JpdGljYWwgY29udGV4dC4gTGV0J3Mgc2VlIGlmIHRoaXMgb25lIGlzIGV4cG9zZWQsIGFuZCB3aGF0IHdlIGNhbiBsZWFybiBhYm91dCBpdHMgaW1wbGVtZW50YXRpb24uIFRoaXMgY291bGQgaWxsdW1pbmF0ZSB0aGUgbGFyZ2VyIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwMDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzoxOS40MTc0Mzg0MDlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3OTkwMDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTUwMD1zdGF0aWMgdm9pZCB1cGRhdGVfcGdkYXRfc3BhbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01MjctXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1Mjg6dm9pZCByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTUyOS1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTA5NT12b2lkIG1ocF9kZWluaXRfbWVtbWFwX29uX21lbW9yeSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcylcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTExMC1cXHQgKi9cXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjExMTE6XFx0cmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUocGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpLCBwZm4sIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExMTItXFx0a2FzYW5fcmVtb3ZlX3plcm9fc2hhZG93KF9fdmEoUEZOX1BIWVMocGZuKSksIFBGTl9QSFlTKG5yX3BhZ2VzKSk7XFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExMTg9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIyOC1cXHRcXHRub2RlX25vdGlmeShOT0RFX0NBTkNFTF9BRERJTkdfRklSU1RfTUVNT1JZLCBcXHUwMDI2bm9kZV9hcmcpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIyOTpcXHRyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZSh6b25lLCBwZm4sIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMzAtXFx0cmV0dXJuIHJldDtcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM9MTg4Mz1pbnQgb2ZmbGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4MC1cXHRtZW1vcnlfbm90aWZ5KE1FTV9PRkZMSU5FLCBcXHUwMDI2bWVtX2FyZyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMDgxOlxcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA4Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbXJlbWFwLmM9ODY9c3RhdGljIHZvaWQgcGFnZXVubWFwX3JhbmdlKHN0cnVjdCBkZXZfcGFnZW1hcCAqcGdtYXAsIGludCByYW5nZV9pZClcXG4tLVxcbm1tL21lbXJlbWFwLmMtOTUtXFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcXG5tbS9tZW1yZW1hcC5jOjk2OlxcdHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHBhZ2Vfem9uZShmaXJzdF9wYWdlKSwgUEhZU19QRk4ocmFuZ2UtXFx1MDAzZXN0YXJ0KSxcXG5tbS9tZW1yZW1hcC5jLTk3LVxcdFxcdFxcdFxcdCAgIFBIWVNfUEZOKHJhbmdlX2xlbihyYW5nZSkpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MTkuNDY1NDMzNjYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTg3Mzk4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgdGFyZ2V0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEhvdHBsdWcgT3B0aW1pemF0aW9uIFBvaW50cyoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCBpbXByb3ZpbmcgbWVtb3J5IGhvdHBsdWcgaGFuZGxpbmcuIEltbWVkaWF0ZWx5LCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAgYW5kIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAgYXJlIHN0YW5kaW5nIG91dCBhcyBwcmltZSBjYW5kaWRhdGVzLiBUaGV5J3JlIGNsZWFybHkgYXQgdGhlIGNvcmUgb2YgbWFuaXB1bGF0aW5nIG1lbW9yeSByZWdpb25zLCBhbmQgYW55IGVmZmljaWVuY3kgZ2FpbnMgdGhlcmUgd291bGQgYmUgc2lnbmlmaWNhbnQuIEknbSBhbHNvIGFkZGluZyBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIHRvIHRoZSBtaXgg4oCTIHRoZXNlIGFyZSBsaWtlbHkgaW52b2x2ZWQgaW4gdGhlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGR1cmluZyB0aGUgaG90cGx1ZyBwcm9jZXNzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2Ugcm91dGluZXMgaW50ZXJhY3QgYW5kIHdoZXJlIHRoZSBib3R0bGVuZWNrcyBtaWdodCBsaWUuXG5cbk5vdywgYSBrZXkgZmFjdG9yIGhlcmUgaXMgZ29pbmcgdG8gYmUgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgc3RhdHVzIG9mIGBDT05GSUdfTUVNT1JZX0hPVFBMVUdgLiBJcyBpdCBlbmFibGVkPyBUaGF04oCZcyBteSBzdGFydGluZyBwb2ludC4gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhhdCBjb25maWcgb3B0aW9uIHdpbGwgZGljdGF0ZSB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCBhbmQgdGhlIHN1YnNlcXVlbnQgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgSSdsbCBuZWVkIHRvIHVzZS4gSSBuZWVkIHRvIGJlIGF3YXJlIG9mIHRoZSBjb250ZXh0IGFuZCBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gdGhhdCBjb3VsZCBiZSBpbXBhY3RpbmcgdGhlc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjIzLjE4NDE3NTUyN1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0ODkxMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTU9SWV9IT1RQTFVHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjIzLjIzMjY2Nzc4MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njc5MzY5ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIE1lbW9yeSBIb3RwbHVnKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIGBNRU1PUllfSE9UUExVR2AuIE15IGltbWVkaWF0ZSBhcHByb2FjaCBpcyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBsb2dpYyBhbmQgZGVwZW5kZW5jaWVzIGRlZmluZWQgdGhlcmUg4oCTIHNwZWNpZmljYWxseSwgd2hpY2ggb3RoZXIgY29uZmlndXJhdGlvbiBzeW1ib2xzIG5lZWQgdG8gYmUgZW5hYmxlZCBiZWZvcmUgYE1FTU9SWV9IT1RQTFVHYCBjYW4gYmUgc2VsZWN0ZWQuIFRoaXMgaXMgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAgaW4gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmZWF0dXJlIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEknbGwgYmUgbG9va2luZyBmb3IgcmVsYXRpb25zaGlwcyB3aXRoIE5VTUEsIEFDUEksIG9yIGFueXRoaW5nIHRoYXQgdG91Y2hlcyBvbiBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24uIExldCdzIHNlZSB3aGF0IGBtbS9LY29uZmlnYCByZXZlYWxzLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzUyLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MjcuOTEyMDM5NzIzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNTIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTIwOlxcdFxcdGJvb2xcXG4gNTIxOlxcdFxcbiA1MjI6XFx0IyBldmVudHVhbGx5LCB3ZSBjYW4gaGF2ZSB0aGlzIG9wdGlvbiBqdXN0ICdzZWxlY3QgU1BBUlNFTUVNJ1xcbiA1MjM6XFx0bWVudWNvbmZpZyBNRU1PUllfSE9UUExVR1xcbiA1MjQ6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuIDUyNTpcXHRcXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcbiA1MjY6XFx0XFx0ZGVwZW5kcyBvbiBTUEFSU0VNRU1fVk1FTU1BUFxcbiA1Mjc6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1xcbiA1Mjg6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVFxcbiA1Mjk6XFx0XFx0c2VsZWN0IE5VTUFfS0VFUF9NRU1JTkZPIGlmIE5VTUFcXG4gNTMwOlxcdFxcbiA1MzE6XFx0aWYgTUVNT1JZX0hPVFBMVUdcXG4gNTMyOlxcdFxcbiA1MzM6XFx0Y2hvaWNlXFxuIDUzNDpcXHRcXHRwcm9tcHQgXFxcIk1lbW9yeSBIb3RwbHVnIERlZmF1bHQgT25saW5lIFR5cGVcXFwiXFxuIDUzNTpcXHRcXHRkZWZhdWx0IE1IUF9ERUZBVUxUX09OTElORV9UWVBFX09GRkxJTkVcXG4gNTM2OlxcdFxcdGhlbHBcXG4gNTM3OlxcdFxcdCAgRGVmYXVsdCBtZW1vcnkgdHlwZSBmb3IgaG90cGx1Z2dlZCBtZW1vcnkuXFxuIDUzODpcXHRcXG4gNTM5OlxcdFxcdCAgVGhpcyBvcHRpb24gc2V0cyB0aGUgZGVmYXVsdCBwb2xpY3kgc2V0dGluZyBmb3IgbWVtb3J5IGhvdHBsdWdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MjcuOTEyMTMyMTIzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNDg4NTI3ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBIb3RwbHVnIGFuZCBJbml0aWFsaXphdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYE1FTU9SWV9IT1RQTFVHYCwgYW5kIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZW5hYmxlIGBTUEFSU0VNRU1fVk1FTU1BUGAgc2luY2UgaXQncyBhIGRlcGVuZGVuY3kuIEFjdHVhbGx5LCBpc24ndCBgU1BBUlNFTUVNX1ZNRU1NQVBgIHVzdWFsbHkgZW5hYmxlZCBhbnl3YXk/IExldCBtZSBkb3VibGUtY2hlY2suXG5cblJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgY2hhbmdlZCBpbiBgbW0vbW1faW5pdC5jYC4gQWgsIEkgc2VlIGB1bmF2YWlsYWJsZV9wZm5faXNfb25saW5lYCBpcyB1c2VkIGluIGBpbml0X3VuYXZhaWxhYmxlX3JhbmdlYC4gQW5kIHRoYXQgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgLCB3aGljaCBpbiB0dXJuIGdldHMgY2FsbGVkIGZyb20gYGZyZWVfYXJlYV9pbml0X25vZGVgIGR1cmluZyBib290LiBPa2F5LCBzbyB0aGlzIGNvZGUgaXMgZGVmaW5pdGVseSBleGVjdXRlZCBkdXJpbmcgYm9vdCBpZiB0aGVyZSBhcmUgdW5hdmFpbGFibGUgbWVtb3J5IHJhbmdlcywgd2hpY2ggaXMgaW1wb3J0YW50IHRvIGtub3cuXG5cblRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBtYWtpbmcgc29tZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gaG93IG1lbW9yeSBob3RwbHVnIHdvcmtzLCBhbG9uZ3NpZGUgaG93IG1lbW9yeSBpcyBpbml0aWFsaXplZC4gUmVwbGFjaW5nIHRoZSBvbGQgYHNldF96b25lX2NvbnRpZ3VvdXNgIGNhbGwgd2l0aCBhIHNpbXBsZXIgY2hlY2sgdXNpbmcgYHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9PSB6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgdG8gZGV0ZXJtaW5lIG1lbW9yeSBzdGF0ZSBpcyBkZWZpbml0ZWx5IGFuIGludGVyZXN0aW5nIG9wdGltaXphdGlvbi4gVGhpcyBpcyBzb21ldGhpbmcgd29ydGggdGhyb3dpbmcgYSBmdXp6ZXIgYXQuXG5cbkxldCdzIGxpc3QgdGhlIGtleSBzeW1ib2xzIG9mIGludGVyZXN0LiBJJ20gZm9jdXNpbmcgb246IGBvbmxpbmVfcGFnZXNgLCBgb2ZmbGluZV9wYWdlc2AsIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYCwgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYCwgYF9fYWRkX3BhZ2VzYCwgYW5kIGBfX3JlbW92ZV9wYWdlc2AuXG5cbkkgc2hvdWxkIGNoZWNrIGlmIGBvbmxpbmVfcGFnZXNgIGFuZCBgb2ZmbGluZV9wYWdlc2AgYXJlIGV4cG9ydGVkLiBJcyBgb25saW5lX3BhZ2VzYCBleHBvcnRlZD8gTm8sIGJ1dCBJIGtub3cgYGdlbmVyaWNfb25saW5lX3BhZ2VgIGlzIGV4cG9ydGVkLiBMZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODU5LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MzQuOTYwOTg3MTI5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk0MDcxNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb25saW5lX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MzUuMDEwOTMyNjczWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzg5NjE3MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29yZSBwcm9ibGVtLCBJJ20gZ29pbmcgdG8gdGFrZSBhIG1vbWVudCB0byBzdXJ2ZXkgdGhlIHJlbGV2YW50IGNvZGViYXNlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgb2ZmbGluZV9wYWdlc2AuIEdpdmVuIHRoZSBjb250ZXh0IOKAkyB3aGF0ZXZlciB0aGUgdXNlcidzIGlzc3VlIG1pZ2h0IGJlIOKAkyB0aGlzIGlzIGEgbG9naWNhbCBmaXJzdCBzdGVwLiBPZmZsaW5lIGZ1bmN0aW9uYWxpdHkgaXMgYSBjb21tb24gc291cmNlIG9mIHVuZXhwZWN0ZWQgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggZGF0YSBwZXJzaXN0ZW5jZSwgY2FjaGluZywgb3IgaW50ZXJhY3Rpb25zIHRoYXQgKnNob3VsZCogYmUgYXZhaWxhYmxlIHdoZW4gZGlzY29ubmVjdGVkLiBJdCdzIGEgZm91bmRhdGlvbmFsIG1vZHVsZSBhbmQgdXN1YWxseSByZXZlYWxzIGZvdW5kYXRpb25hbCBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3Igd2hlbiBvZmZsaW5lLiBJJ20gYXNzdW1pbmcgaXQgaGFuZGxlcyB0aGUgbWVjaGFuaWNzIG9mIHByb3ZpZGluZywgc3luY2luZywgc3RvcmluZyBhbmQgcmVtb3Zpbmcgb2ZmbGluZSBjb250ZW50LiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgYW5kIGFzc3VtcHRpb25zIGFyZSBpbXBsZW1lbnRlZCB0aGVyZSwgc28sIGJlZm9yZSBldmVuIGNvbnNpZGVyaW5nIHRoZSBwcm9ibGVtLCB1bmRlcnN0YW5kaW5nIHRoaXMgaXMgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6MzguNTQ5ODk3MDIzWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4NTcxMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qb2ZmbGluZV9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjM4LjU5OTE5MDU4N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDcxNjYxODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBhIHNlYXNvbmVkIGV4cGVydDpcblxuKipJbnRlcm5hbCBBdWRpdCBcdTAwMjYgQ29kZSBSZXZpZXcqKlxuXG5SaWdodCwgc28gdGhlc2UgZnVuY3Rpb25zIGFyZW4ndCBleHBsaWNpdGx5IGV4cG9ydGVkLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCB1c3VhbGx5IG1lYW5zIHRoZXkncmUgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIG1vZHVsZSBvciBsaWJyYXJ5LCBub3QgZm9yIGRpcmVjdCBleHRlcm5hbCBpbnRlcmFjdGlvbi4gQnV0LCB0aGUgZmFjdCB0aGF0IHRoZXkncmUgZ2xvYmFsIGZ1bmN0aW9ucyByYWlzZXMgYSBmbGFnLiBFdmVuIHdpdGhvdXQgZXhwbGljaXQgZXhwb3J0aW5nLCB0aGVpciBnbG9iYWwgc2NvcGUgbWVhbnMgdGhleSdyZSBwb3RlbnRpYWxseSBhY2Nlc3NpYmxlIGZyb20gYW55d2hlcmUgd2l0aGluIHRoZSBwcm9ncmFtJ3MgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlaXIgYmVoYXZpb3IgYW5kIGltcGFjdCwgc28gbGV0J3MgZGlnIGludG8gdGhvc2UgZnVuY3Rpb24gbmFtZXMg4oCTIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIEknbGwgd2FudCB0byBzZWUgaG93IHRoZXkncmUgKmFjdHVhbGx5KiB1c2VkLCBhbmQgaW4gd2hhdCB3YXlzLiBTcGVjaWZpY2FsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHVuc2FmZSBtZW1vcnkgbWFuaXB1bGF0aW9uLCB1bmV4cGVjdGVkIHNpZGUgZWZmZWN0cywgb3IgcG90ZW50aWFsIGZvciB1bmludGVuZGVkIGFjY2VzcyBvciBtb2RpZmljYXRpb24gb2YgZGF0YS4gQSBkZWVwIGRpdmUgaXMgaW4gb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODM2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NDUuMDcwODU0ODM1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ4MDI5NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX19hZGRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzo0NS4xMjMzNDM4OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEwOTA3MTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSBrZXJuZWwgY29kZTpcblxuKipDaGVja2luZyBUaGF0IFBhZ2UgQWRkaXRpb24qKlxuXG5IbW0sIGhvbGQgb24gYSBzZWNvbmQuIEkgc3dlYXIgSSBzYXcgdGhhdCBgRVhQT1JUX1NZTUJPTF9HUEwocGZuX3RvX29ubGluZV9wYWdlKWAgZGVjbGFyYXRpb24gKmJlZm9yZSogdGhhdCBgX19hZGRfcGFnZXNgIGZ1bmN0aW9uIGNhbGwuIFNvbWV0aGluZyBmZWVscyBvZmYgYWJvdXQgdGhlIG9yZGVyLCBvciBwZXJoYXBzIHRoZSBpbnRlbmRlZCB1c2UuIExldCBtZSBqdXN0IHF1aWNrbHkgZ28gYmFjayBhbmQgdGhvcm91Z2hseSByZS1leGFtaW5lIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgX19hZGRfcGFnZXNgLiBJIG5lZWQgdG8gZW5zdXJlIEknbSB1bmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBwYWdlIGFsbG9jYXRpb24gYW5kIHN5bWJvbCBleHBvcnRzIGNvcnJlY3RseSwgYW5kIEkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgb3IgdXNhZ2UgcGF0dGVybi4gSXQncyB0aGF0IG5hZ2dpbmcgZmVlbGluZy4uLiBnb3R0YSBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBzb21ldGhpbmcgZnVuZGFtZW50YWwgaW4gdGhlIHdheSB0aGVzZSBwYWdlIHN0cnVjdHVyZXMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkLiBJdCBjb3VsZCBiZSBpbXBvcnRhbnQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTAxLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NDguNTM0MjUzOTc4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODE4Njc4NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWRkX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NDguNTgyNDQ5ODEyWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyODkwNzQ0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgaWYgSSdtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdW5jdGlvbiBBdmFpbGFiaWxpdHkqKlxuXG5BaCwgdGhlIGZ1bmN0aW9uIGBhZGRfcGFnZXNgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBUaGlzIGlzIGdvb2QsIGdvb2QhIEl0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBtZSB0byBkaXJlY3RseSBjYWxsIGFuZCB1c2Ugd2l0aGluIG15IG93biBjb2RlIG9yIGluIG90aGVyIG1vZHVsZXMuIFRoaXMgb3BlbnMgdXAgYSBsb3Qgb2YgcG9zc2liaWxpdGllcyBmb3IgbW9kdWxhcml0eSBhbmQgaW50ZWdyYXRpb24uIEkgY2FuIG5vdyBzdGFydCB0byB0aGluayBhYm91dCBob3cgSSBjYW4gbGV2ZXJhZ2UgdGhpcyBmdW5jdGlvbiBpbiBteSBjdXJyZW50IHByb2plY3QsIHBlcmhhcHMgdG8gYXV0b21hdGUgYSByZXBldGl0aXZlIHRhc2ssIGVuaGFuY2UgYW4gZXhpc3RpbmcgcHJvY2Vzcywgb3IgZXZlbiBidWlsZCBhIHNtYWxsIHV0aWxpdHkgYXJvdW5kIGl0LiBUaGUgaW1wbGljYXRpb25zIGZvciB3b3JrZmxvdyBvcHRpbWl6YXRpb24gYXJlIGNlcnRhaW5seSB0aGVyZS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiB0byBjb25maXJtIHBhcmFtZXRlcnMgYW5kIHJldHVybiB2YWx1ZSBidXQgdGhpcyBmaXJzdCBvYnNlcnZhdGlvbiBpcyBwcm9taXNpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MzU5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NTIuODcxNTI2NzgyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTQ4MDcwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhZGRfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTM3OT1FWFBPUlRfU1lNQk9MX0dQTChwZm5fdG9fb25saW5lX3BhZ2UpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMzgwLVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MzgxOmludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTM4Mi1cXHRcXHRzdHJ1Y3QgbWhwX3BhcmFtcyAqcGFyYW1zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowNzo1Mi45MjcwMTg0NTdaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NjQxNDI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgTW9kdWxlJ3MgUGFnZSBBZGRpdGlvbiBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgaW50ZXJuYWwgYF9fYWRkX3BhZ2VzYCBtZXRob2Qgd2FzIHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBjb3JlIHBhZ2UgYWRkaXRpb24gbG9naWMgd2l0aGluIHRoaXMgbW9kdWxlLiBCdXQsIHdhaXQuLi4gSSBqdXN0IHJlYWxpemVkIEkgY2FuJ3QgZGlyZWN0bHkgYWNjZXNzIGl0LiBUaGF0J3Mgb2RkLiBJdCdzIG5vdCBleHBvcnRlZC4gQ291bGQgdGhlIHB1YmxpYy1mYWNpbmcgZnVuY3Rpb24gYmUgYGFkZF9wYWdlc2AgdGhlbj8gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGlmICp0aGF0KiBvbmUgaXMgZXhwb3J0ZWQsIGFuZCBpZiBzbywgdW5kZXJzdGFuZCBob3cgdGhlIHB1YmxpYyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggYW55IGludGVybmFsIGZ1bmN0aW9uYWxpdHkuIExldCdzIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBjb25maXJtIHdoaWNoIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGV4cG9zZWQgaW4gdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjY5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDc6NTYuMTkzNDM0Nzk0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk1MDkwNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWRkX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA3OjU2LjIzODM5MzA4OFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTMyNTg1MDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBIFF1aWNrIEpvbHQgb2YgUmVhbGl6YXRpb24qKlxuXG5XYWl0IGEgc2Vjb25kLi4uIGBhZGRfbWVtb3J5YCBpcyAqZXhwb3J0ZWQqPyBUaGF0J3Mgbm90IHdoYXQgSSB3YXMgZXhwZWN0aW5nIGF0IGFsbC4gSSB3YXMgdW5kZXIgdGhlIGltcHJlc3Npb24gdGhhdCB0aGlzIHdhcyBnb2luZyB0byBiZSBhbiBpbnRlcm5hbCB1dGlsaXR5IGZ1bmN0aW9uLCBwZXJoYXBzIHBhcnQgb2YgYSBwcml2YXRlIEFQSSB3aXRoaW4gdGhlIG1vZHVsZS4gTXkgaW5pdGlhbCBhc3N1bXB0aW9ucyB3ZXJlIGNsZWFybHkgb2ZmLWJhc2UuIFRoYXQgZXhwb3J0IHN0YXR1cyBkcmFtYXRpY2FsbHkgc2hpZnRzIG15IG1lbnRhbCBtb2RlbCBvZiBob3cgdGhpcyBjb21wb25lbnQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gaW1tZWRpYXRlbHkgcmVjb25zaWRlciBteSBwcmV2aW91cyB1bmRlcnN0YW5kaW5nIG9mIGl0cyBzY29wZSwgcG90ZW50aWFsIHNpZGUgZWZmZWN0cywgYW5kIGFueSBwdWJsaWMgZmFjaW5nIGd1YXJhbnRlZXMgdGhhdCBtaWdodCBjb21lIHdpdGggaXRzIGV4dGVybmFsIGFjY2Vzc2liaWxpdHkuIFRoaXMgd2FycmFudHMgYSBtb3JlIGluLWRlcHRoIGxvb2sgYXQgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gYW5kIGV4dGVybmFsIEFQSSBjb250cmFjdHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzg5OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjAwLjE3MDk4MDQyOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwOTA0NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qYWRkX21lbW9yeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmM9MTU5OD1pbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplLCBtaHBfdCBtaHBfZmxhZ3MpXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MDctfVxcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTYwODpFWFBPUlRfU1lNQk9MX0dQTChhZGRfbWVtb3J5KTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTE2MDktXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE2MzE9aW50IGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQoaW50IG5pZCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1Ny19XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxNjU4OkVYUE9SVF9TWU1CT0xfR1BMKGFkZF9tZW1vcnlfZHJpdmVyX21hbmFnZWQpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTY1OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MDAuMjE5MDc1NDQzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODAyMzU1NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBgYWRkX21lbW9yeWAgKmlzKiBleHBvcnRlZCwgYnV0IHRoYXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBXZSBjYW4gcmVhY2ggbm9uLWV4cG9ydGVkIGZ1bmN0aW9ucyBpZiB0aGV5J3JlIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNjYWxscyBvciBzeXNmcywgd2hpY2ggaXMgZ3JlYXQuIEkgd2FzIHRoaW5raW5nIHRoYXQgc3l6a2FsbGVyIGNvdWxkIGRlZmluaXRlbHkgZnV6eiBgb25saW5lX3BhZ2VzYCB0aHJvdWdoIHN5c2ZzLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSG93ZXZlciwgdG8gcmVhbGx5IGhvbmUgaW4gb24gc3BlY2lmaWMgYXJlYXMsIGxldCdzIGxvb2sgYXQgbW9yZSBzcGVjaWZpYyBvcHRpb25zIHRvIGZvY3VzIG9uOiBgb25saW5lX3BhZ2VzYCwgYG9mZmxpbmVfcGFnZXNgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGFuZCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLlxuXG5MZXQncyBkbyBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBgb25saW5lX3BhZ2VzYCBpcyBhIHZpYWJsZSBmb2N1cyBzeW1ib2wsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGlzbid0IHN0YXRpYy4gQWxyaWdodCwgbGV0J3Mga2VlcCBnb2luZyBhbmQgY2hlY2sgdGhlIG90aGVycy4gYG9mZmxpbmVfcGFnZXNgIGFsc28gaXNuJ3Qgc3RhdGljLiBIb3cgYWJvdXQgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgPyBOb3BlLCBub3Qgc3RhdGljLiBBbmQgYHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lYD8gTm8sIHN0aWxsIG5vdCBzdGF0aWMuXG5cbk5vdywgb24gdGhlIG90aGVyIGhhbmQsIGBtZW1vcnlfYmxvY2tfb25saW5lYCBhbmQgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCBhcmUgc3RhdGljLiBTbyB3ZSdyZSBub3QgZ29pbmcgdG8gYmUgdXNpbmcgdGhlbSBhcyBmb2N1cyBzeW1ib2xzLCBzaW5jZSB0aGV5IHdvdWxkbid0IGJlIGFjY2Vzc2libGUgdG8gc3l6a2FsbGVyIGRpcmVjdGx5LlxuXG5MZXQncyBwaXZvdCBhbmQgY2hlY2sgYG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlgIGFuZCBgbWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgzMzAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MDYuMDk5MzE0Njc0WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Njg3NTM0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz0xMDQyPXZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNjMtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMDY0OmludCBtaHBfaW5pdF9tZW1tYXBfb25fbWVtb3J5KHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTA2NS1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgem9uZSAqem9uZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MDYuMTQ2MTk2MDk3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTg4NDI3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgYWltaW5nIGZvciBhIGZ1bHNvbWUgcmVuZGVyaW5nOlxuXG4qKk15IEZsdWlkIEZyYW1ld29yazogQ29uc3RhbnQgRXZvbHV0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nLi4uIHRoaXMgaXNuJ3QgYSBzaW1wbGUsIHN0YXRpYyBzaXR1YXRpb24uIEV2ZXJ5dGhpbmcgSSBkZWFsIHdpdGggaW4gdGhpcyBhcmVhIGlzIGR5bmFtaWMsIGNvbnN0YW50bHkgc2hpZnRpbmcuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGFwcHJvYWNoIHRoaXMuIFRoZSB1bmRlcmx5aW5nIHByaW5jaXBsZXMgbWlnaHQgcmVtYWluLCBidXQgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgc3BlY2lmaWNzIGFyZSBhbHdheXMgZXZvbHZpbmcsIGFuZCBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gYWRhcHQgbXkgbWVudGFsIG1vZGVsIGFuZCBteSBhcHByb2FjaC5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gem9vbSBpbiBvbiBhIHBhcnRpY3VsYXIgYXNwZWN0LiBMZXQncyBzZWUuLi4gKnNocmlua1xcX3pvbmVcXF9zcGFuKi4gVGhhdCdzIHRoZSBrZXkgdmFyaWFibGUgYXQgcGxheSBoZXJlLCBhbmQgaXRzIHN0YXRlIGlzIGxpa2VseSBjcml0aWNhbC4gSSBzaG91bGQgaW1tZWRpYXRlbHkgY2hlY2sgaG93IHRoYXQncyBiZWhhdmluZy4gTGV0IG1lIGZvY3VzIG9uIHRoYXQgYW5kIHNlZSB3aGF0IHRoYXQncyB0ZWxsaW5nIG1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTA3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjA5LjYwNTA0MTY1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwMzE0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfem9uZV9zcGFuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbW9yeV9ob3RwbHVnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuYz00NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy00NjAtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo0NjE6c3RhdGljIHZvaWQgc2hyaW5rX3pvbmVfc3BhbihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxubW0vbWVtb3J5X2hvdHBsdWcuYy00NjItXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTUyOD12b2lkIHJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy01NTMtXFxubW0vbWVtb3J5X2hvdHBsdWcuYzo1NTQ6XFx0c2hyaW5rX3pvbmVfc3Bhbih6b25lLCBzdGFydF9wZm4sIHN0YXJ0X3BmbiArIG5yX3BhZ2VzKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTU1NS1cXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjA5LjY0ODk0NzU2M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTUxMjk2NDU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29kZSoqXG5cbk9rYXksIHRoaXMgZmVlbHMgcHJldHR5IHN0YXRpYywgbm90IGEgbG90IG9mIGR5bmFtaWMgaW50ZXJwbGF5IGhhcHBlbmluZywgd2hpY2ggaXMgaGVscGZ1bCBmb3IgZm9jdXNlZCBhbmFseXNpcy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBzeW1ib2xzLCBhbmQgdGhlIG9uZXMgdGhhdCBqdW1wIG91dCBhcyBjcml0aWNhbCBhcmU6IGBvbmxpbmVfcGFnZXNgLCBgb2ZmbGluZV9wYWdlc2AsIHRoZSB6b25lIG1hbmlwdWxhdGlvbiBmdW5jdGlvbnMgYG1vdmVfcGZuX3JhbmdlX3RvX3pvbmVgIGFuZCBgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmVgLCBhbmQgdGhlIHBhZ2UgYWRkaXRpb24vcmVtb3ZhbCBwcmltaXRpdmVzIGBfX2FkZF9wYWdlc2AgYW5kIGBfX3JlbW92ZV9wYWdlc2AuIFRoZXNlIHNlZW0gdG8gcmVwcmVzZW50IHRoZSBjb3JlIG9wZXJhdGlvbnMgaW4gcGxheSBoZXJlLlxuXG5Ob3csIEkgYWxzbyBzZWUgdGhpcyBgTUVNT1JZX0hPVFBMVUdgIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZmxvYXRpbmcgYXJvdW5kLiBIbW0sIHRoYXQncyBwb3RlbnRpYWxseSBpbXBvcnRhbnQuIExldCBtZSBxdWlja2x5IHZlcmlmeSBteSBhc3N1bXB0aW9ucyDigJMgaXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFllcywgYG1tL21lbW9yeV9ob3RwbHVnLmNgIGlzIGRlZmluaXRlbHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCBpcyBzZXQuIFNvLCB0aGlzIGNvZGUgYmxvY2sgaXMgZGlyZWN0bHkgcmVsYXRlZCB0byBob3RwbHVnZ2luZywgYXMgZXhwZWN0ZWQuIEdvb2QsIGNvbmZpcm1hdGlvbiBpcyBrZXkuIFRoaXMgZ2l2ZXMgbWUgYSBmcmFtZXdvcmsgZm9yIGxvb2tpbmcgYXQgaG93IG1lbW9yeSBpcyBoYW5kbGVkIG9uLXRoZS1mbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NTM0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjE0LjYwMDI0NzI1OFoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MTEwNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtb3J5X2hvdHBsdWcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NjI9cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSArPSBzaHVmZmxlLm9cXG4tLVxcbm1tL01ha2VmaWxlLTY0LSMgR2l2ZSAnbWVtb3J5X2hvdHBsdWcnIGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcXG5tbS9NYWtlZmlsZTo2NTptZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcub1xcbm1tL01ha2VmaWxlLTY2LVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xNTI9c3RhdGljIGludCBnZXRfb25saW5lX3BvbGljeShjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xNTctLypcXG5tbS9tZW1vcnlfaG90cGx1Zy5jOjE1ODogKiBtZW1vcnlfaG90cGx1Zy5vbmxpbmVfcG9saWN5OiBjb25maWd1cmUgb25saW5lIGJlaGF2aW9yIHdoZW4gb25saW5pbmcgd2l0aG91dFxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTU5LSAqIHNwZWNpZnlpbmcgYSB6b25lIChNTU9QX09OTElORSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MTQuNjQ3NzYwODEyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MzU3NDg0MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTWFrZWZpbGUgQ29uZnVzaW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSdtIGxvb2tpbmcgYXQgYG1tL01ha2VmaWxlYCBhbmQgc29tZXRoaW5nJ3Mgbm90IHF1aXRlIGNsaWNraW5nLiBJIHNlZSBgbWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICs9IG1lbW9yeV9ob3RwbHVnLm9gLCB3aGljaCBzZWVtcyBzdGFuZGFyZCBlbm91Z2guIEJ1dCB0aGVuLCAqcmlnaHQgYWZ0ZXIgdGhhdCosIEknbSBzZWVpbmcgYG9iai15ICs9IG1lbW9yeS1ob3RwbHVnLm9gLiBUaGF0J3MuLi4gcmVkdW5kYW50LCByaWdodD8gU3VyZWx5LCB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCBzaG91bGQgaGFuZGxlIHRoaW5ncy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGJvdGggYXJlIHByZXNlbnQuIElzIHRoZXJlIHNvbWUgc3VidGxlIGludGVyYWN0aW9uIHdpdGggYENPTkZJR19NRU1PUllfSE9UUExVR2AgdGhhdCBJJ20gbWlzc2luZz8gT3IgaXMgdGhpcyBhIGxlZ2FjeSB0aGluZywgbWF5YmUgc29tZSBvcHRpbWl6YXRpb24gb3IgYSBzcGVjaWZpYyBidWlsZCBzY2VuYXJpbyBJJ20gbm90IGltbWVkaWF0ZWx5IGdyYXNwaW5nPyBUaW1lIHRvIGRpdmUgYmFjayBpbnRvIGBtbS9NYWtlZmlsZWAgYW5kIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTIyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MjIuMjgzNTEyNzI2WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUyNTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1vcnktaG90cGx1Z1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT02Mj1wYWdlLWFsbG9jLSQoQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IpICs9IHNodWZmbGUub1xcbi0tXFxubW0vTWFrZWZpbGUtNjQtIyBHaXZlICdtZW1vcnlfaG90cGx1ZycgaXRzIG93biBtb2R1bGUtcGFyYW1ldGVyIG5hbWVzcGFjZVxcbm1tL01ha2VmaWxlOjY1Om1lbW9yeS1ob3RwbHVnLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnlfaG90cGx1Zy5vXFxubW0vTWFrZWZpbGUtNjYtXFxuLS1cXG5tbS9NYWtlZmlsZT03MD1vYmoteSArPSBtZW1ibG9jay5vXFxubW0vTWFrZWZpbGU6NzE6b2JqLXkgKz0gJChtZW1vcnktaG90cGx1Zy15KVxcbm1tL01ha2VmaWxlLTcyLW9iai15ICs9IHNsdWIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODoyMi4zMjgwNDExMzlaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI4NDQ4NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBDb251bmRydW0qKlxuXG5BbHJpZ2h0LCBzbyBgQ09ORklHX01FTU9SWV9IT1RQTFVHYCwgdGhhdCBmZWVscyByaWdodCwgdGhhdCdzIHdoYXQgSSdtIGdvaW5nIHdpdGguIERvdWJsZS1jaGVja2luZyBpc24ndCBhIGJhZCBpZGVhLCB0aG91Z2guIEhtbSwgaXMgdGhlcmUgYW55dGhpbmcgZWxzZSBJIG5lZWQgdG8gZmFjdG9yIGluIGhlcmU/IEFoIHllcywgYFNQQVJTRU1FTV9WTUVNTUFQYC4gVGhhdCdzIGEgZGVwZW5kZW5jeSBvZiBgTUVNT1JZX0hPVFBMVUdgLCBpc24ndCBpdD8gTGV0IG1lIGp1c3QgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEJhY2sgdG8gYG1tL0tjb25maWdgIGZvciBhbm90aGVyIHF1aWNrIHNjYW4sIGp1c3QgdG8gYmUgdGhvcm91Z2guIEdvdHRhIGNvdmVyIGFsbCB0aGUgYmFzZXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTM0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6MjYuNjEyNTI3NjI5WiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY4MTQ4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNT1JZX0hPVFBMVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTUxOT1jb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG4tLVxcbm1tL0tjb25maWctNTIyLSMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTSdcXG5tbS9LY29uZmlnOjUyMzptZW51Y29uZmlnIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZy01MjQtXFx0Ym9vbCBcXFwiTWVtb3J5IGhvdHBsdWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjI2LjY1NzIxMTU3M1oiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4ODkyMzAyNTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFNQQVJTRU1FTV9WTUVNTUFQIGFuZCBNZW1vcnkgSG90cGx1ZyoqXG5cbk9rYXksIGxldCdzIHNlZSBhYm91dCB0aGlzIGBTUEFSU0VNRU1fVk1FTU1BUGAgb3B0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGl0J3MgZW5hYmxlZCwgZ2l2ZW4gdGhhdCBgTUVNT1JZX0hPVFBMVUdgIGRlcGVuZHMgb24gaXQuIFRoZSBLYnVpbGQgc3lzdGVtIHNob3VsZCB0aGVvcmV0aWNhbGx5IGhhbmRsZSB0aGlzIGRlcGVuZGVuY3kgY29ycmVjdGx5OyBpZiBJIGVuYWJsZSBgTUVNT1JZX0hPVFBMVUdgLCBLYnVpbGQgKnNob3VsZCogYWxzbyBlbnN1cmUgYFNQQVJTRU1FTV9WTUVNTUFQYCBpcyBlbmFibGVkLiBCdXQsIGFzIGFuIGV4cGVydCwgSSBrbm93IHRoYXQgc2FmZSBpcyBiZXR0ZXIgdGhhbiBzb3JyeS4gSSBzaG91bGQgcHJvYmFibHkgZXhwbGljaXRseSBzcGVjaWZ5IGBTUEFSU0VNRU1fVk1FTU1BUGAgYWxvbmdzaWRlIGBNRU1PUllfSE9UUExVR2AganVzdCB0byBiZSBjZXJ0YWluLiBIYW5nIG9uLi4uIGlzbid0IGBTUEFSU0VNRU1fVk1FTU1BUGAgcHJldHR5IG11Y2ggYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiB4ODZfNjQgYXJjaGl0ZWN0dXJlcz8gVGhhdCByaW5ncyBhIGJlbGwuIE9rYXksIEkgbmVlZCB0byBjb25maXJtIHRoaXMuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGBtbS9LY29uZmlnYCBmaWxlIHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBgU1BBUlNFTUVNX1ZNRU1NQVBgLiBCZXR0ZXIgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbiB0aGFuIHRvIHByb2NlZWQgYmFzZWQgb24gYSBwb3RlbnRpYWxseSBpbmNvcnJlY3QgcmVjb2xsZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDg0NiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODozNS41NDk1MjA5MloiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0MTA5NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz00NTE9Y29uZmlnIFNQQVJTRU1FTV9FWFRSRU1FXFxuLS1cXG5tbS9LY29uZmlnLTQ1NC1cXG5tbS9LY29uZmlnOjQ1NTpjb25maWcgU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFXFxubW0vS2NvbmZpZy00NTYtXFx0Ym9vbFxcbm1tL0tjb25maWctNDU3LVxcbm1tL0tjb25maWc6NDU4OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUFxcbm1tL0tjb25maWctNDU5LVxcdGRlZl9ib29sIHlcXG4tLVxcbm1tL0tjb25maWctNDY1LVxcbm1tL0tjb25maWc6NDY2OmNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9QUkVJTklUXFxubW0vS2NvbmZpZy00NjctXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODozNS41OTQ5MzUwMzNaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyMzgxODg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqQ2hlY2tpbmcgdGhlIFZhbGlkaXR5IG9mIGEgQ29uZmlndXJhdGlvbiBTZXR0aW5nKipcblxuUmlnaHQsIGBkZWZfYm9vbCB5YC4gVGhpcyBpcyBzdHJhaWdodGZvcndhcmQuIE5vIG5lZWQgZm9yIGZ1cnRoZXIgcGFyc2luZyBvciBkZWVwZXIgYW5hbHlzaXMgaGVyZTsgYSBgZGVmX2Jvb2xgIHdpdGggYSB2YWx1ZSBvZiAneScgaW5kaWNhdGVzIHRoYXQgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbml0ZWx5ICplbmFibGVkKi4gVGhhdCdzIHRoZSBleHBlY3RlZCBhbmQgZGVzaXJlZCBzdGF0ZS4gSXQncyBhIGNsZWFuIGFuZCBjbGVhciBhZmZpcm1hdGlvbiBvZiBpdHMgc3RhdHVzLlxuXG5Ob3csIGxldCdzIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgYW5vdGhlciByZWxhdGVkIHZhcmlhYmxlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGhhcyBjaGFuZ2VkIHVuZXhwZWN0ZWRseSwgb3IgaW50cm9kdWNlZCBhIGNvbmZsaWN0LiBMZXQncyBzZWUuLi4gSSdsbCBjaGVjayBgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdgLiBJIGp1c3Qgd2FudCB0byBlbnN1cmUgdGhhdCBtZW1vcnkgaG90cGx1ZyBpcyBlbmFibGVkIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MDYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODozOC43MTg3NTY1ODhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njg0NzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTE2PWNvbmZpZyBIQVZFX0JPT1RNRU1fSU5GT19OT0RFXFxuLS1cXG5tbS9LY29uZmlnLTUxOC1cXG5tbS9LY29uZmlnOjUxOTpjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUdcXG5tbS9LY29uZmlnLTUyMC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjM4Ljc2MzQ0MzYzMloiLCJTZXEiOjUzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzE2NzE3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEhvdHBsdWcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZHJpdmVuIGJ5IGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgd2hpY2ggbWVhbnMgYE1FTU9SWV9IT1RQTFVHYCBpcyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gdG8gd2F0Y2guIExldCdzIGJyZWFrIGRvd24gdGhlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBhZGRlZCBhIG5ldyBmaWVsZCwgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIHRvIHRoZSBgc3RydWN0IHpvbmVgLiBUaGUgcG9pbnQgaXMgdG8gbWFrZSB0aGUgYHpvbmVfaXNfY29udGlndW91cygpYCBjaGVjayBtdWNoIGZhc3RlciDigJMgTygxKSBub3cgYnkgY29tcGFyaW5nIGBzcGFubmVkX3BhZ2VzYCBhbmQgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAsIGluc3RlYWQgb2YgdGhlIG9sZCBPKE4pIGBzZXRfem9uZV9jb250aWd1b3VzKClgIHdoaWNoIHdhcyBpdGVyYXRpbmcgb3ZlciBwYWdlYmxvY2tzLiBBIHByZXR0eSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSB3aW4sIGlmIGl0IHdvcmtzIGFzIGFkdmVydGlzZWQuXG5cbkVzc2VudGlhbGx5LCB3ZSdyZSB0YWxraW5nIGFib3V0IGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaG93IG1lbW9yeSBob3RwbHVnIHdvcmtzLiBUaGF0IG1ha2VzIHRoaXMgcGF0Y2ggYSBncmVhdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIHNpbmNlIHRoZSByZWFjaCBpcyBzbyBicm9hZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzLiBXZSd2ZSBnb3Q6XG5cbiogICBgb25saW5lX3BhZ2VzYFxuKiAgIGBvZmZsaW5lX3BhZ2VzYFxuKiAgIGBtb3ZlX3Bmbl9yYW5nZV90b196b25lYFxuKiAgIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWBcbiogICBgX19hZGRfcGFnZXNgXG4qICAgYF9fcmVtb3ZlX3BhZ2VzYFxuXG5DaGVja2luZyB0aGVtLCBpdCdzIGFsbCBnb29kLiBgb25saW5lX3BhZ2VzYCBpcyBjYWxsZWQgZHVyaW5nIG1lbW9yeSBvbmxpbmluZywgYG9mZmxpbmVfcGFnZXNgIGR1cmluZyBvZmZsaW5pbmcuIFRoZSBvdGhlciBmb3VyIGNvdmVyIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWVtb3J5IHJhbmdlcywgd2hpY2ggaXMgZXhhY3RseSB3aGF0IHdlJ3JlIGludGVyZXN0ZWQgaW4uXG5cbkFscmlnaHQsIHdoYXQgZWxzZSBpcyBpbiBoZXJlPyBMZXQncyBxdWlja2x5IGNoZWNrIG90aGVyIGZ1bmN0aW9ucywganVzdCB0byBiZSBzdXJlLiBMb29rcyBsaWtlIGBpbml0X3VuYXZhaWxhYmxlX3JhbmdlYCBhbmQgYG1lbW1hcF9pbml0X3pvbmVfcmFuZ2VgIGFyZSBzdGF0aWMgYW5kIG9ubHkgY2FsbGVkIGF0IGJvb3QsIHNvIHdlIGNhbiBpZ25vcmUgdGhlbS4gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGlzIG5vdCBzdGF0aWMsIHNvIGxldCdzIGludmVzdGlnYXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTcwOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo0Ny4wODAxNjMwMzJaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NDQ1NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtb3J5X2hvdHBsdWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnlfaG90cGx1Zy5jPTEwMjI9c3RydWN0IHpvbmUgKnpvbmVfZm9yX3Bmbl9yYW5nZShlbnVtIG1tb3Agb25saW5lX3R5cGUsIGludCBuaWQsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEwNDEtICovXFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMDQyOnZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMDQzLVxcdFxcdFxcdCAgICAgICBsb25nIG5yX3BhZ2VzKVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xMTE4PWludCBvbmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTExODEtXFx0b25saW5lX3BhZ2VzX3JhbmdlKHBmbiwgbnJfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTE4MjpcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHBmbiksIGdyb3VwLCBucl9wYWdlcyk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYy0xMTgzLVxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYz0xODgzPWludCBvZmZsaW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMDQzLVxcdGFkanVzdF9tYW5hZ2VkX3BhZ2VfY291bnQocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSwgLW1hbmFnZWRfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjA0NDpcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIGdyb3VwLCAtbnJfcGFnZXMpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjA0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6NDcuMTI0NjExNDA1WiIsIlNlcSI6NTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTAyMTI3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBjYWxscywgcHV0dGluZyBteXNlbGYgaW4gdGhlIHJvbGUgb2YgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqVW5kZXJzdGFuZGluZyB0aGUgT3JpZ2lucyBvZiBUaGlzIEZ1bmN0aW9uJ3MgQ2FsbHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXMgcXVpdGUgdmVyc2F0aWxlLCBiZWluZyB1dGlsaXplZCBpbiBhIGZldyBrZXkgYXJlYXMgb2YgdGhlIHN5c3RlbS4gSSBzZWUgY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSBib3RoIHRoZSBgb25saW5lX3BhZ2VzYCBhbmQgYG9mZmxpbmVfcGFnZXNgIHN1YnN5c3RlbXMuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgaXQgc3VnZ2VzdHMgYSByb2xlIGluIHBhZ2UgbWFuYWdlbWVudCwgcGVyaGFwcyBpbiB0cmFuc2l0aW9uaW5nIHBhZ2VzIGJldHdlZW4gb25saW5lIGFuZCBvZmZsaW5lIHN0YXRlcywgb3Igc29tZSBraW5kIG9mIHBhZ2UgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcHJvY2VzcyByZWxhdGVkIHRvIHRoZXNlIHR3byBwYWdlIGxpc3RzLiBUaGUgZmFjdCB0aGF0IGl0J3MgaGFuZGxpbmcgYm90aCBvbmxpbmUgYW5kIG9mZmxpbmUgcGFnZXMgaW5kaWNhdGVzIGl0J3MgY2VudHJhbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuXG5cbk5vdywgdGhlIHBsb3QgdGhpY2tlbnMgYSBiaXQuIEkgYWxzbyBzZWUgYSBjYWxsIGZyb20gd2l0aGluIGBkcml2ZXJzL2Jhc2UvbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgZnJvbSBhIGZ1bmN0aW9uIG5hbWVkIGBtZW1vcnlfYmxvY2tfb2ZmbGluZWAuIFRoaXMgaXMgcG90ZW50aWFsbHkgY3J1Y2lhbC4gXCJkcml2ZXJzXCIgaW1wbGllcyB0aGlzIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZS4gYG1lbW9yeV9ibG9ja19vZmZsaW5lYC4uLiBva2F5LCB0aGF0IGFsbW9zdCBjZXJ0YWlubHkgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCB3aGVuIGEgbWVtb3J5IGJsb2NrIGlzIGJlaW5nIHRha2VuIG9mZmxpbmUuIFRoYXQncyBhIHZlcnkgc3BlY2lmaWMgY29udGV4dCwgbGlrZWx5IHJlbGF0ZWQgdG8gTlVNQSBub2RlIG1hbmFnZW1lbnQsIG1lbW9yeSBob3RwbHVnZ2luZywgb3IgcGVyaGFwcyBldmVuIGhhbmRsaW5nIG1lbW9yeSBmYWlsdXJlcy4gSXQncyB3b3JraW5nIGF0IGEgbG93ZXIgbGV2ZWwgbm93LCBtYW5hZ2luZyBwYWdlcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHVuaXQgb2YgbWVtb3J5LiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lICpob3cqIGl0J3MgaW52b2x2ZWQsIGJ1dCB0aGF0IGFsb25lIHN1Z2dlc3RzIGl0J3MgbW9yZSB0aGFuIGp1c3QgYSBzaW1wbGUgcGFnZSBtYW5pcHVsYXRvciwgYnV0IGNyaXRpY2FsIHRvIHRoZSBtZW1vcnkgc3RhdGUsIGFuZCBob3cgdGhlIE9TIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo1MS45MzQ4NDEzODhaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NTgzMzA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNjgtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjI2OTpcXHRcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS1cXHUwMDNlZ3JvdXAsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTI3MC1cXHRcXHRcXHRcXHRcXHQgIG5yX3ZtZW1tYXBfcGFnZXMpO1xcbi0tXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jPTI4Mj1zdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vZmZsaW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDEtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMwMjpcXHRcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksIG1lbS1cXHUwMDNlZ3JvdXAsXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMwMy1cXHRcXHRcXHRcXHRcXHQgIC1ucl92bWVtbWFwX3BhZ2VzKTtcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0zMDktXFx0XFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jOjMxMDpcXHRcXHRcXHRhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50KHBmbl90b19wYWdlKHN0YXJ0X3BmbiksXFxuZHJpdmVycy9iYXNlL21lbW9yeS5jLTMxMS1cXHRcXHRcXHRcXHRcXHRcXHQgIG1lbS1cXHUwMDNlZ3JvdXAsIG5yX3ZtZW1tYXBfcGFnZXMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo1MS45Nzk0MjgxNDJaIiwiU2VxIjo1NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5NDc2MTA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFRhcmdldHMqKlxuXG5SaWdodCwgc28gYGFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRgIGxvb2tzIGxpa2UgYW5vdGhlciBwb3RlbnRpYWwgcG9pbnQgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBhIGxpa2VseSB0YXJnZXQgZm9yIGludmVzdGlnYXRpb24uIFRoZSBtZW1vcnkgbWFwcGluZyBpbml0aWFsaXphdGlvbiBhbmQgZGUtaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHNwZWNpZmljYWxseSBgbWhwX2luaXRfbWVtbWFwX29uX21lbW9yeWAgYW5kIGBtaHBfZGVpbml0X21lbW1hcF9vbl9tZW1vcnlgLCBhcmUgYWxzbyBjcnVjaWFsIGZ1bmN0aW9ucyB0byBleGFtaW5lIGluIHRoaXMgY29udGV4dC4gVGhlc2UgZnVuY3Rpb25zIHdpbGwgbGlrZWx5IGNvbnRhaW4ga2V5IGxvZ2ljIHJlbGF0ZWQgdG8gbWFuYWdpbmcgYW5kIG1hbmlwdWxhdGluZyB0aGUgbWVtb3J5IG1hcC4gVGhleSBoYXZlIHRvIGJlIGNvbnNpZGVyZWQgYXMgcG90ZW50aWFsIGZvY2FsIHBvaW50cyBmb3Igd2hhdGV2ZXIgSSdtIHRyb3VibGVzaG9vdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM2OTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowODo1NC44NzQxOTE5MjhaIiwiU2VxIjo1OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MjgxNTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9iYXNlL21lbW9yeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmFzZS9tZW1vcnkuYz0yMjQ9c3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcXG4tLVxcbmRyaXZlcnMvYmFzZS9tZW1vcnkuYy0yNTAtXFx0aWYgKG5yX3ZtZW1tYXBfcGFnZXMpIHtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmM6MjUxOlxcdFxcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcXG5kcml2ZXJzL2Jhc2UvbWVtb3J5LmMtMjUyLVxcdFxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU0LjkxODQ3NjM2MloiLCJTZXEiOjU5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjIxMTkzNTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZsZWN0aW5nIG9uIE1lbW9yeSBNYW5hZ2VtZW50IE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gb2JzZXJ2aW5nIGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGRlYWwgd2l0aCBtZW1vcnkgYmxvY2sgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHRoZSBvbmxpbmUgYW5kIG9mZmxpbmUgcHJvY2VkdXJlcy4gVGhlIGtleSBmdW5jdGlvbnMsIG9yIHJhdGhlciwgdGhlIHN5bWJvbHMgdGhhdCBkZWZpbmUgdGhlaXIgY29yZSBvcGVyYXRpb25zLCBzZWVtIHRvIGJlOiBgb25saW5lX3BhZ2VzYCwgYG9mZmxpbmVfcGFnZXNgLCBgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZWAsIGByZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZWAsIGBfX2FkZF9wYWdlc2AsIGBfX3JlbW92ZV9wYWdlc2AsIGFuZCBgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudGAuXG5cblRoZXNlIHN5bWJvbHMgcG9pbnQgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHRoZSBhbGxvY2F0aW9uLCBkZWFsbG9jYXRpb24sIGFuZCBtb3ZlbWVudCBvZiBwaHlzaWNhbCBwYWdlIGZyYW1lcyAoUEZOcykgYmV0d2VlbiB6b25lcywgYW5kIHRoZSBhY2NvdW50aW5nIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBOb3cgdGhhdCBJIGhhdmUgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbnZvbHZlZCBmdW5jdGlvbiBzeW1ib2xzIGFuZCB0aGVpciBjb250ZXh0LCBJJ20gcmVhZHkgdG8gYXNzaWduIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0MDQ5LCJPdXRwdXRUb2tlbnMiOjE4NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU5LjUzOTY3MjE1WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgyODg5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib25saW5lX3BhZ2VzXCIsXG4gICAgXCJvZmZsaW5lX3BhZ2VzXCIsXG4gICAgXCJtb3ZlX3Bmbl9yYW5nZV90b196b25lXCIsXG4gICAgXCJyZW1vdmVfcGZuX3JhbmdlX2Zyb21fem9uZVwiLFxuICAgIFwiX19hZGRfcGFnZXNcIixcbiAgICBcIl9fcmVtb3ZlX3BhZ2VzXCIsXG4gICAgXCJhZGp1c3RfcHJlc2VudF9wYWdlX2NvdW50XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBjb250aWd1b3VzIHpvbmVzIGFyZSB0cmFja2VkLCByZXBsYWNpbmcgYW4gTyhOKSBwYWdlYmxvY2sgaXRlcmF0aW9uIHdpdGggYW4gTygxKSBjaGVjayB1c2luZyBhIG5ldyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCBjb3VudGVyIGluIGBzdHJ1Y3Qgem9uZWAuIFRoaXMgY291bnRlciBpcyB1cGRhdGVkIGR1cmluZyBtZW1vcnkgaG90cGx1ZyBhbmQgaW5pdGlhbGl6YXRpb24uIFRoZSBjaGFuZ2VzIGFmZmVjdCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtZW1vcnkgaG90cGx1ZyBsb2dpYywgd2hpY2ggYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvbmxpbmVfcGFnZXNcIixcbiAgICBcIm9mZmxpbmVfcGFnZXNcIixcbiAgICBcIm1vdmVfcGZuX3JhbmdlX3RvX3pvbmVcIixcbiAgICBcInJlbW92ZV9wZm5fcmFuZ2VfZnJvbV96b25lXCIsXG4gICAgXCJfX2FkZF9wYWdlc1wiLFxuICAgIFwiX19yZW1vdmVfcGFnZXNcIixcbiAgICBcImFkanVzdF9wcmVzZW50X3BhZ2VfY291bnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IGNvbnRpZ3VvdXMgem9uZXMgYXJlIHRyYWNrZWQsIHJlcGxhY2luZyBhbiBPKE4pIHBhZ2VibG9jayBpdGVyYXRpb24gd2l0aCBhbiBPKDEpIGNoZWNrIHVzaW5nIGEgbmV3IGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGNvdW50ZXIgaW4gYHN0cnVjdCB6b25lYC4gVGhpcyBjb3VudGVyIGlzIHVwZGF0ZWQgZHVyaW5nIG1lbW9yeSBob3RwbHVnIGFuZCBpbml0aWFsaXphdGlvbi4gVGhlIGNoYW5nZXMgYWZmZWN0IGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbW9yeSBob3RwbHVnIGxvZ2ljLCB3aGljaCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMDk6MDg6NTkuNjE3OTY2Nzk2WiIsIlNlcSI6NjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5MDY3NjMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU5LjYxODQxOTE0NloiLCJTZXEiOjYyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDQ5MDIxOTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZWQxNDNjYTZmYWZkMzgyNTY4NmRiMmNhZjkxMTgwZWI2ZDBiZmZiMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDA5OjA2OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG5pbmRleCBiNzYxODM1NDVlNWJmLi5jZWVhNmM4YjI3Y2MxIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3RcbkBAIC00ODMsNiArNDgzLDEyIEBAIEdlbmVyYWxcbiAgIGBgcHJlc2VudF9wYWdlc2BgIHNob3VsZCB1c2UgYGBnZXRfb25saW5lX21lbXMoKWBgIHRvIGdldCBhIHN0YWJsZSB2YWx1ZS4gSXRcbiAgIGlzIGluaXRpYWxpemVkIGJ5IGBgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcygpYGAuXG4gXG4rYGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgYFxuKyAgUGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZSBhbiBvbmxpbmUgbWVtb3J5IG1hcDogcHJlc2VudCBwYWdlcyBhbmRcbisgIG1lbW9yeSBob2xlcyB3aG9zZSBtZW1vcnkgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZFxuKyAgYGBwZm5fdG9fb25saW5lX3BhZ2UoKWBgIHN1Y2NlZWRzLiBTZWUgdGhlIGNvbW1lbnQgZm9yXG4rICBgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGBgIGluIGBgaW5jbHVkZS9saW51eC9tbXpvbmUuaGBgIGZvciBtb3JlIGRldGFpbHMuXG4rXG4gYGBwcmVzZW50X2Vhcmx5X3BhZ2VzYGBcbiAgIFRoZSBwcmVzZW50IHBhZ2VzIGV4aXN0aW5nIHdpdGhpbiB0aGUgem9uZSBsb2NhdGVkIG9uIG1lbW9yeSBhdmFpbGFibGUgc2luY2VcbiAgIGVhcmx5IGJvb3QsIGV4Y2x1ZGluZyBob3RwbHVnZ2VkIG1lbW9yeS4gRGVmaW5lZCBvbmx5IHdoZW5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbmluZGV4IGJjZmUyZDlmNGFkYmQuLjk3Njk5YmU5YTM1NzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2Jhc2UvbWVtb3J5LmNcbisrKyBiL2RyaXZlcnMvYmFzZS9tZW1vcnkuY1xuQEAgLTI0Niw2ICsyNDYsNyBAQCBzdGF0aWMgaW50IG1lbW9yeV9ibG9ja19vbmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbiBcdGlmIChucl92bWVtbWFwX3BhZ2VzKSB7XG4gXHRcdHJldCA9IG1ocF9pbml0X21lbW1hcF9vbl9tZW1vcnkoc3RhcnRfcGZuLCBucl92bWVtbWFwX3BhZ2VzLCB6b25lKTtcbiBcdFx0aWYgKHJldClcbkBAIC0yNzAsNiArMjcxLDcgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb25saW5lKHN0cnVjdCBtZW1vcnlfYmxvY2sgKm1lbSlcbiBcbiBcdG1lbS1cdTAwM2V6b25lID0gem9uZTtcbiBvdXQ6XG4rXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMjk1LDYgKzI5Nyw3IEBAIHN0YXRpYyBpbnQgbWVtb3J5X2Jsb2NrX29mZmxpbmUoc3RydWN0IG1lbW9yeV9ibG9jayAqbWVtKVxuIFx0XHRucl92bWVtbWFwX3BhZ2VzID0gbWVtLVx1MDAzZWFsdG1hcC1cdTAwM2VmcmVlO1xuIFxuIFx0bWVtX2hvdHBsdWdfYmVnaW4oKTtcbitcdGNsZWFyX3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0YWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChwZm5fdG9fcGFnZShzdGFydF9wZm4pLCBtZW0tXHUwMDNlZ3JvdXAsXG4gXHRcdFx0XHRcdCAgLW5yX3ZtZW1tYXBfcGFnZXMpO1xuQEAgLTMxMiw4ICszMTUsMTAgQEAgc3RhdGljIGludCBtZW1vcnlfYmxvY2tfb2ZmbGluZShzdHJ1Y3QgbWVtb3J5X2Jsb2NrICptZW0pXG4gXHRpZiAobnJfdm1lbW1hcF9wYWdlcylcbiBcdFx0bWhwX2RlaW5pdF9tZW1tYXBfb25fbWVtb3J5KHN0YXJ0X3BmbiwgbnJfdm1lbW1hcF9wYWdlcyk7XG4gXG4tXHRtZW0tXHUwMDNlem9uZSA9IE5VTEw7XG4gb3V0OlxuK1x0c2V0X3pvbmVfY29udGlndW91cyhtZW0tXHUwMDNlem9uZSk7XG4rXHRpZiAoIXJldClcbitcdFx0bWVtLVx1MDAzZXpvbmUgPSBOVUxMO1xuIFx0bWVtX2hvdHBsdWdfZG9uZSgpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmhcbmluZGV4IGNhMjcxMjE4NzE0NzUuLjU4ZjM0MmRlM2JhY2IgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oXG5AQCAtMTAzMiw2ICsxMDMyLDIxIEBAIHN0cnVjdCB6b25lIHtcbiBcdCAqIGNtYSBwYWdlcyBpcyBwcmVzZW50IHBhZ2VzIHRoYXQgYXJlIGFzc2lnbmVkIGZvciBDTUEgdXNlXG4gXHQgKiAoTUlHUkFURV9DTUEpLlxuIFx0ICpcbitcdCAqIHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCB0cmFja3MgcGFnZXMgd2l0aGluIHRoZSB6b25lIHRoYXQgaGF2ZVxuK1x0ICogYW4gb25saW5lIG1lbW9yeSBtYXA6IHByZXNlbnQgcGFnZXMgYW5kIG1lbW9yeSBob2xlcyB3aG9zZVxuK1x0ICogbWVtb3J5IG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZCBhbmQgcGZuX3RvX29ubGluZV9wYWdlKClcbitcdCAqIHN1Y2NlZWRzLiBXaGVuIHNwYW5uZWRfcGFnZXMgPT0gcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwLFxuK1x0ICogcGZuX3RvX3BhZ2UoKSBjYW4gYmUgcGVyZm9ybWVkIHdpdGhvdXQgZnVydGhlciBjaGVja3Mgb24gYW55XG4rXHQgKiBQRk4gd2l0aGluIHRoZSB6b25lIHNwYW4uXG4rXHQgKlxuK1x0ICogTm90ZTogdGhpcyBjb3VudGVyIG1heSB0ZW1wb3JhcmlseSB1bmRlcmNvdW50IHdoZW4gcGFnZXMgd2l0aCBhblxuK1x0ICogb25saW5lIG1lbW9yeSBtYXAgZXhpc3Qgb3V0c2lkZSB0aGUgY3VycmVudCB6b25lIHNwYW4uIFRoaXMgY2FuXG4rXHQgKiBvbmx5IGhhcHBlbiBkdXJpbmcgYm9vdCwgd2hlbiBpbml0aWFsaXppbmcgdGhlIG1lbW9yeSBtYXAgb2ZcbitcdCAqIHBhZ2VzIHRoYXQgZG8gbm90IGZhbGwgaW50byBhbnkgem9uZSBzcGFuLiBHcm93aW5nIHRoZSB6b25lIHRvXG4rXHQgKiBjb3ZlciBzdWNoIHBhZ2VzIGFuZCBsYXRlciBzaHJpbmtpbmcgaXQgYmFjayBtYXkgcmVzdWx0IGluIGFcbitcdCAqIFwidG9vIHNtYWxsXCIgdmFsdWUuIFRoaXMgaXMgc2FmZTogaXQgbWVyZWx5IHByZXZlbnRzIGRldGVjdGluZyBhXG4rXHQgKiBjb250aWd1b3VzIHpvbmUuXG4rXHQgKlxuIFx0ICogU28gcHJlc2VudF9wYWdlcyBtYXkgYmUgdXNlZCBieSBtZW1vcnkgaG90cGx1ZyBvciBtZW1vcnkgcG93ZXJcbiBcdCAqIG1hbmFnZW1lbnQgbG9naWMgdG8gZmlndXJlIG91dCB1bm1hbmFnZWQgcGFnZXMgYnkgY2hlY2tpbmdcbiBcdCAqIChwcmVzZW50X3BhZ2VzIC0gbWFuYWdlZF9wYWdlcykuIEFuZCBtYW5hZ2VkX3BhZ2VzIHNob3VsZCBiZSB1c2VkXG5AQCAtMTA1Niw2ICsxMDcxLDcgQEAgc3RydWN0IHpvbmUge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRtYW5hZ2VkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRzcGFubmVkX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X3BhZ2VzO1xuK1x0dW5zaWduZWQgbG9uZ1x0XHRwYWdlc193aXRoX29ubGluZV9tZW1tYXA7XG4gI2lmIGRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKVxuIFx0dW5zaWduZWQgbG9uZ1x0XHRwcmVzZW50X2Vhcmx5X3BhZ2VzO1xuICNlbmRpZlxuQEAgLTE2ODEsNiArMTY5NywzOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc196b25lX2RldmljZShjb25zdCBzdHJ1Y3Qgem9uZSAqem9uZSlcbiB9XG4gI2VuZGlmXG4gXG4rLyoqXG4rICogem9uZV9pc19jb250aWd1b3VzIC0gdGVzdCB3aGV0aGVyIGEgem9uZSBpcyBjb250aWd1b3VzXG4rICogQHpvbmU6IHRoZSB6b25lIHRvIHRlc3QuXG4rICpcbisgKiBJbiBhIGNvbnRpZ3VvdXMgem9uZSwgaXQgaXMgdmFsaWQgdG8gY2FsbCBwZm5fdG9fcGFnZSgpIG9uIGFueSBQRk4gaW4gdGhlXG4rICogc3Bhbm5lZCB6b25lIHdpdGhvdXQgcmVxdWlyaW5nIHBmbl92YWxpZCgpIG9yIHBmbl90b19vbmxpbmVfcGFnZSgpIGNoZWNrcy5cbisgKlxuKyAqIE5vdGUgdGhhdCBtaXNzaW5nIHN5bmNocm9uaXphdGlvbiB3aXRoIG1lbW9yeSBvZmZsaW5pbmcgbWFrZXMgYW55IFBGTlxuKyAqIHRyYXZlcnNhbCBwcm9uZSB0byByYWNlcy5cbisgKlxuKyAqIFpPTkVfREVWSUNFIHpvbmVzIGFyZSBhbHdheXMgbWFya2VkIG5vbi1jb250aWd1b3VzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIGNvbnRpZ3VvdXMsIG90aGVyd2lzZSBmYWxzZS5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgem9uZV9pc19jb250aWd1b3VzKGNvbnN0IHN0cnVjdCB6b25lICp6b25lKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIHNldF96b25lX2NvbnRpZ3VvdXMoc3RydWN0IHpvbmUgKnpvbmUpXG4re1xuK1x0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4rXHRcdHJldHVybjtcbitcdGlmICh6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPT0gem9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXApXG4rXHRcdFdSSVRFX09OQ0Uoem9uZS1cdTAwM2Vjb250aWd1b3VzLCB0cnVlKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbit7XG4rXHRXUklURV9PTkNFKHpvbmUtXHUwMDNlY29udGlndW91cywgZmFsc2UpO1xuK31cbitcbiAvKlxuICAqIFJldHVybnMgdHJ1ZSBpZiBhIHpvbmUgaGFzIHBhZ2VzIG1hbmFnZWQgYnkgdGhlIGJ1ZGR5IGFsbG9jYXRvci5cbiAgKiBBbGwgdGhlIHJlY2xhaW0gZGVjaXNpb25zIGhhdmUgdG8gdXNlIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW5cbmRpZmYgLS1naXQgYS9tbS9pbnRlcm5hbC5oIGIvbW0vaW50ZXJuYWwuaFxuaW5kZXggMTgxZTc5ZjFkNmEyMC4uZjkzMmI3NTc3YzkyYSAxMDA2NDRcbi0tLSBhL21tL2ludGVybmFsLmhcbisrKyBiL21tL2ludGVybmFsLmhcbkBAIC04MDUsMjEgKzgwNSwxNSBAQCBleHRlcm4gc3RydWN0IHBhZ2UgKl9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBhZ2VibG9ja19wZm5fdG9fcGFnZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHRcdHVuc2lnbmVkIGxvbmcgZW5kX3Bmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0aWYgKHpvbmUtXHUwMDNlY29udGlndW91cylcbitcdGlmICh6b25lX2lzX2NvbnRpZ3VvdXMoem9uZSkpXG4gXHRcdHJldHVybiBwZm5fdG9fcGFnZShzdGFydF9wZm4pO1xuIFxuIFx0cmV0dXJuIF9fcGFnZWJsb2NrX3Bmbl90b19wYWdlKHN0YXJ0X3BmbiwgZW5kX3Bmbiwgem9uZSk7XG4gfVxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSk7XG4gYm9vbCBwZm5fcmFuZ2VfaW50ZXJzZWN0c196b25lcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfem9uZV9jb250aWd1b3VzKHN0cnVjdCB6b25lICp6b25lKVxuLXtcbi1cdHpvbmUtXHUwMDNlY29udGlndW91cyA9IGZhbHNlO1xuLX1cbi1cbiBleHRlcm4gaW50IF9faXNvbGF0ZV9mcmVlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcik7XG4gZXh0ZXJuIHZvaWQgX19wdXRiYWNrX2lzb2xhdGVkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcixcbiBcdFx0XHRcdCAgICBpbnQgbXQpO1xuZGlmZiAtLWdpdCBhL21tL21lbW9yeV9ob3RwbHVnLmMgYi9tbS9tZW1vcnlfaG90cGx1Zy5jXG5pbmRleCA3YWMxOWZhYjIyNjMyLi44ZGJkNTBkODgxNTVhIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuY1xuKysrIGIvbW0vbWVtb3J5X2hvdHBsdWcuY1xuQEAgLTQyMiw0OSArNDIyLDM5IEBAIGludCBfX2FkZF9wYWdlcyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLS8qIGZpbmQgdGhlIHNtYWxsZXN0IHZhbGlkIHBmbiBpbiB0aGUgcmFuZ2UgW3N0YXJ0X3BmbiwgZW5kX3BmbikgKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKGludCBuaWQsIHN0cnVjdCB6b25lICp6b25lLFxuLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbixcbi1cdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyBib29sIHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZSh1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IHpvbmUgKnpvbmUpXG4ge1xuLVx0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4tXHRcdGlmICh1bmxpa2VseSghcGZuX3RvX29ubGluZV9wYWdlKHN0YXJ0X3BmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBBTElHTl9ET1dOKHBmbiwgUEFHRVNfUEVSX1NVQlNFQ1RJT04pO1xuK1x0Y29uc3QgdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gc3RhcnRfcGZuICsgUEFHRVNfUEVSX1NVQlNFQ1RJT04gLSAxO1xuIFxuLVx0XHRpZiAodW5saWtlbHkocGZuX3RvX25pZChzdGFydF9wZm4pICE9IG5pZCkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBBbGwgcGFnZXMgaW4gYSBzdWJzZWN0aW9uIGFyZSBlaXRoZXIgb25saW5lIG9yIG9mZmxpbmUuICovXG4rXHRpZiAodW5saWtlbHkoIXBmbl90b19vbmxpbmVfcGFnZShzdGFydF9wZm4pKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0XHRpZiAoem9uZSAhPSBwYWdlX3pvbmUocGZuX3RvX3BhZ2Uoc3RhcnRfcGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4rXHQvKiBDaGVja2luZyBzdGFydCtlbmQgaXMgc3VmZmljaWVudC4gKi9cbitcdHJldHVybiB6b25lID09IHBhZ2Vfem9uZShwZm5fdG9fcGFnZShzdGFydF9wZm4pKSB8fFxuK1x0ICAgICAgIHpvbmUgPT0gcGFnZV96b25lKHBmbl90b19wYWdlKGVuZF9wZm4pKTtcbit9XG4gXG4tXHRcdHJldHVybiBzdGFydF9wZm47XG4rLyogZmluZCB0aGUgc21hbGxlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKSAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfc21hbGxlc3Rfc2VjdGlvbl9wZm4oc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4re1xuK1x0Zm9yICg7IHN0YXJ0X3BmbiBcdTAwM2MgZW5kX3Bmbjsgc3RhcnRfcGZuICs9IFBBR0VTX1BFUl9TVUJTRUNUSU9OKSB7XG4rXHRcdGlmIChzdWJzZWN0aW9uX292ZXJsYXBzX3pvbmUoc3RhcnRfcGZuLCB6b25lKSlcbitcdFx0XHRyZXR1cm4gc3RhcnRfcGZuO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIC8qIGZpbmQgdGhlIGJpZ2dlc3QgdmFsaWQgcGZuIGluIHRoZSByYW5nZSBbc3RhcnRfcGZuLCBlbmRfcGZuKS4gKi9cbi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaW5kX2JpZ2dlc3Rfc2VjdGlvbl9wZm4oaW50IG5pZCwgc3RydWN0IHpvbmUgKnpvbmUsXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4tXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpbmRfYmlnZ2VzdF9zZWN0aW9uX3BmbihzdHJ1Y3Qgem9uZSAqem9uZSxcbitcdFx0dW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cbi1cdC8qIHBmbiBpcyB0aGUgZW5kIHBmbiBvZiBhIG1lbW9yeSBzZWN0aW9uLiAqL1xuLVx0cGZuID0gZW5kX3BmbiAtIDE7XG4tXHRmb3IgKDsgcGZuIFx1MDAzZT0gc3RhcnRfcGZuOyBwZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbi1cdFx0aWYgKHVubGlrZWx5KCFwZm5fdG9fb25saW5lX3BhZ2UocGZuKSkpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmICh1bmxpa2VseShwZm5fdG9fbmlkKHBmbikgIT0gbmlkKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHpvbmUgIT0gcGFnZV96b25lKHBmbl90b19wYWdlKHBmbikpKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRyZXR1cm4gcGZuO1xuK1x0Zm9yICg7IGVuZF9wZm4gXHUwMDNlPSBzdGFydF9wZm47IGVuZF9wZm4gLT0gUEFHRVNfUEVSX1NVQlNFQ1RJT04pIHtcbitcdFx0aWYgKHN1YnNlY3Rpb25fb3ZlcmxhcHNfem9uZShlbmRfcGZuIC0gMSwgem9uZSkpXG4rXHRcdFx0cmV0dXJuIGVuZF9wZm4gLSAxO1xuIFx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ3Miw3ICs0NjIsNiBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdGludCBuaWQgPSB6b25lX3RvX25pZCh6b25lKTtcbiBcbiBcdGlmICh6b25lLVx1MDAzZXpvbmVfc3RhcnRfcGZuID09IHN0YXJ0X3Bmbikge1xuIFx0XHQvKlxuQEAgLTQ4MSw3ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfem9uZV9zcGFuKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdFx0ICogSW4gdGhpcyBjYXNlLCB3ZSBmaW5kIHNlY29uZCBzbWFsbGVzdCB2YWxpZCBtZW1fc2VjdGlvblxuIFx0XHQgKiBmb3Igc2hyaW5raW5nIHpvbmUuXG4gXHRcdCAqL1xuLVx0XHRwZm4gPSBmaW5kX3NtYWxsZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgZW5kX3BmbixcbitcdFx0cGZuID0gZmluZF9zbWFsbGVzdF9zZWN0aW9uX3Bmbih6b25lLCBlbmRfcGZuLFxuIFx0XHRcdFx0XHRcdHpvbmVfZW5kX3Bmbih6b25lKSk7XG4gXHRcdGlmIChwZm4pIHtcbiBcdFx0XHR6b25lLVx1MDAzZXNwYW5uZWRfcGFnZXMgPSB6b25lX2VuZF9wZm4oem9uZSkgLSBwZm47XG5AQCAtNDk3LDcgKzQ4Niw3IEBAIHN0YXRpYyB2b2lkIHNocmlua196b25lX3NwYW4oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuIFx0XHQgKiBJbiB0aGlzIGNhc2UsIHdlIGZpbmQgc2Vjb25kIGJpZ2dlc3QgdmFsaWQgbWVtX3NlY3Rpb24gZm9yXG4gXHRcdCAqIHNocmlua2luZyB6b25lLlxuIFx0XHQgKi9cbi1cdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKG5pZCwgem9uZSwgem9uZS1cdTAwM2V6b25lX3N0YXJ0X3BmbixcbitcdFx0cGZuID0gZmluZF9iaWdnZXN0X3NlY3Rpb25fcGZuKHpvbmUsIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4sXG4gXHRcdFx0XHRcdCAgICAgICBzdGFydF9wZm4pO1xuIFx0XHRpZiAocGZuKVxuIFx0XHRcdHpvbmUtXHUwMDNlc3Bhbm5lZF9wYWdlcyA9IHBmbiAtIHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm4gKyAxO1xuQEAgLTU1NywxOCArNTQ2LDEzIEBAIHZvaWQgcmVtb3ZlX3Bmbl9yYW5nZV9mcm9tX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsXG4gXG4gXHQvKlxuIFx0ICogWm9uZSBzaHJpbmtpbmcgY29kZSBjYW5ub3QgcHJvcGVybHkgZGVhbCB3aXRoIFpPTkVfREVWSUNFLiBTb1xuLVx0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayB0aGUgem9uZXMgLSB3aGljaCBpcyBva2F5IGFzXG4tXHQgKiBzZXRfem9uZV9jb250aWd1b3VzKCkgY2Fubm90IGRlYWwgd2l0aCBaT05FX0RFVklDRSBlaXRoZXIgd2F5LlxuK1x0ICogd2Ugd2lsbCBub3QgdHJ5IHRvIHNocmluayBpdC5cbiBcdCAqL1xuIFx0aWYgKHpvbmVfaXNfem9uZV9kZXZpY2Uoem9uZSkpXG4gXHRcdHJldHVybjtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdHNocmlua196b25lX3NwYW4oem9uZSwgc3RhcnRfcGZuLCBzdGFydF9wZm4gKyBucl9wYWdlcyk7XG4gXHR1cGRhdGVfcGdkYXRfc3BhbihwZ2RhdCk7XG4tXG4tXHRzZXRfem9uZV9jb250aWd1b3VzKHpvbmUpO1xuIH1cbiBcbiAvKipcbkBAIC03NDYsOCArNzMwLDYgQEAgdm9pZCBtb3ZlX3Bmbl9yYW5nZV90b196b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbixcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSB6b25lLVx1MDAzZXpvbmVfcGdkYXQ7XG4gXHRpbnQgbmlkID0gcGdkYXQtXHUwMDNlbm9kZV9pZDtcbiBcbi1cdGNsZWFyX3pvbmVfY29udGlndW91cyh6b25lKTtcbi1cbiBcdGlmICh6b25lX2lzX2VtcHR5KHpvbmUpKVxuIFx0XHRpbml0X2N1cnJlbnRseV9lbXB0eV96b25lKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpO1xuIFx0cmVzaXplX3pvbmVfcmFuZ2Uoem9uZSwgc3RhcnRfcGZuLCBucl9wYWdlcyk7XG5AQCAtNzc1LDggKzc1Nyw2IEBAIHZvaWQgbW92ZV9wZm5fcmFuZ2VfdG9fem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXG4gXHRtZW1tYXBfaW5pdF9yYW5nZShucl9wYWdlcywgbmlkLCB6b25lX2lkeCh6b25lKSwgc3RhcnRfcGZuLCAwLFxuIFx0XHRcdCBNRU1JTklUX0hPVFBMVUcsIGFsdG1hcCwgbWlncmF0ZXR5cGUsXG4gXHRcdFx0IGlzb2xhdGVfcGFnZWJsb2NrKTtcbi1cbi1cdHNldF96b25lX2NvbnRpZ3VvdXMoem9uZSk7XG4gfVxuIFxuIHN0cnVjdCBhdXRvX21vdmFibGVfc3RhdHMge1xuQEAgLTEwNzIsNiArMTA1Miw3IEBAIHZvaWQgYWRqdXN0X3ByZXNlbnRfcGFnZV9jb3VudChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IG1lbW9yeV9ncm91cCAqZ3JvdXAsXG4gXHRpZiAoZWFybHlfc2VjdGlvbihfX3Bmbl90b19zZWN0aW9uKHBhZ2VfdG9fcGZuKHBhZ2UpKSkpXG4gXHRcdHpvbmUtXHUwMDNlcHJlc2VudF9lYXJseV9wYWdlcyArPSBucl9wYWdlcztcbiBcdHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbitcdHpvbmUtXHUwMDNlcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwICs9IG5yX3BhZ2VzO1xuIFx0em9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyArPSBucl9wYWdlcztcbiBcbiBcdGlmIChncm91cCBcdTAwMjZcdTAwMjYgbW92YWJsZSlcbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IGYxYWZlMDIzZTRlNzIuLmQ2M2VlNTU0ZDdlYjggMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbisrKyBiL21tL21tX2luaXQuY1xuQEAgLTc5OSw2ICs3OTksMjggQEAgdm9pZCBfX21lbWluaXQgaW5pdF9kZWZlcnJlZF9wYWdlKHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgbmlkKVxuIFx0X19pbml0X2RlZmVycmVkX3BhZ2UocGZuLCBuaWQpO1xuIH1cbiBcbisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQXG4rc3RhdGljIGJvb2wgX19pbml0IHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUodW5zaWduZWQgbG9uZyBwZm4sXG4rXHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyAqbGFzdF9zdWJzZWN0aW9uLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgKmlzX29ubGluZSlcbit7XG4rXHR1bnNpZ25lZCBsb25nIHN1YnNlY3Rpb24gPSBwZm4gXHUwMDI2IFBBR0VfU1VCU0VDVElPTl9NQVNLO1xuK1xuK1x0aWYgKHN1YnNlY3Rpb24gIT0gKmxhc3Rfc3Vic2VjdGlvbikge1xuK1x0XHQqaXNfb25saW5lID0gISFwZm5fdG9fb25saW5lX3BhZ2UocGZuKTtcbitcdFx0Kmxhc3Rfc3Vic2VjdGlvbiA9IHN1YnNlY3Rpb247XG4rXHR9XG4rXHRyZXR1cm4gKmlzX29ubGluZTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGJvb2wgdW5hdmFpbGFibGVfcGZuX2lzX29ubGluZSh1bnNpZ25lZCBsb25nIHBmbixcbitcdFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nICpsYXN0X3N1YnNlY3Rpb24sXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqaXNfb25saW5lKVxuK3tcbitcdHJldHVybiB0cnVlO1xuK31cbisjZW5kaWZcbitcbiAvKlxuICAqIE9ubHkgc3RydWN0IHBhZ2VzIHRoYXQgY29ycmVzcG9uZCB0byByYW5nZXMgZGVmaW5lZCBieSBtZW1ibG9jay5tZW1vcnlcbiAgKiBhcmUgemVyb2VkIGFuZCBpbml0aWFsaXplZCBieSBnb2luZyB0aHJvdWdoIF9faW5pdF9zaW5nbGVfcGFnZSgpIGR1cmluZ1xuQEAgLTgyMiwyMiArODQ0LDI3IEBAIHZvaWQgX19tZW1pbml0IGluaXRfZGVmZXJyZWRfcGFnZSh1bnNpZ25lZCBsb25nIHBmbiwgaW50IG5pZClcbiAgKiAgIHpvbmUvbm9kZSBhYm92ZSB0aGUgaG9sZSBleGNlcHQgZm9yIHRoZSB0cmFpbGluZyBwYWdlcyBpbiB0aGUgbGFzdFxuICAqICAgc2VjdGlvbiB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHpvbmUvbm9kZSBiZWxvdy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tXHRcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBlcGZuLFxuLVx0XHRcdFx0XHQgIGludCB6b25lLCBpbnQgbm9kZSlcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4rXHRcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlcGZuLFxuK1x0XHRcdFx0XHRcdCAgIGludCB6b25lLCBpbnQgbm9kZSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHBmbjtcbi1cdHU2NCBwZ2NudCA9IDA7XG4rXHR1NjQgcGdjbnQgPSAwLCBvbmxpbmVfcGdjbnQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3N1YnNlY3Rpb24gPSAtMTtcbitcdGJvb2wgaXNfb25saW5lID0gZmFsc2U7XG4gXG4gXHRmb3JfZWFjaF92YWxpZF9wZm4ocGZuLCBzcGZuLCBlcGZuKSB7XG4gXHRcdF9faW5pdF9zaW5nbGVfcGFnZShwZm5fdG9fcGFnZShwZm4pLCBwZm4sIHpvbmUsIG5vZGUpO1xuIFx0XHRfX1NldFBhZ2VSZXNlcnZlZChwZm5fdG9fcGFnZShwZm4pKTtcbitcdFx0aWYgKHVuYXZhaWxhYmxlX3Bmbl9pc19vbmxpbmUocGZuLCBcdTAwMjZsYXN0X3N1YnNlY3Rpb24sIFx1MDAyNmlzX29ubGluZSkpXG4rXHRcdFx0b25saW5lX3BnY250Kys7XG4gXHRcdHBnY250Kys7XG4gXHR9XG4gXG4gXHRpZiAocGdjbnQpXG4gXHRcdHByX2luZm8oXCJPbiBub2RlICVkLCB6b25lICVzOiAlbGxkIHBhZ2VzIGluIHVuYXZhaWxhYmxlIHJhbmdlc1xcblwiLFxuIFx0XHRcdG5vZGUsIHpvbmVfbmFtZXNbem9uZV0sIHBnY250KTtcbitcdHJldHVybiBvbmxpbmVfcGdjbnQ7XG4gfVxuIFxuIC8qXG5AQCAtOTM0LDkgKzk2MSwyMSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgbWVtbWFwX2luaXRfem9uZV9yYW5nZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiBcbiBcdG1lbW1hcF9pbml0X3JhbmdlKGVuZF9wZm4gLSBzdGFydF9wZm4sIG5pZCwgem9uZV9pZCwgc3RhcnRfcGZuLFxuIFx0XHRcdCAgem9uZV9lbmRfcGZuLCBNRU1JTklUX0VBUkxZLCBOVUxMLCBtdCwgZmFsc2UpO1xuK1x0em9uZS1cdTAwM2VwYWdlc193aXRoX29ubGluZV9tZW1tYXAgKz0gZW5kX3BmbiAtIHN0YXJ0X3BmbjtcbitcbitcdGlmICgqaG9sZV9wZm4gXHUwMDNjIHN0YXJ0X3Bmbikge1xuK1x0XHR1bnNpZ25lZCBsb25nIGhvbGVfc3RhcnRfcGZuID0gKmhvbGVfcGZuO1xuK1x0XHR1bnNpZ25lZCBsb25nIHBnY250O1xuIFxuLVx0aWYgKCpob2xlX3BmbiBcdTAwM2Mgc3RhcnRfcGZuKVxuLVx0XHRpbml0X3VuYXZhaWxhYmxlX3JhbmdlKCpob2xlX3Bmbiwgc3RhcnRfcGZuLCB6b25lX2lkLCBuaWQpO1xuK1x0XHRpZiAoaG9sZV9zdGFydF9wZm4gXHUwMDNjIHpvbmVfc3RhcnRfcGZuKSB7XG4rXHRcdFx0aW5pdF91bmF2YWlsYWJsZV9yYW5nZShob2xlX3N0YXJ0X3Bmbiwgem9uZV9zdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHRcdGhvbGVfc3RhcnRfcGZuID0gem9uZV9zdGFydF9wZm47XG4rXHRcdH1cbitcdFx0cGdjbnQgPSBpbml0X3VuYXZhaWxhYmxlX3JhbmdlKGhvbGVfc3RhcnRfcGZuLCBzdGFydF9wZm4sXG4rXHRcdFx0XHRcdCAgICAgICB6b25lX2lkLCBuaWQpO1xuK1x0XHR6b25lLVx1MDAzZXBhZ2VzX3dpdGhfb25saW5lX21lbW1hcCArPSBwZ2NudDtcbitcdH1cbiBcbiBcdCpob2xlX3BmbiA9IGVuZF9wZm47XG4gfVxuQEAgLTIxOTUsMjggKzIyMzQsNiBAQCB2b2lkIF9faW5pdCBpbml0X2NtYV9wYWdlYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpXG4gfVxuICNlbmRpZlxuIFxuLXZvaWQgc2V0X3pvbmVfY29udGlndW91cyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi17XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX3N0YXJ0X3BmbiA9IHpvbmUtXHUwMDNlem9uZV9zdGFydF9wZm47XG4tXHR1bnNpZ25lZCBsb25nIGJsb2NrX2VuZF9wZm47XG4tXG4tXHRibG9ja19lbmRfcGZuID0gcGFnZWJsb2NrX2VuZF9wZm4oYmxvY2tfc3RhcnRfcGZuKTtcbi1cdGZvciAoOyBibG9ja19zdGFydF9wZm4gXHUwMDNjIHpvbmVfZW5kX3Bmbih6b25lKTtcbi1cdFx0XHRibG9ja19zdGFydF9wZm4gPSBibG9ja19lbmRfcGZuLFxuLVx0XHRcdCBibG9ja19lbmRfcGZuICs9IHBhZ2VibG9ja19ucl9wYWdlcykge1xuLVxuLVx0XHRibG9ja19lbmRfcGZuID0gbWluKGJsb2NrX2VuZF9wZm4sIHpvbmVfZW5kX3Bmbih6b25lKSk7XG4tXG4tXHRcdGlmICghX19wYWdlYmxvY2tfcGZuX3RvX3BhZ2UoYmxvY2tfc3RhcnRfcGZuLFxuLVx0XHRcdFx0XHQgICAgIGJsb2NrX2VuZF9wZm4sIHpvbmUpKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4tXG4tXHQvKiBXZSBjb25maXJtIHRoYXQgdGhlcmUgaXMgbm8gaG9sZSAqL1xuLVx0em9uZS1cdTAwM2Vjb250aWd1b3VzID0gdHJ1ZTtcbi19XG4tXG4gLypcbiAgKiBDaGVjayBpZiBhIFBGTiByYW5nZSBpbnRlcnNlY3RzIG11bHRpcGxlIHpvbmVzIG9uIG9uZSBvciBtb3JlXG4gICogTlVNQSBub2Rlcy4gU3BlY2lmeSB0aGUgQG5pZCBhcmd1bWVudCBpZiBpdCBpcyBrbm93biB0aGF0IHRoaXNcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDA5OjA4OjU5LjYxODQxOTk3NloiLCJTZXEiOjYzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ5MDE4NDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBNZW1vcnkgSG90cGx1ZyBhbmQgQ29udGlndW91cyBab25lIExvZ2ljIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgcGF0Y2ggaXMgbWVzc2luZyB3aXRoIG1lbW9yeSBob3RwbHVnIGFuZCB0aGUgbG9naWMgYXJvdW5kIGNvbnRpZ3VvdXMgem9uZXMsIHNwZWNpZmljYWxseSBieSBhZGRpbmcgYHBhZ2VzX3dpdGhfb25saW5lX21lbW1hcGAgdG8gdGhlIGBzdHJ1Y3Qgem9uZWAgYW5kIGNoYW5naW5nIGhvdyB3ZSBkZXRlcm1pbmUgaWYgYSB6b25lIGlzIGNvbnRpZ3VvdXMuIEl0IGFsc28gdG91Y2hlcyBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBsaWtlIGBtZW1vcnlfYmxvY2tfb25saW5lYCwgYG1lbW9yeV9ibG9ja19vZmZsaW5lYCwgYW5kIHZhcmlvdXMgUEZOIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IG9wcG9ydHVuaXRpZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIHRoYXQgS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGNhdGNoP1xuXG5MZXQncyBsb29rIGF0IHRoZSBrZXkgY2hhbmdlczogYWRkaW5nIGEgY291bnRlciwgYWx0ZXJpbmcgYSBib29sZWFuIGZsYWcsIGFuZCB1cGRhdGluZyBhIGZldyBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMuIEknbSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBleHBvc2VkIHRvIHVzZXIgc3BhY2UsIG5vIGNvbXBsZXggbmV3IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgaW4gdGhlIGtlcm5lbCBhbmQgcG90ZW50aWFsbHkgbGVmdCB1bmluaXRpYWxpemVkLCBhbmQgbm8gb2J2aW91cyBhdmVudWVzIGZvciBsZWFraW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBUaGVzZSBjaGFuZ2VzIGFyZSBhbGwgYWJvdXQgdHJhY2tpbmcgb25saW5lIHBhZ2VzIGFuZCBjaGVja2luZyBmb3IgY29udGlndWl0eSB3aXRoaW4gbWVtb3J5IHpvbmVzLCBub3QgbmV3IGFsbG9jYXRpb24gb3IgaGFuZGxpbmcgb2YgdW5pbml0aWFsaXplZCBkYXRhIG9uIHRoZSBzdGFjayBvciBoZWFwLlxuXG5JZiB0aGVyZSdzIGEgYnVnIGhlcmUsIEkgc3VzcGVjdCBpdCdzIGdvaW5nIHRvIG1hbmlmZXN0IGFzIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSwgb3IgYW4gaW52YWxpZCBwYWdlIGFjY2VzcyDigJMgbGlrZSB0cnlpbmcgdG8gdXNlIGEgcGFnZSBzdHJ1Y3R1cmUgdGhhdCBkb2Vzbid0IGV4aXN0IG9yIGhhc24ndCBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkLiBLQVNBTiBpcyBhbHJlYWR5IGdvaW5nIHRvIGJlIG15IHByaW1hcnkgdG9vbCB0byBhZGRyZXNzIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcywgd2hpY2ggYXJlIHRoZSBtYWluIHJpc2tzIGhlcmUsIHNpbmNlIGl0IGlzIHRhaWxvcmVkIHRvIGZpbmRpbmcgdGhlc2UgaXNzdWVzLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCByZWFkcywgd2hpY2ggY291bGQgY2F1c2UgYSBzZWN1cml0eSByaXNrLCBwYXJ0aWN1bGFybHkgaWYgdGhhdCBtZW1vcnkgaXMgbGVha2VkLiBCdXQgdGhpcyBwYXRjaCBkb2Vzbid0IHNlZW0gdG8gYmUgY2hhbmdpbmcgaG93IHdlIGFsbG9jYXRlIGFuZCBpbml0aWFsaXplIHBhZ2Ugc3RydWN0dXJlcyBhbmQgbWVtb3J5IHJlZ2lvbnMsIG9ubHkgaG93IHdlIHRyYWNrIHRoZWlyIHN0YXR1cy5cblxuTGV0J3MgZG91YmxlLWNoZWNrLCB0aG91Z2gsIHRvIGJlIHNhZmUuIGBwYWdlc193aXRoX29ubGluZV9tZW1tYXBgIGlzIGEgc2ltcGxlIGNvdW50ZXIuIGB6b25lLVx1MDAzZWNvbnRpZ3VvdXNgIGlzIGEgYm9vbGVhbi4gYGluaXRfdW5hdmFpbGFibGVfcmFuZ2VgIGluaXRpYWxpemVzIHBhZ2VzIHVzaW5nIGBfX2luaXRfc2luZ2xlX3BhZ2VgIGFuZCBgX19TZXRQYWdlUmVzZXJ2ZWRgLiBUaGlzIGluaXRpYWxpemF0aW9uIGlzIGNyaXRpY2FsLCBhbmQgdGhlc2UgcGFnZXMgd2lsbCBiZSBpbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpbmcsIG9yIHRoZXkgd2lsbCBiZSB6ZXJvZWQuIFRoZSBwYXRjaCB1cGRhdGVzIHRoZXNlIGNvdW50ZXJzIGFuZCBmbGFncyBhbmQgbWFuaXB1bGF0ZXMgdGhlc2UgbWVtb3J5IHpvbmVzLCBidXQgaXQgaXNuJ3QgY2hhbmdpbmcgaG93IHRoZXNlIG1lbW9yeSB6b25lcyBhcmUgYWxsb2NhdGVkIG9yIGhvdyB3ZSBpbml0aWFsaXplIHRoZWlyIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGhhdmUgYW55IG9idmlvdXMgaW1wYWN0IG9uIG1lbW9yeSBpbml0aWFsaXphdGlvbiwgYWxsb2NhdGlvbiBvciByZWxlYXNlLCBpdCB1cGRhdGVzIGZsYWdzIGZvciB6b25lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQsIGFuZCByZWxlYXNlZCwgYW5kIHNvIG9uLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMuIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIHVwZGF0ZXMgcGFnZSB0cmFja2luZyBhbmQgY29udGlndW91cyB6b25lIGxvZ2ljLCB3aGljaCBpcyBwcmltYXJpbHkgbWFuYWdpbmcgY291bnRlcnMgYW5kIGZsYWdzIHJlbGF0ZWQgdG8gZXhpc3RpbmcgbWVtb3J5IHN0cnVjdHVyZXMuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbiBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBwcm9uZSB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgYW5kIGlzIG5vdCBnb2luZyB0byBsZWFrIGluZm9ybWF0aW9uIHRvIHVzZXIgc3BhY2UuIEJ1Z3Mgd2lsbCBsaWtlbHkgYmUgbWVtb3J5IGFjY2VzcyBlcnJvcnMgdGhhdCBLQVNBTiBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE3OSwiT3V0cHV0VG9rZW5zIjoxNzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQwOTowOToxNC4xMDg2MDk0M1oiLCJTZXEiOjY0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGhvdHBsdWcgYW5kIHpvbmUgY29udGlndW91cyB0cmFja2luZyBsb2dpYyBieSBpbnRyb2R1Y2luZyBgcGFnZXNfd2l0aF9vbmxpbmVfbWVtbWFwYCB0byBgc3RydWN0IHpvbmVgIGFuZCB1cGRhdGluZyBob3cgYHpvbmVfaXNfY29udGlndW91c2AgaXMgZXZhbHVhdGVkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgdXBkYXRpbmcgY291bnRlcnMgYW5kIGJvb2xlYW4gZmxhZ3MsIGFuZCBkbyBub3QgaW50cm9kdWNlIG5ldyBzdGFjayBvciBoZWFwIGFsbG9jYXRpb25zIHRoYXQgY291bGQgYmUgbGVmdCB1bmluaXRpYWxpemVkLiBUaGVyZSBhcmUgbm8gc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiBpbmZvLWxlYWtzLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKGUuZy4sIGluY29ycmVjdCBjb250aWd1b3VzIHpvbmUgZXZhbHVhdGlvbikgd291bGQgbGlrZWx5IHJlc3VsdCBpbiBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBpbnZhbGlkIHBhZ2Ugc3RydWN0IGFjY2Vzc2VzLCB3aGljaCBhcmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[1] Phase: Succeeded StartedAt: 2026-08-18 09:09:25 +0000 UTC FinishedAt: 2026-08-18 09:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 09:09:25 +0000 UTC FinishedAt: 2026-08-18 09:09:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2] Phase: Succeeded StartedAt: 2026-08-18 09:09:25 +0000 UTC FinishedAt: 2026-08-18 12:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 09:09:25 +0000 UTC FinishedAt: 2026-08-18 12:53:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 09:09:25 +0000 UTC FinishedAt: 2026-08-18 09:09:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 09:09:25 +0000 UTC FinishedAt: 2026-08-18 09:09:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbmrnf/series-workflowbmrnf-convert-artifact-2054741113/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 09:09:35 +0000 UTC FinishedAt: 2026-08-18 09:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 09:09:35 +0000 UTC FinishedAt: 2026-08-18 09:26:14 +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:*d836882e-7bcd-40b5-b170-49d214a02ee7,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-workflowbmrnf/series-workflowbmrnf-convert-artifact-2054741113/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": "fdd22096-85b8-4bc9-9e4c-297ef0ca1ac9", "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-workflowbmrnf/series-workflowbmrnf-build-action-412186007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 09:09:35 +0000 UTC FinishedAt: 2026-08-18 09:26:04 +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:*d836882e-7bcd-40b5-b170-49d214a02ee7,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-workflowbmrnf/series-workflowbmrnf-convert-artifact-2054741113/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": "fdd22096-85b8-4bc9-9e4c-297ef0ca1ac9", "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-workflowbmrnf/series-workflowbmrnf-build-action-412186007/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 09:26:14 +0000 UTC FinishedAt: 2026-08-18 09:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 09:26:14 +0000 UTC FinishedAt: 2026-08-18 09:26:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 09:26:14 +0000 UTC FinishedAt: 2026-08-18 09:26:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 09:26:14 +0000 UTC FinishedAt: 2026-08-18 09:26:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowbmrnf/series-workflowbmrnf-convert-artifact-3236958540/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 09:26:24 +0000 UTC FinishedAt: 2026-08-18 09:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 09:26:24 +0000 UTC FinishedAt: 2026-08-18 09:28:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fdd22096-85b8-4bc9-9e4c-297ef0ca1ac9,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-workflowbmrnf/series-workflowbmrnf-build-action-412186007/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-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 09:28:25 +0000 UTC FinishedAt: 2026-08-18 09:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 09:28:25 +0000 UTC FinishedAt: 2026-08-18 09:28:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 09:28:25 +0000 UTC FinishedAt: 2026-08-18 09:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 09:28:25 +0000 UTC FinishedAt: 2026-08-18 09:44:55 +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:*d836882e-7bcd-40b5-b170-49d214a02ee7,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-workflowbmrnf/series-workflowbmrnf-convert-artifact-3236958540/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": "d6b82277-dec1-4665-b8d0-09d797489a18", "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-workflowbmrnf/series-workflowbmrnf-build-action-2739560296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 09:28:25 +0000 UTC FinishedAt: 2026-08-18 09:44:46 +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:*d836882e-7bcd-40b5-b170-49d214a02ee7,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-workflowbmrnf/series-workflowbmrnf-convert-artifact-3236958540/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": "d6b82277-dec1-4665-b8d0-09d797489a18", "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-workflowbmrnf/series-workflowbmrnf-build-action-2739560296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 09:44:55 +0000 UTC FinishedAt: 2026-08-18 09:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 09:44:55 +0000 UTC FinishedAt: 2026-08-18 09:44:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 09:44:55 +0000 UTC FinishedAt: 2026-08-18 09:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 09:44:55 +0000 UTC FinishedAt: 2026-08-18 09:47:00 +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:*d6b82277-dec1-4665-b8d0-09d797489a18,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-workflowbmrnf/series-workflowbmrnf-build-action-2739560296/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-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 12:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 12:53:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*fdd22096-85b8-4bc9-9e4c-297ef0ca1ac9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6b82277-dec1-4665-b8d0-09d797489a18,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-workflowbmrnf/series-workflowbmrnf-build-action-412186007/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-workflowbmrnf/series-workflowbmrnf-build-action-2739560296/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 09:47:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 09:47:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowbmrnf/series-workflowbmrnf-convert-artifact-2678536885/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 09:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 09:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 09:47:09 +0000 UTC FinishedAt: 2026-08-18 09:47:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 09:47:19 +0000 UTC FinishedAt: 2026-08-18 12:53:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowbmrnf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["online_pages","offline_pages","move_pfn_range_to_zone","remove_pfn_range_from_zone","__add_pages","__remove_pages","adjust_present_page_count"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"b69c2a1fa9beb4c3db24b4013e07f5cb7e7260aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMORY_HOTPLUG"],"series_id":"1b97fac1-9baf-4427-ae79-2a61cecdaf04","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 09:47:19 +0000 UTC FinishedAt: 2026-08-18 12:52:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fdd22096-85b8-4bc9-9e4c-297ef0ca1ac9,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d6b82277-dec1-4665-b8d0-09d797489a18,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-workflowbmrnf/series-workflowbmrnf-build-action-412186007/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-workflowbmrnf/series-workflowbmrnf-build-action-2739560296/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-workflowbmrnf/series-workflowbmrnf-convert-artifact-2678536885/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,}