Name: series-workflow8kzpf Phase: Succeeded StartedAt: 2026-09-04 01:20:12 +0000 UTC FinishedAt: 2026-09-04 05:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[0] Phase: Succeeded StartedAt: 2026-09-04 01:20:12 +0000 UTC FinishedAt: 2026-09-04 01:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 01:20:12 +0000 UTC FinishedAt: 2026-09-04 01:38:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "CIFS_DFS_UPCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "CIFS_DFS_UPCALL" ], "series_id": "d498d30e-3a53-452b-873f-eb6a3478fd66" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iterate_supers_type", "cifs_get_dfs_tcon_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7Q0lGU19ERlNfVVBDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXRlcmF0ZV9zdXBlcnNfdHlwZSYjMzQ7LAogICAgJiMzNDtjaWZzX2dldF9kZnNfdGNvbl9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBWRlMgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaW4gaXRlcmF0ZV9zdXBlcnNfdHlwZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGl0ZXJhdGluZyBvdmVyIHR5cGUtXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmVjMWQ0NDU2ODU2YjdjZmQ2ZjY1MjM4OWMwYzYwYWRjNGIwZDBlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDE6Mzc6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmM4YWNjZDE0NGJhZDIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMTAyNiwxMSAmIzQzOzEwMjYsMTggQEAgdm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnkoc2IsIFx1MDAyNnR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHBhc3NpdmUgcmVmZXJlbmNlIGtlZXBzIHRoZSBzX2xpc3QgY3Vyc29yIHZhbGlkIHdoaWxlIHNiX2xvY2tcbiYjNDM7XHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXG4mIzQzO1x0ICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdCkge1xuIFx0XHRib29sIGxvY2tlZDtcbiBcbiBcdFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoc2ItXHUwMDNlc190eXBlICE9IHR5cGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzYi1cdTAwM2VzX3Bhc3NpdmUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7Q0lGU19ERlNfVVBDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXRlcmF0ZV9zdXBlcnNfdHlwZSYjMzQ7LAogICAgJiMzNDtjaWZzX2dldF9kZnNfdGNvbl9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBWRlMgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaW4gaXRlcmF0ZV9zdXBlcnNfdHlwZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGl0ZXJhdGluZyBvdmVyIHR5cGUtXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmVjMWQ0NDU2ODU2YjdjZmQ2ZjY1MjM4OWMwYzYwYWRjNGIwZDBlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDE6Mzc6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li5jOGFjY2QxNDRiYWQyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTEwMjYsMTEgJiM0MzsxMDI2LDE4IEBAIHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJmFtcDtzYl9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJmFtcDt0eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrCiYjNDM7CSAqIGlzIGRyb3BwZWQuIEVudHJpZXMgYXJlIGFkZGVkIGF0IHRoZSB0YWlsLiBXYWxrIGJhY2t3YXJkcyB0byByZXRhaW4KJiM0MzsJICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsICZhbXA7c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKIAkJYm9vbCBsb2NrZWQ7CiAKIAkJaWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChzYi0mZ3Q7c190eXBlICE9IHR5cGUpCiYjNDM7CQkJY29udGludWU7CiAKIAkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzYi0mZ3Q7c19wYXNzaXZlKSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSBzZWUgYSByZXF1ZXN0IHRvIGV2YWx1YXRlIGEgTGludXgga2VybmVsIHBhdGNoLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYHN5emthbGxlcmAgZnV6emluZywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYWJvdXQgaW1wcm92aW5nIHRlc3RpbmcgYW5kIGJ1ZyBkaXNjb3ZlcnkgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBhIHN0YW5kYXJkIGRldmVsb3BtZW50IGFuZCBRQSB0YXNrLCBzbyBubyByZWQgZmxhZ3MgdGhlcmUg4oCTIHdlIGNhbiBwcm9jZWVkIGNhdXRpb3VzbHkgYnV0IHNhZmVseS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGZzL3N1cGVyLmNgLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZSBsb29rLCBnaXZlbiBpdHMgY3JpdGljYWwgcm9sZSBpbiB0aGUgZmlsZXN5c3RlbS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZGlmZiBzaG93cyBjaGFuZ2VzIGFyb3VuZCB0aGUgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgaXRlcmF0aW9uIGxvZ2ljIHRocm91Z2ggYSBsaXN0IG9mIHN1cGVyYmxvY2tzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgYnV0IHRoZSBwYXRjaCBpcyByZXBsYWNpbmcgaXQgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYC4gVGhlcmUmIzM5O3MgYSBjb21tZW50IGluZGljYXRpbmcgdGhhdCB0aGlzIGNoYW5nZSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggbWFpbnRhaW5pbmcgY3Vyc29yIHZhbGlkaXR5IHdoaWxlIGRyb3BwaW5nIGBzYl9sb2NrYCBhbmQgd2Fsa2luZyB0aGUgbGlzdCBiYWNrd2FyZCBmb3IgbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uIEFsc28sIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYWRkZWQgdG8gb25seSBwcm9jZXNzIHN1cGVyYmxvY2tzIG9mIHRoZSBjb3JyZWN0IHR5cGUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpdGVyYXRlX3N1cGVyc190eXBlYCBkb2VzIGFuZCB3aG8gY2FsbHMgaXQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdC4gTGV0JiMzOTtzIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGZzL3N1cGVyLmNgIGFyb3VuZCBsaW5lIDEwMjYgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgdGhlIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGFjY2VzcyBwYXR0ZXJucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGtleSBoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIGlzc3VlcywgYW5kIGFueSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgaW4gYSBmdXp6aW5nIGNvbnRleHQgd2hlcmUgd2UmIzM5O3JlIHRyeWluZyB0byBzdHJlc3MgdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbXByb3ZlIHRoZSBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpdGVyYXRpb24sIGFuZCB0byBoYW5kbGUgYSByYWNlIGNvbmRpdGlvbiwgc28gdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDE1Olx0ICpcdGl0ZXJhdGVfc3VwZXJzX3R5cGUgLSBjYWxsIGZ1bmN0aW9uIGZvciBzdXBlcmJsb2NrcyBvZiBnaXZlbiB0eXBlXG4xMDE2Olx0ICpcdEB0eXBlOiBmcyB0eXBlXG4xMDE3Olx0ICpcdEBmOiBmdW5jdGlvbiB0byBjYWxsXG4xMDE4Olx0ICpcdEBhcmc6IGFyZ3VtZW50IHRvIHBhc3MgdG8gaXRcbjEwMTk6XHQgKlxuMTAyMDpcdCAqXHRTY2FucyB0aGUgc3VwZXJibG9jayBsaXN0IGFuZCBjYWxscyBnaXZlbiBmdW5jdGlvbiwgcGFzc2luZyBpdFxuMTAyMTpcdCAqXHRsb2NrZWQgc3VwZXJibG9jayBhbmQgZ2l2ZW4gYXJndW1lbnQuXG4xMDIyOlx0ICovXG4xMDIzOlx0dm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxuMTAyNDpcdFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXG4xMDI1Olx0e1xuMTAyNjpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xuMTAyNzpcdFxuMTAyODpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTAyOTpcdFx0LypcbjEwMzA6XHRcdCAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrXG4xMDMxOlx0XHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXG4xMDMyOlx0XHQgKiBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi5cbjEwMzM6XHRcdCAqL1xuMTAzNDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdCkge1xuMTAzNTpcdFx0XHRib29sIGxvY2tlZDtcbjEwMzY6XHRcbjEwMzc6XHRcdFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG4xMDM4Olx0XHRcdFx0Y29udGludWU7XG4xMDM5Olx0XHRcdGlmIChzYi1cdTAwM2VzX3R5cGUgIT0gdHlwZSlcbjEwNDA6XHRcdFx0XHRjb250aW51ZTtcbjEwNDE6XHRcbjEwNDI6XHRcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2ItXHUwMDNlc19wYXNzaXZlKSlcbjEwNDM6XHRcdFx0XHRjb250aW51ZTtcbjEwNDQ6XHRcbjEwNDU6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4xMDQ2Olx0XG4xMDQ3Olx0XHRcdGxvY2tlZCA9IHN1cGVyX2xvY2tfc2hhcmVkKHNiKTtcbjEwNDg6XHRcdFx0aWYgKGxvY2tlZCkge1xuMTA0OTpcdFx0XHRcdGYoc2IsIGFyZyk7XG4xMDUwOlx0XHRcdFx0c3VwZXJfdW5sb2NrX3NoYXJlZChzYik7XG4xMDUxOlx0XHRcdH1cbjEwNTI6XHRcbjEwNTM6XHRcdFx0aWYgKHApXG4xMDU0Olx0XHRcdFx0cHV0X3N1cGVyKHApO1xuMTA1NTpcdFx0XHRwID0gc2I7XG4xMDU2Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwNTc6XHRcdH1cbjEwNTg6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTA1OTpcdFx0aWYgKHApXG4xMDYwOlx0XHRcdHB1dF9zdXBlcihwKTtcbjEwNjE6XHR9XG4xMDYyOlx0XG4xMDYzOlx0RVhQT1JUX1NZTUJPTChpdGVyYXRlX3N1cGVyc190eXBlKTtcbjEwNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB0cmFjZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nICp1c2VkKiAtIHdoYXQmIzM5O3MgdGhlIGNvbnRleHQsIHdoYXQgb3RoZXIgZGF0YSBpcyBpbnZvbHZlZCwgYW5kIHdoYXQmIzM5O3MgdGhlIGludGVuZGVkIHB1cnBvc2Ugb2YgdGhhdCBpdGVyYXRpb24gb3ZlciB0aGUgc3VwZXJ0eXBlcy4gQXJlIHdlIHVzaW5nIGl0IGZvciB0eXBlIGNoZWNraW5nLCBpbmhlcml0YW5jZSBhbmFseXNpcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbuKAmXMgcm9sZSBhbmQgdG8gbWFrZSBlZmZlY3RpdmUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGJleW9uZCB0aGUgaW1tZWRpYXRlIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdGVyYXRlX3N1cGVyc190eXBlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvbWlzYy5jPTg5OT1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpfX2NpZnNfZ2V0X3N1cGVyKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSxcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTAtXHRmb3IgKDsgKmZzX3R5cGU7IGZzX3R5cGUmIzQzOyYjNDM7KSB7XG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MTE6XHRcdGl0ZXJhdGVfc3VwZXJzX3R5cGUoKmZzX3R5cGUsIGYsIFx1MDAyNnNkKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkxMi1cdFx0aWYgKHNkLnNiKSB7XG4tLVxuZnMvc3VwZXIuYz0xMDA5PXZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXG4tLVxuZnMvc3VwZXIuYy0xMDE0LS8qKlxuZnMvc3VwZXIuYzoxMDE1OiAqXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxuZnMvc3VwZXIuYy0xMDE2LSAqXHRAdHlwZTogZnMgdHlwZVxuLS1cbmZzL3N1cGVyLmMtMTAyMi0gKi9cbmZzL3N1cGVyLmM6MTAyMzp2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXG5mcy9zdXBlci5jLTEwMjQtXHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbi0tXG5mcy9zdXBlci5jLTEwNjItXG5mcy9zdXBlci5jOjEwNjM6RVhQT1JUX1NZTUJPTChpdGVyYXRlX3N1cGVyc190eXBlKTtcbmZzL3N1cGVyLmMtMTA2NC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzI1Mj1leHRlcm4gdm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZyk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzI1MzpleHRlcm4gdm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICosXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzI1NC1cdFx0XHQgICAgICAgIHZvaWQgKCopKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN1cGVyYmxvY2sgSXRlcmF0aW9uIFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIGl0ZXJhdGluZyB0aHJvdWdoIHN1cGVyYmxvY2tzLCBzcGVjaWZpY2FsbHkgd2l0aCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAsIHRoZSBjb2RlIHVzZXMgYHN1cGVyX2Jsb2Nrc2AgaW5zdGVhZCBvZiBkaXJlY3RseSB3YWxraW5nIGB0eXBlLSZndDtmc19zdXBlcnNgLiBUaGUgcmVhc29uIGltbWVkaWF0ZWx5IGNsaWNrczogZHJvcHBpbmcgYHNiX2xvY2tgIHdpdGhpbiB0aGUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCBsb29wIG9uIGB0eXBlLSZndDtmc19zdXBlcnNgIGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBJZiB0aGUgY3Vyc29yIGlzbiYjMzk7dCBwcm9wZXJseSBwcm90ZWN0ZWQsIG9yIGlmIHRoZSBgc19pbnN0YW5jZXNgIGxpc3QgaXMgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3ZSBjb3VsZCBydW4gaW50byBzZXJpb3VzIGlzc3Vlcy4gQnV0IHVzaW5nIHRoZSBgc3VwZXJfYmxvY2tzYCBsaXN0IChgc19saXN0YCkgY2lyY3VtdmVudHMgdGhpcyBjb25jZXJuLiBUaGUgYHBgIHdpdGhpbiB0aGF0IGxpc3Qgb2ZmZXJzIGEgcGFzc2l2ZSByZWZlcmVuY2UsIGFuZCBhIGBwdXRfc3VwZXIocClgIG9wZXJhdGlvbiBvbmx5IGhhcHBlbnMgZHVyaW5nIGRlc3RydWN0aW9uIG9yIHJlbGF0ZWQgZXZlbnRzLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50bHkgc2FmZXIuIFdhaXQgYSBzZWNvbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIEkgc2hvdWxkIGFsc28gcmV2aWV3IGBpdGVyYXRlX3N1cGVyc2AgaW4gYGZzL3N1cGVyLmNgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGdlbmVyYWwgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaXMgc291bmQsIG5vdCBqdXN0IHRoaXMgc3BlY2lmaWMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFxuIDk4MTpcdFx0Zm9yIChzYiA9IGZpcnN0X3N1cGVyKGZsYWdzKTtcbiA5ODI6XHRcdCAgICAgIWxpc3RfZW50cnlfaXNfaGVhZChzYiwgXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpO1xuIDk4MzpcdFx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xuIDk4NDpcdFx0XHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcbiA5ODU6XHRcdFx0XHRjb250aW51ZTtcbiA5ODY6XHRcbiA5ODc6XHRcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2ItXHUwMDNlc19wYXNzaXZlKSlcbiA5ODg6XHRcdFx0XHRjb250aW51ZTtcbiA5ODk6XHRcbiA5OTA6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gOTkxOlx0XG4gOTkyOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgU1VQRVJfSVRFUl9VTkxPQ0tFRCkge1xuIDk5MzpcdFx0XHRcdGYoc2IsIGFyZyk7XG4gOTk0Olx0XHRcdH0gZWxzZSBpZiAoc3VwZXJfbG9jayhzYiwgZXhjbCkpIHtcbiA5OTU6XHRcdFx0XHRmKHNiLCBhcmcpO1xuIDk5NjpcdFx0XHRcdHN1cGVyX3VubG9jayhzYiwgZXhjbCk7XG4gOTk3Olx0XHRcdH1cbiA5OTg6XHRcbiA5OTk6XHRcdFx0aWYgKHApXG4xMDAwOlx0XHRcdFx0cHV0X3N1cGVyKHApO1xuMTAwMTpcdFx0XHRwID0gc2I7XG4xMDAyOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwMDM6XHRcdH1cbjEwMDQ6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTAwNTpcdFx0aWYgKHApXG4xMDA2Olx0XHRcdHB1dF9zdXBlcihwKTtcbjEwMDc6XHR9XG4xMDA4Olx0XG4xMDA5Olx0dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbjEwMTA6XHR7XG4xMDExOlx0XHRfX2l0ZXJhdGVfc3VwZXJzKGYsIGFyZywgMCk7XG4xMDEyOlx0fVxuMTAxMzpcdFxuMTAxNDpcdC8qKlxuMTAxNTpcdCAqXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxuMTAxNjpcdCAqXHRAdHlwZTogZnMgdHlwZVxuMTAxNzpcdCAqXHRAZjogZnVuY3Rpb24gdG8gY2FsbFxuMTAxODpcdCAqXHRAYXJnOiBhcmd1bWVudCB0byBwYXNzIHRvIGl0XG4xMDE5Olx0ICpcbjEwMjA6XHQgKlx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcbjEwMjE6XHQgKlx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxuMTAyMjpcdCAqL1xuMTAyMzpcdHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbjEwMjQ6XHRcdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdXBlciBCbG9jayBJdGVyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkgc2VlIHRoZXkmIzM5O3ZlIHN3YXBwZWQgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIHRvIGl0ZXJhdGUgdGhyb3VnaCBgc3VwZXJfYmxvY2tzYCBpbiByZXZlcnNlIG5vdywgdXNpbmcgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgJmFtcDtzdXBlcl9ibG9ja3MsIHNfbGlzdClgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGNvZGU/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBkZWFkIGJyYW5jaC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGF0IGZ1bmN0aW9uIGlzIGluIGBmcy9zdXBlci5jYC4gT2theSwgdGhhdCYjMzk7cyBhIGNvcmUgVkZTIGZpbGUuIFNvIGl0JiMzOTtzIHVzZWQgc29tZXdoZXJlIGluIHRoZSBmaWxlc3lzdGVtIHN0YWNrLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBjYWxsZWQgYnkgQ0lGUy9TTUIsIHNwZWNpZmljYWxseSB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBjaWZzX2dldF9zdXBlcmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBwbGFjZXMgd2l0aGluIHRoZSBrZXJuZWwgb3IgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnRpbmcvb3BlcmF0aW9ucy4KCkFscmlnaHQsIHRoYXQgdGVsbHMgbWUgdGhlIGNoYW5nZSBsaWtlbHkgaGFzIGFuIGVmZmVjdC4gQnV0LCBiZWZvcmUgSSBnZXQgYW55IGZ1cnRoZXIgaW50byB3aGF0IHRoaXMgaW1wYWN0IG1heSBiZSwgSSBuZWVkIHRvIGNoZWNrIGV4YWN0bHkgd2hhdCBpcyBjYWxsaW5nIGBjaWZzX2dldF9zdXBlcmAsIGFuZCBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIFRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgZGVwZW5kaW5nIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NpZnNfZ2V0X3N1cGVyfGNpZnNfZ2V0X3N1cGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvbWlzYy5jPTg3Nz1zdGF0aWMgdm9pZCB0Y29uX3N1cGVyX2NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmFyZylcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy04OTgtXG5mcy9zbWIvY2xpZW50L21pc2MuYzo4OTk6c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MDAtXHRcdFx0XHRcdCAgICB2b2lkICpkYXRhKVxuLS1cbmZzL3NtYi9jbGllbnQvbWlzYy5jPTkzMj1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTM5LVx0c3Bpbl91bmxvY2soXHUwMDI2dGNvbi1cdTAwM2V0Y19sb2NrKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjk0MDpcdHJldHVybiBfX2NpZnNfZ2V0X3N1cGVyKHRjb25fc3VwZXJfY2IsIHRjb24pO1xuZnMvc21iL2NsaWVudC9taXNjLmMtOTQxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQ0lGUy9TTUIgYW5kIENvcmUgVkZTIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBDSUZTL1NNQiBvciBERlMgaGVyZSwgb3IgaWYgdGhpcyBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgZnVuY3Rpb24gaXMgc29tZWhvdyBpbnRlZ3JhdGVkIGludG8gdGhlIGNvcmUgVkZTLiBGb3J0dW5hdGVseSwgSSByZW1lbWJlciB0aGF0IGBpdGVyYXRlX3N1cGVyc190eXBlYCBpcyBpbmRlZWQgYW4gZXhwb3J0ZWQgY29yZSBWRlMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb3VuZCBpbiBgZnMvc3VwZXIuY2AuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdCwgYnV0IGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIENJRlMvU01CIGZ1bmN0aW9uYWxpdHkgaXRzZWxmIGhhcyBhbnkgQ09ORklHIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgYENJRlNgIG9yIGBTTUJfQ0xJRU5UYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEnigJlsbCBzdGFydCBieSBleGFtaW5pbmcgYGZzL3NtYi9jbGllbnQvS2NvbmZpZ2AgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1ha2VmaWxlIHRvIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IENJRlMvU01CIGlzIGNvbmZpZ3VyZWQgYW5kIHdoZXJlIGl0IHNpdHMgaW4gcmVsYXRpb24gdG8gdGhlIFZGUy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lmc19nZXRfZGZzX3Rjb25fc3VwZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0zODM9aW50IHNtYjJfcGFyc2VfcXVlcnlfZGlyZWN0b3J5KHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIHN0cnVjdCBrdmVjICpyc3BfaW92LFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMzg2LVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDozODc6c3RydWN0IHN1cGVyX2Jsb2NrICpjaWZzX2dldF9kZnNfdGNvbl9zdXBlcihzdHJ1Y3QgY2lmc190Y29uICp0Y29uKTtcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMzg4LXZvaWQgY2lmc19wdXRfdGNwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL3NtYi9jbGllbnQvZGZzLmM9Mzg2PWludCBjaWZzX3RyZWVfY29ubmVjdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uKVxuLS1cbmZzL3NtYi9jbGllbnQvZGZzLmMtNDMyLVxuZnMvc21iL2NsaWVudC9kZnMuYzo0MzM6XHRzYiA9IGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHRjb24pO1xuZnMvc21iL2NsaWVudC9kZnMuYy00MzQtXHRpZiAoIUlTX0VSUihzYikpXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmM9OTI2PXN0YXRpYyB2b2lkIF9fY2lmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MzEtXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MzI6c3RydWN0IHN1cGVyX2Jsb2NrICpjaWZzX2dldF9kZnNfdGNvbl9zdXBlcihzdHJ1Y3QgY2lmc190Y29uICp0Y29uKVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTMzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNJRlMvREZTIENvbmZpZ3VyYXRpb24gQXVkaXQqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zbWIvY2xpZW50YCBLY29uZmlnIGZpbGVzLiBNeSBicmFpbiYjMzk7cyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGZvciBDSUZTIGFuZCBERlMgc3VwcG9ydCwgb3Igd2UgY291bGQgYmUgaW4gZm9yIHNvbWUgc2VyaW91cyBoZWFkYWNoZXMgZG93biB0aGUgbGluZS4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGNsZWFybHkgaWRlbnRpZnkgd2hhdCBvcHRpb25zIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgYXJlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWcgb3B0aW9uIGluIGRldGFpbCwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIHByb3BlciBvcGVyYXRpb24gb2YgdGhlIFNNQiBjbGllbnQuIExldOKAmXMgbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBjb25maWd1cmVkIGNvcnJlY3RseS4gVGhpcyB3aWxsIHNhdmUgdXMgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDSUZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc4MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBJbXBsaWNhdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIHBhdGNoIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgd2UgaXRlcmF0ZSB0aHJvdWdoIHN1cGVyYmxvY2tzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb3JlIFZGUyAoYGZzL3N1cGVyLmNgKS4gU2luY2UgYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBidWlsdCAoY29yZSBWRlMsIGBvYmoteSAmIzQzOz0gc3VwZXIub2AgaW4gYGZzL01ha2VmaWxlYCksIHdlIGtub3cgdGhpcyBpcyBhIGtleSBhcmVhIHRvIGNvbnNpZGVyLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCB3aGljaCBpcyBhIGZ1bmN0aW9uIGNyaXRpY2FsIGZvciB0cmF2ZXJzaW5nIHRocm91Z2ggdGhlIHN1cGVyYmxvY2sgaW5zdGFuY2VzIG9mIGEgY2VydGFpbiB0eXBlLgoKUHJldmlvdXNseSwgaXQgdXNlZCBhIGhhc2ggbGlzdCwgYW5kIG5vdyBpdCYjMzk7cyBzd2l0Y2hpbmcgdG8gYSByZXZlcnNlIGxpc3QgaXRlcmF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNoYW5nZSBpbiBob3cgdGhlIG5ld2VzdCBzdXBlcmJsb2NrcyBhcmUgaGFuZGxlZC4gVGhlIGxvY2ssIGBzYl9sb2NrYCwgaXMgc3RpbGwgaW52b2x2ZWQsIGJ1dCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYHNfbGlzdGAgZm9yIHRyYXZlcnNpbmcgYW5kIGEgYHNfcGFzc2l2ZWAgcmVmY291bnQgZm9yIHZhbGlkaXR5IGR1cmluZyBsb2NrIGRyb3BzLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoaXMgcGF0Y2ggYmFzZWQgb24gb3VyIGZ1enppbmcgY3JpdGVyaWEuCgoxLiAgKipDb3JlIFN1YnN5c3RlbXM6KiogRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBWRlMsIHN5bmNocm9uaXphdGlvbi9sb2NraW5nLCBldGMuLCBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzLiBUaGlzIGZpdHMgdGhlIGJpbGwg4oCTIHdlJiMzOTtyZSBjaGFuZ2luZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiwgd2hpY2ggaXMgYSBjb3JlIFZGUyBmdW5jdGlvbi4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4KCjIuICAqKkZvY3VzIFN5bWJvbHM6KiogVGhlIG1vc3Qgb2J2aW91cyBpcyBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgaXRzZWxmLiBJdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCwgYW5kIGl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgdWJpcXVpdG91cyBpbiB0aGUgc2Vuc2Ugb2YgYmVpbmcgYSAqYmFzaWMqIGhlbHBlciAobGlrZSBga2ZyZWVgIG9yIGBrbWFsbG9jYCkuIEl0JiMzOTtzIHNwZWNpZmljIHRvIGl0ZXJhdGluZyBzdXBlcmJsb2Nrcy4gSSBjb3VsZCBjb25zaWRlciBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgIG9yIGBfX2NpZnNfZ2V0X3N1cGVyYCBzaW5jZSB0aGV5IGNhbGwgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCBidXQgdGhlIHByaW1hcnkgc3ltYm9sIGlzIGNsZWFybHkgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLiBJdCYjMzk7cyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCYjMzk7cyBkaXJlY3RseSBjaGFuZ2VkLCBhbmQgdGhhdCYjMzk7cyB0aGUgY2xlYXJlc3QgZm9jdXMuCgozLiAgKipFbmFibGVDb25maWdzOioqIFNpbmNlIGBmcy9zdXBlci5jYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gSG93ZXZlciwgaWYgd2Ugd2FudCB0byBleGVyY2lzZSB0aGUgY29kZSBwYXRocyByZWxhdGVkIHRvIHRob3NlIG90aGVyIGZ1bmN0aW9ucywgbGlrZSBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgIG9yIGBfX2NpZnNfZ2V0X3N1cGVyYCB2aWEgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCB3ZSBwcm9iYWJseSBuZWVkIGBDSUZTYCBhbmQgcG90ZW50aWFsbHkgYENJRlNfREZTX1VQQ0FMTGAgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZGl0aW9ucyBmb3IgYGRmcy5jYCBpbiB0aGUgYGZzL3NtYi9jbGllbnQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGlmIEkgZGVjaWRlIHRvIHB1cnN1ZSB0aG9zZSByZWxhdGVkIGZ1bmN0aW9ucy4gQnV0IGZvciBub3csIGBpdGVyYXRlX3N1cGVyc190eXBlYCBpdHNlbGYgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvTWFrZWZpbGU9MjM9Y2lmcy0kKENPTkZJR19DSUZTX1VQQ0FMTCkgJiM0Mzs9IGNpZnNfc3BuZWdvLm9cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjQtXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjI1OmNpZnMtJChDT05GSUdfQ0lGU19ERlNfVVBDQUxMKSAmIzQzOz0gZGZzX2NhY2hlLm8gZGZzLm9cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgbWlzYy5vYCBpbiB0aGUgU2FtYmEgQ2xpZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbWlzYy5vYCBpcyBiZWluZyBjb21waWxlZCBmb3IgdGhlIFNhbWJhIGNsaWVudC4gTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBgTWFrZWZpbGVgIGZvciB0aGUgYGZzL3NtYi9jbGllbnRgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDIwLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG9iamVjdCBmaWxlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGluc2lnaHQgaW50byBob3cgYG1pc2Mub2AgaXMgYnVpbHQsIGFueSByZWxldmFudCBjb21waWxlciBmbGFncyB0aGF0IGFyZSB1c2VkLCBhbmQgd2hpY2ggb3RoZXIgc291cmNlIGZpbGVzLCBpZiBhbnksIGl0IHJlbGllcyBvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBtYWtlIHRhcmdldCBhbmQgSSBjYW4gcXVpY2tseSBnbGVhbiB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBMaW51eCBDSUZTL1NNQjIvU01CMyBWRlMgY2xpZW50XG4gICA0Olx0I1xuICAgNTpcdGNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuICAgNjpcdG9iai0kKENPTkZJR19DSUZTKSAmIzQzOz0gY2lmcy5vXG4gICA3Olx0XG4gICA4Olx0Y2lmcy15IDo9IHRyYWNlLm8gY2lmc2ZzLm8gY2lmc19kZWJ1Zy5vIGNvbm5lY3QubyBkaXIubyBmaWxlLm8gXFxcbiAgIDk6XHRcdCAgaW5vZGUubyBsaW5rLm8gbWlzYy5vIG5ldG1pc2MubyBzbWJlbmNyeXB0Lm8gdHJhbnNwb3J0Lm8gXFxcbiAgMTA6XHRcdCAgY2FjaGVkX2Rpci5vIGNpZnNfdW5pY29kZS5vIGNpZnNlbmNyeXB0Lm8gXFxcbiAgMTE6XHRcdCAgcmVhZGRpci5vIGlvY3RsLm8gc2Vzcy5vIGV4cG9ydC5vIHVuYy5vIHdpbnVjYXNlLm8gXFxcbiAgMTI6XHRcdCAgc21iMm9wcy5vIHNtYjJtYXBlcnJvci5vIHNtYjJ0cmFuc3BvcnQubyBcXFxuICAxMzpcdFx0ICBzbWIybWlzYy5vIHNtYjJwZHUubyBzbWIyaW5vZGUubyBzbWIyZmlsZS5vIGNpZnNhY2wubyBmc19jb250ZXh0Lm8gXFxcbiAgMTQ6XHRcdCAgZG5zX3Jlc29sdmUubyBjaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vIGFzbjEubyBcXFxuICAxNTpcdFx0ICBuYW1lc3BhY2UubyByZXBhcnNlLm9cbiAgMTY6XHRcbiAgMTc6XHQkKG9iaikvYXNuMS5vOiAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuaFxuICAxODpcdFxuICAxOTpcdCQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vOiAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuYyAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuaFxuICAyMDpcdFxuICAyMTpcdGNpZnMtJChDT05GSUdfQ0lGU19YQVRUUikgJiM0Mzs9IHhhdHRyLm9cbiAgMjI6XHRcbiAgMjM6XHRjaWZzLSQoQ09ORklHX0NJRlNfVVBDQUxMKSAmIzQzOz0gY2lmc19zcG5lZ28ub1xuICAyNDpcdFxuICAyNTpcdGNpZnMtJChDT05GSUdfQ0lGU19ERlNfVVBDQUxMKSAmIzQzOz0gZGZzX2NhY2hlLm8gZGZzLm9cbiAgMjY6XHRcbiAgMjc6XHRjaWZzLSQoQ09ORklHX0NJRlNfU1dOX1VQQ0FMTCkgJiM0Mzs9IG5ldGxpbmsubyBjaWZzX3N3bi5vXG4gIDI4Olx0XG4gIDI5Olx0Y2lmcy0kKENPTkZJR19DSUZTX0ZTQ0FDSEUpICYjNDM7PSBmc2NhY2hlLm9cbiAgMzA6XHRcbiAgMzE6XHRjaWZzLSQoQ09ORklHX0NJRlNfU01CX0RJUkVDVCkgJiM0Mzs9IHNtYmRpcmVjdC5vXG4gIDMyOlx0XG4gIDMzOlx0Y2lmcy0kKENPTkZJR19DSUZTX1JPT1QpICYjNDM7PSBjaWZzcm9vdC5vXG4gIDM0Olx0XG4gIDM1Olx0Y2lmcy0kKENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWSkgJiM0Mzs9IFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDY4CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDM5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBDSUZTIGFuZCBTdXBlcmJsb2NrIEl0ZXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBtaXNjLm9gIGlzIGludm9sdmVkIHdpdGggYGNpZnMteWAsIHNwZWNpZmljYWxseSwgYGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmdseSBjYWxsZWQgYnkgYGZzL3NtYi9jbGllbnQvZGZzLmNgLiBBbmQgdGhhdCBpcyBpdHNlbGYgcGFydCBvZiBhIGBjaWZzLSQoQ09ORklHX0NJRlNfREZTX1VQQ0FMTCkgJiM0Mzs9IGRmc19jYWNoZS5vIGRmcy5vYCBjb25maWd1cmF0aW9uLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcmAgaW4gYG1pc2MuY2AgdGhlbiBjYWxscyBgX19jaWZzX2dldF9zdXBlcmAuCgpTbywgYGRmcy5jYCBjYWxscyBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgLiBBbHJpZ2h0LCB1bmRlcnN0b29kLiBUaGUgY29uZmlndXJhdGlvbnMgYXQgcGxheSBoZXJlIGFyZSBgQ0lGU2AgYW5kIGBDSUZTX0RGU19VUENBTExgLgoKTm93LCBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AuIEkgc2VlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBhbmQgYGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyYCBhcyBjYW5kaWRhdGVzLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBzdXBlcmJsb2NrcyBhcmUgdHJhdmVyc2VkLiBJdCBpcyBpbXBhY3RpbmcgdGhlIFZGUyBjb3JlIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgYSBoaWdoLXZhbHVlIHRhcmdldC4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgbG9ja2luZyBhbmQgaXRlcmF0aW9uIHNlbWFudGljcyBhcm91bmQgc3VwZXJibG9ja3MuIFRoZSBwYXRjaCBzaGlmdHMgdGhlIGl0ZXJhdGlvbiBtZXRob2QsIG1vdmluZyBmcm9tIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgb24gYHR5cGUtJmd0O2ZzX3N1cGVyc2AgdG8gaXRlcmF0aW5nIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBiYWNrd2FyZHMgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCAmYW1wO3N1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlcmluZyBieSBgc2ItJmd0O3NfdHlwZSAhPSB0eXBlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4KClllcCwgdGhlIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBzZW1hbnRpY3MgYWNyb3NzIHN1cGVyYmxvY2tzIGluIFZGUyBhcmUgYmVpbmcgYWx0ZXJlZCBoZXJlLCBhbmQgdGhhdCYjMzk7cyBjb3JlIGtlcm5lbCBsb2dpYy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKQWxyaWdodCwgd2l0aCB0aGF0IHZlcmlmaWVkLCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7Q0lGU19ERlNfVVBDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXRlcmF0ZV9zdXBlcnNfdHlwZSYjMzQ7LAogICAgJiMzNDtjaWZzX2dldF9kZnNfdGNvbl9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBWRlMgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaW4gaXRlcmF0ZV9zdXBlcnNfdHlwZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGl0ZXJhdGluZyBvdmVyIHR5cGUtXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0NJRlNfREZTX1VQQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l0ZXJhdGVfc3VwZXJzX3R5cGUmIzM0OywKICAgICYjMzQ7Y2lmc19nZXRfZGZzX3Rjb25fc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgVkZTIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljIGluIGl0ZXJhdGVfc3VwZXJzX3R5cGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBpdGVyYXRpbmcgb3ZlciB0eXBlLVx1MDAzZWZzX3N1cGVycyB0byB3YWxraW5nIHRoZSBnbG9iYWwgc3VwZXJfYmxvY2tzIGxpc3QgYmFja3dhcmRzIHdoaWxlIGRyb3BwaW5nIGFuZCByZWFjcXVpcmluZyBzYl9sb2NrLiBUaGlzIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgdHJhdmVyc2FsIHNlbWFudGljcyBpbiBhIGNvcmUgVkZTIGhlbHBlciB1c2VkIGR1cmluZyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKHN1Y2ggYXMgQ0lGUyBERlMgcmVjb25uZWN0cykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgdHJhdmVyc2FsIGluY29uc2lzdGVuY2llcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmVjMWQ0NDU2ODU2YjdjZmQ2ZjY1MjM4OWMwYzYwYWRjNGIwZDBlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDE6Mzc6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li5jOGFjY2QxNDRiYWQyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTEwMjYsMTEgJiM0MzsxMDI2LDE4IEBAIHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJmFtcDtzYl9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJmFtcDt0eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrCiYjNDM7CSAqIGlzIGRyb3BwZWQuIEVudHJpZXMgYXJlIGFkZGVkIGF0IHRoZSB0YWlsLiBXYWxrIGJhY2t3YXJkcyB0byByZXRhaW4KJiM0MzsJICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsICZhbXA7c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKIAkJYm9vbCBsb2NrZWQ7CiAKIAkJaWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChzYi0mZ3Q7c190eXBlICE9IHR5cGUpCiYjNDM7CQkJY29udGludWU7CiAKIAkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzYi0mZ3Q7c19wYXNzaXZlKSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBmdXp6aW5nLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGZzL3N1cGVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdW5jdGlvbi4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIGEgY2hhbmdlIHRvIGhvdyB0aGUgc3VwZXJibG9ja3MgYXJlIGl0ZXJhdGVkLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgb24gYHR5cGUtJmd0O2ZzX3N1cGVyc2AuIE5vdywgaXQmIzM5O3MgdXNpbmcgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZWAgb24gYHN1cGVyX2Jsb2Nrc2AsIHdpdGggdGhlIGluY2x1c2lvbiBvZiBhIGNoZWNrIGZvciBgc2ItJmd0O3NfdHlwZSA9PSB0eXBlYCBhbmQgc29tZSBraW5kIG9mIHBhc3NpdmUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgdXNpbmcgYHNfcGFzc2l2ZWAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHRoZXkgc3dpdGNoaW5nIGZyb20gYW4gaGxpc3QgdG8gYSBsaXN0PyBJcyBpdCByZWxhdGVkIHRvIHRoZSAmIzM0O25ld2VzdC1maXJzdCB2aXNpdGF0aW9uJiMzNDsgY29tbWVudD8gSXMgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBsb2NraW5nIG9yIGNvbmN1cnJlbmN5IGlzc3VlcywgaGVuY2UgdGhlIHVzZSBvZiBgc19wYXNzaXZlYCBhbmQgZHJvcHBpbmcgYHNiX2xvY2tgIHdpdGhpbiB0aGUgbG9vcD8gVGhpcyBzdWdnZXN0cyBpdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiB0aGUgc3VwZXJibG9jayBpdGVyYXRpb24gcHJvY2VzcywgbGlrZWx5IHRvIGltcHJvdmUgZWl0aGVyIHBlcmZvcm1hbmNlIG9yIGNvcnJlY3RuZXNzIG9yIGJvdGguCgpUaGUgaW1wb3J0YW50IHRoaW5nIGlzOiB3aWxsIHRoaXMgY2hhbmdlIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gY291bGQgY2F0Y2g/IFRoZSBmYWN0IHRoYXQgYSAmIzM0O3Bhc3NpdmUgcmVmZXJlbmNlJiMzNDsgaXMgYmVpbmcgdXNlZCBhbmQgdGhhdCB0aGVyZSBhcmUgZXhwbGljaXQgY2hlY2tzIGZvciBgU0JfRFlJTkdgIGFuZCB0eXBlIG1pc21hdGNoIGhpbnRzIGF0IHRoaXMgcHJvY2VzcyBiZWluZyBmYWlybHkgY29tcGxleC4gSSBzaG91bGQgYW5hbHl6ZSB3aGF0IGhhcHBlbnMgaWYgYHJlZmNvdW50X2luY19ub3RfemVyb2AgcmV0dXJucyB6ZXJvLCBpcyB0aGlzIHBhdGggYmVpbmcgY292ZXJlZCBieSBvdGhlciBleGlzdGluZyBzYW5pdGl6ZXJzPwoKSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHQgKlx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcbjEwMjE6XHQgKlx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxuMTAyMjpcdCAqL1xuMTAyMzpcdHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbjEwMjQ6XHRcdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxuMTAyNTpcdHtcbjEwMjY6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsICpwID0gTlVMTDtcbjEwMjc6XHRcbjEwMjg6XHRcdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwMjk6XHRcdC8qXG4xMDMwOlx0XHQgKiBUaGUgcGFzc2l2ZSByZWZlcmVuY2Uga2VlcHMgdGhlIHNfbGlzdCBjdXJzb3IgdmFsaWQgd2hpbGUgc2JfbG9ja1xuMTAzMTpcdFx0ICogaXMgZHJvcHBlZC4gRW50cmllcyBhcmUgYWRkZWQgYXQgdGhlIHRhaWwuIFdhbGsgYmFja3dhcmRzIHRvIHJldGFpblxuMTAzMjpcdFx0ICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uXG4xMDMzOlx0XHQgKi9cbjEwMzQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHtcbjEwMzU6XHRcdFx0Ym9vbCBsb2NrZWQ7XG4xMDM2Olx0XG4xMDM3Olx0XHRcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxuMTAzODpcdFx0XHRcdGNvbnRpbnVlO1xuMTAzOTpcdFx0XHRpZiAoc2ItXHUwMDNlc190eXBlICE9IHR5cGUpXG4xMDQwOlx0XHRcdFx0Y29udGludWU7XG4xMDQxOlx0XG4xMDQyOlx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNiLVx1MDAzZXNfcGFzc2l2ZSkpXG4xMDQzOlx0XHRcdFx0Y29udGludWU7XG4xMDQ0Olx0XG4xMDQ1Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTA0NjpcdFxuMTA0NzpcdFx0XHRsb2NrZWQgPSBzdXBlcl9sb2NrX3NoYXJlZChzYik7XG4xMDQ4Olx0XHRcdGlmIChsb2NrZWQpIHtcbjEwNDk6XHRcdFx0XHRmKHNiLCBhcmcpO1xuMTA1MDpcdFx0XHRcdHN1cGVyX3VubG9ja19zaGFyZWQoc2IpO1xuMTA1MTpcdFx0XHR9XG4xMDUyOlx0XG4xMDUzOlx0XHRcdGlmIChwKVxuMTA1NDpcdFx0XHRcdHB1dF9zdXBlcihwKTtcbjEwNTU6XHRcdFx0cCA9IHNiO1xuMTA1NjpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4xMDU3Olx0XHR9XG4xMDU4Olx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwNTk6XHRcdGlmIChwKVxuMTA2MDpcdFx0XHRwdXRfc3VwZXIocCk7XG4xMDYxOlx0fVxuMTA2MjpcdFxuMTA2MzpcdEVYUE9SVF9TWU1CT0woaXRlcmF0ZV9zdXBlcnNfdHlwZSk7XG4xMDY0Olx0XG4xMDY1Olx0c3RydWN0IHN1cGVyX2Jsb2NrICp1c2VyX2dldF9zdXBlcihkZXZfdCBkZXYsIGJvb2wgZXhjbClcbjEwNjY6XHR7XG4xMDY3Olx0XHRzdHJ1Y3Qgc3VwZXJfZGV2ICpzYl9kZXY7XG4xMDY4Olx0XG4xMDY5Olx0XHRmb3IgKHNiX2RldiA9IHN1cGVyX2Rldl9maXJzdChkZXYpOyBzYl9kZXY7IHNiX2RldiA9IHN1cGVyX2Rldl9uZXh0KHNiX2RldikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBpdGVyYXRlX3N1cGVyc190eXBlYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvZiBpdHMgcmVjZW50IGhpc3RvcnkgYW5kIHVzYWdlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY29kZWJhc2UuIFdoZXJlJiMzOTtzIGl0IHVzZWQ/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHMgY2FsbCBpdD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBwYXR0ZXJuIG9yIGFsZ29yaXRobT8gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGxvb2tpbmcgYXQgdGhlIGRpcmVjdCBjYWxsZXJzLgoKVGhlbiwgaWYgdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzaGVkIGVub3VnaCBsaWdodCwgb3IgaWYgSSB3YW50IHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgZnVuY3Rpb24sIEkmIzM5O2xsIG1vdmUgb24gdG8gc291cmNlIGNvbnRyb2wuIEkmIzM5O2xsIGVpdGhlciB1c2UgYGdpdCBibGFtZWAgb3IgYSBtb3JlIGdlbmVyYWwgYGdpdCBsb2dgIHNlYXJjaCwgcGVyaGFwcyBjb21iaW5lZCB3aXRoIGBncmVwYCwgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBleGlzdHMsIGFueSBtYWpvciBjaGFuZ2VzIGl0JiMzOTtzIHVuZGVyZ29uZSwgYW5kIHdobyYjMzk7cyBiZWVuIGludGVyYWN0aW5nIHdpdGggaXQuIFRoZSBoaXN0b3J5IGNvdWxkIGJlIHF1aXRlIHJldmVhbGluZzsgaXQgbWlnaHQgc2hvdyBwYXN0IGJ1Z3Mgb3Igb3B0aW1pemF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB3aGF0IEkmIzM5O20gbG9va2luZyBhdCB0b2RheS4gVGhpcyBhbHNvIGhlbHBzIHRvIGVzdGFibGlzaCBjb250ZXh0IGlmIEkmIzM5O20gbm90IGZhbWlsaWFyIHdpdGggdGhlIGNvZGUgaW4gcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l0ZXJhdGVfc3VwZXJzX3R5cGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9taXNjLmM9ODk5PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKl9fY2lmc19nZXRfc3VwZXIodm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLFxuLS1cbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkxMC1cdGZvciAoOyAqZnNfdHlwZTsgZnNfdHlwZSYjNDM7JiM0MzspIHtcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkxMTpcdFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSgqZnNfdHlwZSwgZiwgXHUwMDI2c2QpO1xuZnMvc21iL2NsaWVudC9taXNjLmMtOTEyLVx0XHRpZiAoc2Quc2IpIHtcbi0tXG5mcy9zdXBlci5jPTEwMDk9dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbi0tXG5mcy9zdXBlci5jLTEwMTQtLyoqXG5mcy9zdXBlci5jOjEwMTU6ICpcdGl0ZXJhdGVfc3VwZXJzX3R5cGUgLSBjYWxsIGZ1bmN0aW9uIGZvciBzdXBlcmJsb2NrcyBvZiBnaXZlbiB0eXBlXG5mcy9zdXBlci5jLTEwMTYtICpcdEB0eXBlOiBmcyB0eXBlXG4tLVxuZnMvc3VwZXIuYy0xMDIyLSAqL1xuZnMvc3VwZXIuYzoxMDIzOnZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbmZzL3N1cGVyLmMtMTAyNC1cdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxuLS1cbmZzL3N1cGVyLmMtMTA2Mi1cbmZzL3N1cGVyLmM6MTA2MzpFWFBPUlRfU1lNQk9MKGl0ZXJhdGVfc3VwZXJzX3R5cGUpO1xuZnMvc3VwZXIuYy0xMDY0LVxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zMjUyPWV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKTtcbmluY2x1ZGUvbGludXgvZnMuaDozMjUzOmV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKixcbmluY2x1ZGUvbGludXgvZnMuaC0zMjU0LVx0XHRcdCAgICAgICAgdm9pZCAoKikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQ29kZSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpdGVyYXRlX3N1cGVyc2AgYW5kIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlLCBpbiB0aGlzIGNhc2UsIHRoZSBsaW5lIGRpcmVjdGx5IGFib3ZlIGBpdGVyYXRlX3N1cGVyc190eXBlYCwgd2hpY2ggc2hvdWxkIGJlIGBpdGVyYXRlX3N1cGVyc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGFzIG9mdGVuIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGNsb3NlIHRvIGVhY2ggb3RoZXIsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggaW5oZXJpdGFuY2Ugb3IgdHlwZSBoaWVyYXJjaGllcyDigJMgd2hpY2ggaXMgd2hhdCB0aGVzZSBuYW1lcyBhcmUgaGVhdmlseSBzdWdnZXN0aW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgY29ubmVjdGlvbiwgb3Igd2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGlzIG1vcmUgY29tcGxleCB0aGFuIGEgc2ltcGxlIGRlZmluaXRpb24gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIDk5MTpcdFxuIDk5MjpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNVUEVSX0lURVJfVU5MT0NLRUQpIHtcbiA5OTM6XHRcdFx0XHRmKHNiLCBhcmcpO1xuIDk5NDpcdFx0XHR9IGVsc2UgaWYgKHN1cGVyX2xvY2soc2IsIGV4Y2wpKSB7XG4gOTk1Olx0XHRcdFx0ZihzYiwgYXJnKTtcbiA5OTY6XHRcdFx0XHRzdXBlcl91bmxvY2soc2IsIGV4Y2wpO1xuIDk5NzpcdFx0XHR9XG4gOTk4Olx0XG4gOTk5Olx0XHRcdGlmIChwKVxuMTAwMDpcdFx0XHRcdHB1dF9zdXBlcihwKTtcbjEwMDE6XHRcdFx0cCA9IHNiO1xuMTAwMjpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4xMDAzOlx0XHR9XG4xMDA0Olx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwMDU6XHRcdGlmIChwKVxuMTAwNjpcdFx0XHRwdXRfc3VwZXIocCk7XG4xMDA3Olx0fVxuMTAwODpcdFxuMTAwOTpcdHZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXG4xMDEwOlx0e1xuMTAxMTpcdFx0X19pdGVyYXRlX3N1cGVycyhmLCBhcmcsIDApO1xuMTAxMjpcdH1cbjEwMTM6XHRcbjEwMTQ6XHQvKipcbjEwMTU6XHQgKlx0aXRlcmF0ZV9zdXBlcnNfdHlwZSAtIGNhbGwgZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2tzIG9mIGdpdmVuIHR5cGVcbjEwMTY6XHQgKlx0QHR5cGU6IGZzIHR5cGVcbjEwMTc6XHQgKlx0QGY6IGZ1bmN0aW9uIHRvIGNhbGxcbjEwMTg6XHQgKlx0QGFyZzogYXJndW1lbnQgdG8gcGFzcyB0byBpdFxuMTAxOTpcdCAqXG4xMDIwOlx0ICpcdFNjYW5zIHRoZSBzdXBlcmJsb2NrIGxpc3QgYW5kIGNhbGxzIGdpdmVuIGZ1bmN0aW9uLCBwYXNzaW5nIGl0XG4xMDIxOlx0ICpcdGxvY2tlZCBzdXBlcmJsb2NrIGFuZCBnaXZlbiBhcmd1bWVudC5cbjEwMjI6XHQgKi9cbjEwMjM6XHR2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXG4xMDI0Olx0XHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0NwoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBDaGFuZ2UqKgoKT2theSwgc28gSSBzZWUgdGhleSYjMzk7dmUgY2hhbmdlZCBob3cgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIHdvcmtzLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgdG8gaXRlcmF0ZSB0aHJvdWdoIGB0eXBlLSZndDtmc19zdXBlcnNgLiBUaGUgaXNzdWUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXMgdGhhdCB0aGUgYHNiX2xvY2tgIHdhcyBiZWluZyBkcm9wcGVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCB3aGlsZSBgcGAgaGFkIGEgcGFzc2l2ZSByZWZlcmVuY2UuIEkgcmVtZW1iZXIgdGhpcyBwYXR0ZXJuOyBpdOKAmXMgcmlza3kgd2l0aCBgaGxpc3RgIGJlY2F1c2UgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGNhbiBjb3JydXB0IHRoZSB0cmF2ZXJzYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBvbGQgY29kZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNoYW5nZS4KCkJ1dCB3YWl0LCBJIHNlZSB0aGF0IGBfX2l0ZXJhdGVfc3VwZXJzYCB1c2VzIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2VgIG9uIHRoZSBnbG9iYWwgYHN1cGVyX2Jsb2Nrc2AgbGlzdCwgaXRlcmF0aW5nIHZpYSB0aGUgYHNfbGlzdGAgZmllbGQsIG5vdCB0aGUgYHNfaW5zdGFuY2VzYCBobGlzdC4gU28gdGhlIG5ldyBjaGFuZ2UgdG8gdXNlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsICZhbXA7c3VwZXJfYmxvY2tzLCBzX2xpc3QpYCBhbmQgZmlsdGVyIGJ5IGBzYi0mZ3Q7c190eXBlICE9IHR5cGVgIGlzIGFjdHVhbGx5IG1ha2luZyBpdCAqY29uc2lzdGVudCogd2l0aCB0aGUgc2FmZSBpdGVyYXRpb24gaW4gYF9faXRlcmF0ZV9zdXBlcnNgLiBUaGlzIHNlZW1zIHJpZ2h0LiBJdOKAmXMgcHJvdGVjdGluZyB0aGUgaXRlcmF0aW9uIGJ5IGVuc3VyaW5nIHRoZSBsaXN0IGRvZXNu4oCZdCBjaGFuZ2UsIG9yIHRoZSBjdXJzb3IgaXMgbWFpbnRhaW5lZCBieSB1c2luZyBgc19wYXNzaXZlYCBwcm9wZXJseSwgb3Igc2FmZSBpdGVyYXRpb24gb2YgdGhlIGhsaXN0IHdoZW4gdGhlIGxvY2sgaXMgZHJvcHBlZC4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIEtNU0FOIGNvbmNlcm5zLgoKRmlyc3QsIGRvZXMgdGhpcyBjaGFuZ2UgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRlIHBhZGRpbmcgbGVha3M/IE5vcGUuIFRoaXMgaXMganVzdCBhbiBpdGVyYXRpb24gYW5kIGxvY2tpbmcgZml4LiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBpbml0aWFsaXphdGlvbiBjb2RlLCBubyBuZXcgc3RydWN0IGRlZmluaXRpb25zLgoKU2Vjb25kLCBjb3VsZCB0aGUgcGF0Y2ggcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgY29kZSB1c2VzIGBzYmAsIHdoaWNoIGlzIGluaXRpYWxpemVkLiBgc2ItJmd0O3NfdHlwZWAgaXMgYWxzbyBpbml0aWFsaXplZC4KClRoaXJkLCB3aGF0IHBvdGVudGlhbCBidWdzIGRvZXMgaXQgZml4PyBXZWxsLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGl0IGlzIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGxpc3QgY29ycnVwdGlvbiwgaXRlcmF0b3IgaW52YWxpZGF0aW9uLCBhbmQgcmFjZSBjb25kaXRpb25zLCBhbGwgcmVsYXRlZCB0byB0aGUgbG9ja2luZyBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGxpc3QuIFNvdW5kcyBsaWtlIGl0IHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuCgpGaW5hbGx5LCBpcyB0aGVyZSBhbnkgY2hhbmNlIG9mIHVzZXItc3BhY2UgY29waWVzLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBjaGFuZ2UgaXMgZW50aXJlbHkgd2l0aGluIGtlcm5lbCBzcGFjZSBhbmQgZGVhbHMgd2l0aCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuCgpTbywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIGxpc3QgdHJhdmVyc2FsLCBub3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBLQVNBTiBhbmQgTE9DS0RFUCB3aWxsIGNvdmVyIHRob3NlIGNvbmN1cnJlbmN5IGFuZCBsb2NrIGlzc3Vlcy4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gQWxsIHRoZSBjcml0ZXJpYSBjaGVjayBvdXQuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGUoKWAgaW4gYGZzL3N1cGVyLmNgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGxpc3QgdmlhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlciBieSBgc2ItXHUwMDNlc190eXBlID09IHR5cGVgLCByYXRoZXIgdGhhbiBpdGVyYXRpbmcgYHR5cGUtXHUwMDNlZnNfc3VwZXJzYCB3aXRoIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAuIFRoaXMgZW5zdXJlcyBsaXN0IGN1cnNvciBzYWZldHkgd2hpbGUgYHNiX2xvY2tgIGlzIGRyb3BwZWQgZHVyaW5nIHN1cGVyYmxvY2sgaXRlcmF0aW9uLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBsaXN0IHRyYXZlcnNhbCwgc3luY2hyb25pemF0aW9uLCBhbmQgc3VwZXJibG9jayByZWZlcmVuY2UgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsaXN0IHRyYXZlcnNhbCwgY29uY3VycmVuY3ksIG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgYWRkcmVzc2FibGUgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjA5Ljg5OTczOTcyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODA2ODc1MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIkNJRlNfREZTX1VQQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml0ZXJhdGVfc3VwZXJzX3R5cGVcIixcbiAgICBcImNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXRlcmF0ZV9zdXBlcnNfdHlwZSgpYCBpbiBgZnMvc3VwZXIuY2AgdG8gaXRlcmF0ZSBvdmVyIHRoZSBnbG9iYWwgYHN1cGVyX2Jsb2Nrc2AgbGlzdCB2aWEgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlciBieSBgc2ItXFx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVxcdTAwM2Vmc19zdXBlcnNgIHdpdGggYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YC4gVGhpcyBlbnN1cmVzIGxpc3QgY3Vyc29yIHNhZmV0eSB3aGlsZSBgc2JfbG9ja2AgaXMgZHJvcHBlZCBkdXJpbmcgc3VwZXJibG9jayBpdGVyYXRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBjb3JlIFZGUyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiBsb2dpYyBpbiBpdGVyYXRlX3N1cGVyc190eXBlKCkgYnkgc3dpdGNoaW5nIGZyb20gaXRlcmF0aW5nIG92ZXIgdHlwZS1cXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzowOS44OTk3NDU4OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODUzOTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJlYzFkNDQ1Njg1NmI3Y2ZkNmY2NTIzODljMGM2MGFkYzRiMGQwZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMTozNzowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmM4YWNjZDE0NGJhZDIgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMTAyNiwxMSArMTAyNiwxOCBAQCB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsICpwID0gTlVMTDtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiLCBcXHUwMDI2dHlwZS1cXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcGFzc2l2ZSByZWZlcmVuY2Uga2VlcHMgdGhlIHNfbGlzdCBjdXJzb3IgdmFsaWQgd2hpbGUgc2JfbG9ja1xcbitcXHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXFxuK1xcdCAqIG5ld2VzdC1maXJzdCB2aXNpdGF0aW9uLlxcbitcXHQgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHtcXG4gXFx0XFx0Ym9vbCBsb2NrZWQ7XFxuIFxcbiBcXHRcXHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChzYi1cXHUwMDNlc190eXBlICE9IHR5cGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNiLVxcdTAwM2VzX3Bhc3NpdmUpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6MTAuMzI5NDAyODE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzE5NzA3NjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCIsXG4gICAgXCJDSUZTX0RGU19VUENBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpdGVyYXRlX3N1cGVyc190eXBlXCIsXG4gICAgXCJjaWZzX2dldF9kZnNfdGNvbl9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBjb3JlIFZGUyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiBsb2dpYyBpbiBpdGVyYXRlX3N1cGVyc190eXBlKCkgYnkgc3dpdGNoaW5nIGZyb20gaXRlcmF0aW5nIG92ZXIgdHlwZS1cXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlYzFkNDQ1Njg1NmI3Y2ZkNmY2NTIzODljMGM2MGFkYzRiMGQwZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAxOjM3OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmM4YWNjZDE0NGJhZDIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMTAyNiwxMSArMTAyNiwxOCBAQCB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgXHUwMDI2dHlwZS1cdTAwM2Vmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7XG4rXHQvKlxuK1x0ICogVGhlIHBhc3NpdmUgcmVmZXJlbmNlIGtlZXBzIHRoZSBzX2xpc3QgY3Vyc29yIHZhbGlkIHdoaWxlIHNiX2xvY2tcbitcdCAqIGlzIGRyb3BwZWQuIEVudHJpZXMgYXJlIGFkZGVkIGF0IHRoZSB0YWlsLiBXYWxrIGJhY2t3YXJkcyB0byByZXRhaW5cbitcdCAqIG5ld2VzdC1maXJzdCB2aXNpdGF0aW9uLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7XG4gXHRcdGJvb2wgbG9ja2VkO1xuIFxuIFx0XHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHNiLVx1MDAzZXNfdHlwZSAhPSB0eXBlKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzYi1cdTAwM2VzX3Bhc3NpdmUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6MTAuMzI5NDA1NjQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI3ODQwMjUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgcmVxdWVzdCB0byBldmFsdWF0ZSBhIExpbnV4IGtlcm5lbCBwYXRjaC4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlbGF0ZWQgdG8gYHN5emthbGxlcmAgZnV6emluZywgd2hpY2ggbWVhbnMgaXQncyBhYm91dCBpbXByb3ZpbmcgdGVzdGluZyBhbmQgYnVnIGRpc2NvdmVyeSBpbiB0aGUga2VybmVsLiBUaGlzIGlzIGEgc3RhbmRhcmQgZGV2ZWxvcG1lbnQgYW5kIFFBIHRhc2ssIHNvIG5vIHJlZCBmbGFncyB0aGVyZSDigJMgd2UgY2FuIHByb2NlZWQgY2F1dGlvdXNseSBidXQgc2FmZWx5LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIG1vZGlmeWluZyBgZnMvc3VwZXIuY2AsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlIGxvb2ssIGdpdmVuIGl0cyBjcml0aWNhbCByb2xlIGluIHRoZSBmaWxlc3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBhcm91bmQgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaGFuZ2luZyB0aGUgaXRlcmF0aW9uIGxvZ2ljIHRocm91Z2ggYSBsaXN0IG9mIHN1cGVyYmxvY2tzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgYnV0IHRoZSBwYXRjaCBpcyByZXBsYWNpbmcgaXQgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYC4gVGhlcmUncyBhIGNvbW1lbnQgaW5kaWNhdGluZyB0aGF0IHRoaXMgY2hhbmdlIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYWludGFpbmluZyBjdXJzb3IgdmFsaWRpdHkgd2hpbGUgZHJvcHBpbmcgYHNiX2xvY2tgIGFuZCB3YWxraW5nIHRoZSBsaXN0IGJhY2t3YXJkIGZvciBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi4gQWxzbywgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGFkZGVkIHRvIG9ubHkgcHJvY2VzcyBzdXBlcmJsb2NrcyBvZiB0aGUgY29ycmVjdCB0eXBlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpdGVyYXRlX3N1cGVyc190eXBlYCBkb2VzIGFuZCB3aG8gY2FsbHMgaXQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdC4gTGV0J3MgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvc3VwZXIuY2AgYXJvdW5kIGxpbmUgMTAyNiB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB0aGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgYWNjZXNzIHBhdHRlcm5zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXMga2V5IGhlcmUuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBpc3N1ZXMsIGFuZCBhbnkgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIGEgZnV6emluZyBjb250ZXh0IHdoZXJlIHdlJ3JlIHRyeWluZyB0byBzdHJlc3MgdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbXByb3ZlIHRoZSBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpdGVyYXRpb24sIGFuZCB0byBoYW5kbGUgYSByYWNlIGNvbmRpdGlvbiwgc28gdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyMy4xMTM0MzQxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDE1OlxcdCAqXFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSAtIGNhbGwgZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2tzIG9mIGdpdmVuIHR5cGVcXG4xMDE2OlxcdCAqXFx0QHR5cGU6IGZzIHR5cGVcXG4xMDE3OlxcdCAqXFx0QGY6IGZ1bmN0aW9uIHRvIGNhbGxcXG4xMDE4OlxcdCAqXFx0QGFyZzogYXJndW1lbnQgdG8gcGFzcyB0byBpdFxcbjEwMTk6XFx0ICpcXG4xMDIwOlxcdCAqXFx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcXG4xMDIxOlxcdCAqXFx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxcbjEwMjI6XFx0ICovXFxuMTAyMzpcXHR2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXFxuMTAyNDpcXHRcXHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4xMDI1OlxcdHtcXG4xMDI2OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsICpwID0gTlVMTDtcXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDI5OlxcdFxcdC8qXFxuMTAzMDpcXHRcXHQgKiBUaGUgcGFzc2l2ZSByZWZlcmVuY2Uga2VlcHMgdGhlIHNfbGlzdCBjdXJzb3IgdmFsaWQgd2hpbGUgc2JfbG9ja1xcbjEwMzE6XFx0XFx0ICogaXMgZHJvcHBlZC4gRW50cmllcyBhcmUgYWRkZWQgYXQgdGhlIHRhaWwuIFdhbGsgYmFja3dhcmRzIHRvIHJldGFpblxcbjEwMzI6XFx0XFx0ICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uXFxuMTAzMzpcXHRcXHQgKi9cXG4xMDM0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7XFxuMTAzNTpcXHRcXHRcXHRib29sIGxvY2tlZDtcXG4xMDM2OlxcdFxcbjEwMzc6XFx0XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXFxuMTAzODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDM5OlxcdFxcdFxcdGlmIChzYi1cXHUwMDNlc190eXBlICE9IHR5cGUpXFxuMTA0MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDQxOlxcdFxcbjEwNDI6XFx0XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNiLVxcdTAwM2VzX3Bhc3NpdmUpKVxcbjEwNDM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0XFx0bG9ja2VkID0gc3VwZXJfbG9ja19zaGFyZWQoc2IpO1xcbjEwNDg6XFx0XFx0XFx0aWYgKGxvY2tlZCkge1xcbjEwNDk6XFx0XFx0XFx0XFx0ZihzYiwgYXJnKTtcXG4xMDUwOlxcdFxcdFxcdFxcdHN1cGVyX3VubG9ja19zaGFyZWQoc2IpO1xcbjEwNTE6XFx0XFx0XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRcXHRpZiAocClcXG4xMDU0OlxcdFxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDU1OlxcdFxcdFxcdHAgPSBzYjtcXG4xMDU2OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTA1NzpcXHRcXHR9XFxuMTA1ODpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTA1OTpcXHRcXHRpZiAocClcXG4xMDYwOlxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDYxOlxcdH1cXG4xMDYyOlxcdFxcbjEwNjM6XFx0RVhQT1JUX1NZTUJPTChpdGVyYXRlX3N1cGVyc190eXBlKTtcXG4xMDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyMy4xMTM1NTQ5NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk1NzQ0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdHJhY2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyBpdCdzIGJlaW5nICp1c2VkKiAtIHdoYXQncyB0aGUgY29udGV4dCwgd2hhdCBvdGhlciBkYXRhIGlzIGludm9sdmVkLCBhbmQgd2hhdCdzIHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoYXQgaXRlcmF0aW9uIG92ZXIgdGhlIHN1cGVydHlwZXMuIEFyZSB3ZSB1c2luZyBpdCBmb3IgdHlwZSBjaGVja2luZywgaW5oZXJpdGFuY2UgYW5hbHlzaXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb27igJlzIHJvbGUgYW5kIHRvIG1ha2UgZWZmZWN0aXZlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBsb29rIGJleW9uZCB0aGUgaW1tZWRpYXRlIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6MjUuMDA5MzAyMDk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYxMjczMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXRlcmF0ZV9zdXBlcnNfdHlwZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTAtXFx0Zm9yICg7ICpmc190eXBlOyBmc190eXBlKyspIHtcXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MTE6XFx0XFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSgqZnNfdHlwZSwgZiwgXFx1MDAyNnNkKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTItXFx0XFx0aWYgKHNkLnNiKSB7XFxuLS1cXG5mcy9zdXBlci5jPTEwMDk9dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4tLVxcbmZzL3N1cGVyLmMtMTAxNC0vKipcXG5mcy9zdXBlci5jOjEwMTU6ICpcXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxcbmZzL3N1cGVyLmMtMTAxNi0gKlxcdEB0eXBlOiBmcyB0eXBlXFxuLS1cXG5mcy9zdXBlci5jLTEwMjItICovXFxuZnMvc3VwZXIuYzoxMDIzOnZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG5mcy9zdXBlci5jLTEwMjQtXFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuLS1cXG5mcy9zdXBlci5jLTEwNjItXFxuZnMvc3VwZXIuYzoxMDYzOkVYUE9SVF9TWU1CT0woaXRlcmF0ZV9zdXBlcnNfdHlwZSk7XFxuZnMvc3VwZXIuYy0xMDY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTMyNTI9ZXh0ZXJuIHZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMjUzOmV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKixcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzI1NC1cXHRcXHRcXHQgICAgICAgIHZvaWQgKCopKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyNi43NTU0Mzg2NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA3Mzc4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTdXBlcmJsb2NrIEl0ZXJhdGlvbiBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdoZW4gaXRlcmF0aW5nIHRocm91Z2ggc3VwZXJibG9ja3MsIHNwZWNpZmljYWxseSB3aXRoIGBpdGVyYXRlX3N1cGVyc190eXBlYCwgdGhlIGNvZGUgdXNlcyBgc3VwZXJfYmxvY2tzYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHdhbGtpbmcgYHR5cGUtXHUwMDNlZnNfc3VwZXJzYC4gVGhlIHJlYXNvbiBpbW1lZGlhdGVseSBjbGlja3M6IGRyb3BwaW5nIGBzYl9sb2NrYCB3aXRoaW4gdGhlIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgbG9vcCBvbiBgdHlwZS1cdTAwM2Vmc19zdXBlcnNgIGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBJZiB0aGUgY3Vyc29yIGlzbid0IHByb3Blcmx5IHByb3RlY3RlZCwgb3IgaWYgdGhlIGBzX2luc3RhbmNlc2AgbGlzdCBpcyBiZWluZyBtb2RpZmllZCBjb25jdXJyZW50bHksIHdlIGNvdWxkIHJ1biBpbnRvIHNlcmlvdXMgaXNzdWVzLiBCdXQgdXNpbmcgdGhlIGBzdXBlcl9ibG9ja3NgIGxpc3QgKGBzX2xpc3RgKSBjaXJjdW12ZW50cyB0aGlzIGNvbmNlcm4uIFRoZSBgcGAgd2l0aGluIHRoYXQgbGlzdCBvZmZlcnMgYSBwYXNzaXZlIHJlZmVyZW5jZSwgYW5kIGEgYHB1dF9zdXBlcihwKWAgb3BlcmF0aW9uIG9ubHkgaGFwcGVucyBkdXJpbmcgZGVzdHJ1Y3Rpb24gb3IgcmVsYXRlZCBldmVudHMuIFRoYXQncyBzaWduaWZpY2FudGx5IHNhZmVyLiBXYWl0IGEgc2Vjb25kLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIEkgc2hvdWxkIGFsc28gcmV2aWV3IGBpdGVyYXRlX3N1cGVyc2AgaW4gYGZzL3N1cGVyLmNgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGdlbmVyYWwgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaXMgc291bmQsIG5vdCBqdXN0IHRoaXMgc3BlY2lmaWMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyOS42NjI4MTk4NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFxuIDk4MTpcXHRcXHRmb3IgKHNiID0gZmlyc3Rfc3VwZXIoZmxhZ3MpO1xcbiA5ODI6XFx0XFx0ICAgICAhbGlzdF9lbnRyeV9pc19oZWFkKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpO1xcbiA5ODM6XFx0XFx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xcbiA5ODQ6XFx0XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXFxuIDk4NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTg2OlxcdFxcbiA5ODc6XFx0XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNiLVxcdTAwM2VzX3Bhc3NpdmUpKVxcbiA5ODg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gOTkxOlxcdFxcbiA5OTI6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU1VQRVJfSVRFUl9VTkxPQ0tFRCkge1xcbiA5OTM6XFx0XFx0XFx0XFx0ZihzYiwgYXJnKTtcXG4gOTk0OlxcdFxcdFxcdH0gZWxzZSBpZiAoc3VwZXJfbG9jayhzYiwgZXhjbCkpIHtcXG4gOTk1OlxcdFxcdFxcdFxcdGYoc2IsIGFyZyk7XFxuIDk5NjpcXHRcXHRcXHRcXHRzdXBlcl91bmxvY2soc2IsIGV4Y2wpO1xcbiA5OTc6XFx0XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRcXHRpZiAocClcXG4xMDAwOlxcdFxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDAxOlxcdFxcdFxcdHAgPSBzYjtcXG4xMDAyOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTAwMzpcXHRcXHR9XFxuMTAwNDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTAwNTpcXHRcXHRpZiAocClcXG4xMDA2OlxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDA3OlxcdH1cXG4xMDA4OlxcdFxcbjEwMDk6XFx0dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4xMDEwOlxcdHtcXG4xMDExOlxcdFxcdF9faXRlcmF0ZV9zdXBlcnMoZiwgYXJnLCAwKTtcXG4xMDEyOlxcdH1cXG4xMDEzOlxcdFxcbjEwMTQ6XFx0LyoqXFxuMTAxNTpcXHQgKlxcdGl0ZXJhdGVfc3VwZXJzX3R5cGUgLSBjYWxsIGZ1bmN0aW9uIGZvciBzdXBlcmJsb2NrcyBvZiBnaXZlbiB0eXBlXFxuMTAxNjpcXHQgKlxcdEB0eXBlOiBmcyB0eXBlXFxuMTAxNzpcXHQgKlxcdEBmOiBmdW5jdGlvbiB0byBjYWxsXFxuMTAxODpcXHQgKlxcdEBhcmc6IGFyZ3VtZW50IHRvIHBhc3MgdG8gaXRcXG4xMDE5OlxcdCAqXFxuMTAyMDpcXHQgKlxcdFNjYW5zIHRoZSBzdXBlcmJsb2NrIGxpc3QgYW5kIGNhbGxzIGdpdmVuIGZ1bmN0aW9uLCBwYXNzaW5nIGl0XFxuMTAyMTpcXHQgKlxcdGxvY2tlZCBzdXBlcmJsb2NrIGFuZCBnaXZlbiBhcmd1bWVudC5cXG4xMDIyOlxcdCAqL1xcbjEwMjM6XFx0dm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxcbjEwMjQ6XFx0XFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjI5LjY2Mjk1NjM1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTQ4MDc0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdXBlciBCbG9jayBJdGVyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gSSBzZWUgdGhleSd2ZSBzd2FwcGVkIGBpdGVyYXRlX3N1cGVyc190eXBlYCB0byBpdGVyYXRlIHRocm91Z2ggYHN1cGVyX2Jsb2Nrc2AgaW4gcmV2ZXJzZSBub3csIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogY29kZT8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBqdXN0IGEgZGVhZCBicmFuY2guXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoYXQgZnVuY3Rpb24gaXMgaW4gYGZzL3N1cGVyLmNgLiBPa2F5LCB0aGF0J3MgYSBjb3JlIFZGUyBmaWxlLiBTbyBpdCdzIHVzZWQgc29tZXdoZXJlIGluIHRoZSBmaWxlc3lzdGVtIHN0YWNrLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBjYWxsZWQgYnkgQ0lGUy9TTUIsIHNwZWNpZmljYWxseSB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBjaWZzX2dldF9zdXBlcmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBwbGFjZXMgd2l0aGluIHRoZSBrZXJuZWwgb3IgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnRpbmcvb3BlcmF0aW9ucy5cblxuQWxyaWdodCwgdGhhdCB0ZWxscyBtZSB0aGUgY2hhbmdlIGxpa2VseSBoYXMgYW4gZWZmZWN0LiBCdXQsIGJlZm9yZSBJIGdldCBhbnkgZnVydGhlciBpbnRvIHdoYXQgdGhpcyBpbXBhY3QgbWF5IGJlLCBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGlzIGNhbGxpbmcgYGNpZnNfZ2V0X3N1cGVyYCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gVGhlIGNhbGwgZ3JhcGggd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBkZXBlbmRpbmcgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzozMi42MTc3NzQ3OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzY4ODA2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jaWZzX2dldF9zdXBlcnxjaWZzX2dldF9zdXBlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L21pc2MuYz04Nzc9c3RhdGljIHZvaWQgdGNvbl9zdXBlcl9jYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICphcmcpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy04OTgtXFxuZnMvc21iL2NsaWVudC9taXNjLmM6ODk5OnN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKl9fY2lmc19nZXRfc3VwZXIodm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLFxcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkwMC1cXHRcXHRcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSlcXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jPTkzMj1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MzktXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRjb24tXFx1MDAzZXRjX2xvY2spO1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjk0MDpcXHRyZXR1cm4gX19jaWZzX2dldF9zdXBlcih0Y29uX3N1cGVyX2NiLCB0Y29uKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzozNi42OTQ3MDEwMDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA1OTQ5ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENJRlMvU01CIGFuZCBDb3JlIFZGUyBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggQ0lGUy9TTUIgb3IgREZTIGhlcmUsIG9yIGlmIHRoaXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIGZ1bmN0aW9uIGlzIHNvbWVob3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb3JlIFZGUy4gRm9ydHVuYXRlbHksIEkgcmVtZW1iZXIgdGhhdCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgaXMgaW5kZWVkIGFuIGV4cG9ydGVkIGNvcmUgVkZTIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm91bmQgaW4gYGZzL3N1cGVyLmNgLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gYSBiaXQsIGJ1dCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgQ0lGUy9TTUIgZnVuY3Rpb25hbGl0eSBpdHNlbGYgaGFzIGFueSBDT05GSUcgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0byBsb29rIGZvciB0aGluZ3MgbGlrZSBgQ0lGU2Agb3IgYFNNQl9DTElFTlRgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSeKAmWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyBgZnMvc21iL2NsaWVudC9LY29uZmlnYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTWFrZWZpbGUgdG8gc2VlIHdoYXQncyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBDSUZTL1NNQiBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBpdCBzaXRzIGluIHJlbGF0aW9uIHRvIHRoZSBWRlMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo0MC43NTQyMDI3MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDc4NDA5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0zODM9aW50IHNtYjJfcGFyc2VfcXVlcnlfZGlyZWN0b3J5KHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIHN0cnVjdCBrdmVjICpyc3BfaW92LFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0zODYtXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDozODc6c3RydWN0IHN1cGVyX2Jsb2NrICpjaWZzX2dldF9kZnNfdGNvbl9zdXBlcihzdHJ1Y3QgY2lmc190Y29uICp0Y29uKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oLTM4OC12b2lkIGNpZnNfcHV0X3RjcF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZGZzLmM9Mzg2PWludCBjaWZzX3RyZWVfY29ubmVjdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uKVxcbi0tXFxuZnMvc21iL2NsaWVudC9kZnMuYy00MzItXFxuZnMvc21iL2NsaWVudC9kZnMuYzo0MzM6XFx0c2IgPSBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcih0Y29uKTtcXG5mcy9zbWIvY2xpZW50L2Rmcy5jLTQzNC1cXHRpZiAoIUlTX0VSUihzYikpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz05MjY9c3RhdGljIHZvaWQgX19jaWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc21iL2NsaWVudC9taXNjLmMtOTMxLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkzMjpzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXFxuZnMvc21iL2NsaWVudC9taXNjLmMtOTMzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6NDIuNTYyMDUyNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgwNjMxNjY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ0lGUy9ERlMgQ29uZmlndXJhdGlvbiBBdWRpdCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZnMvc21iL2NsaWVudGAgS2NvbmZpZyBmaWxlcy4gTXkgYnJhaW4ncyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgZm9yIENJRlMgYW5kIERGUyBzdXBwb3J0LCBvciB3ZSBjb3VsZCBiZSBpbiBmb3Igc29tZSBzZXJpb3VzIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gY2xlYXJseSBpZGVudGlmeSB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcyBhcmUuIFRoaXMgaXNuJ3QganVzdCBhIGN1cnNvcnkgZ2xhbmNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggY29uZmlnIG9wdGlvbiBpbiBkZXRhaWwsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHRoZSBwcm9wZXIgb3BlcmF0aW9uIG9mIHRoZSBTTUIgY2xpZW50LiBMZXTigJlzIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoaXMgd2lsbCBzYXZlIHVzIGlzc3VlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6NDQuMzY4MzcyOTAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg4MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0lGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIkV4dGVuZGVkIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjY4OmNvbmZpZyBDSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSBsZXNzIHNlY3VyZSBkaWFsZWN0c1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04Mi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMDc6Y29uZmlnIENJRlNfUE9TSVhcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkNJRlMgUE9TSVggRXh0ZW5zaW9uc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMTgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXFx0Ym9vbCBcXFwiRW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjktXFx0Ym9vbCBcXFwiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMzk6Y29uZmlnIENJRlNfREVCVUdfRFVNUF9LRVlTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJEdW1wIGVuY3J5cHRpb24ga2V5cyBmb3Igb2ZmbGluZSBkZWNyeXB0aW9uIChVbnNhZmUpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVxcdGJvb2wgXFxcIkRGUyBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNjMtXFx0Ym9vbCBcXFwiU1dOIGZlYXR1cmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE3Mzpjb25maWcgQ0lGU19ORlNEX0VYUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0xNzk9aWYgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJTTUIgRGlyZWN0IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTE6Y29uZmlnIENJRlNfRlNDQUNIRVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBDSUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTk4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXFx0Ym9vbCBcXFwiU01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlNNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo0NC40MTcyNjE3NDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU2NjI0NDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBJbXBsaWNhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBpdGVyYXRlIHRocm91Z2ggc3VwZXJibG9ja3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvcmUgVkZTIChgZnMvc3VwZXIuY2ApLiBTaW5jZSBgZnMvc3VwZXIuY2AgaXMgYWx3YXlzIGJ1aWx0IChjb3JlIFZGUywgYG9iai15ICs9IHN1cGVyLm9gIGluIGBmcy9NYWtlZmlsZWApLCB3ZSBrbm93IHRoaXMgaXMgYSBrZXkgYXJlYSB0byBjb25zaWRlci4gSXQncyBtb2RpZnlpbmcgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCB3aGljaCBpcyBhIGZ1bmN0aW9uIGNyaXRpY2FsIGZvciB0cmF2ZXJzaW5nIHRocm91Z2ggdGhlIHN1cGVyYmxvY2sgaW5zdGFuY2VzIG9mIGEgY2VydGFpbiB0eXBlLlxuXG5QcmV2aW91c2x5LCBpdCB1c2VkIGEgaGFzaCBsaXN0LCBhbmQgbm93IGl0J3Mgc3dpdGNoaW5nIHRvIGEgcmV2ZXJzZSBsaXN0IGl0ZXJhdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gaG93IHRoZSBuZXdlc3Qgc3VwZXJibG9ja3MgYXJlIGhhbmRsZWQuIFRoZSBsb2NrLCBgc2JfbG9ja2AsIGlzIHN0aWxsIGludm9sdmVkLCBidXQgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIG1lbnRpb25zIGBzX2xpc3RgIGZvciB0cmF2ZXJzaW5nIGFuZCBhIGBzX3Bhc3NpdmVgIHJlZmNvdW50IGZvciB2YWxpZGl0eSBkdXJpbmcgbG9jayBkcm9wcy5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhpcyBwYXRjaCBiYXNlZCBvbiBvdXIgZnV6emluZyBjcml0ZXJpYS5cblxuMS4gICoqQ29yZSBTdWJzeXN0ZW1zOioqIERlZmluaXRlbHkgd29ydGggbG9va2luZyBhdC4gQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gVkZTLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgZXRjLiwgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBmaXRzIHRoZSBiaWxsIOKAkyB3ZSdyZSBjaGFuZ2luZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiwgd2hpY2ggaXMgYSBjb3JlIFZGUyBmdW5jdGlvbi4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuMi4gICoqRm9jdXMgU3ltYm9sczoqKiBUaGUgbW9zdCBvYnZpb3VzIGlzIGBpdGVyYXRlX3N1cGVyc190eXBlYCBpdHNlbGYuIEl0J3MgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCBpdCdzIG5vdCBhIGZ1bmN0aW9uIHRoYXQncyB1YmlxdWl0b3VzIGluIHRoZSBzZW5zZSBvZiBiZWluZyBhICpiYXNpYyogaGVscGVyIChsaWtlIGBrZnJlZWAgb3IgYGttYWxsb2NgKS4gSXQncyBzcGVjaWZpYyB0byBpdGVyYXRpbmcgc3VwZXJibG9ja3MuIEkgY291bGQgY29uc2lkZXIgYGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyYCBvciBgX19jaWZzX2dldF9zdXBlcmAgc2luY2UgdGhleSBjYWxsIGBpdGVyYXRlX3N1cGVyc190eXBlYCwgYnV0IHRoZSBwcmltYXJ5IHN5bWJvbCBpcyBjbGVhcmx5IGBpdGVyYXRlX3N1cGVyc190eXBlYC4gSXQncyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCdzIGRpcmVjdGx5IGNoYW5nZWQsIGFuZCB0aGF0J3MgdGhlIGNsZWFyZXN0IGZvY3VzLlxuXG4zLiAgKipFbmFibGVDb25maWdzOioqIFNpbmNlIGBmcy9zdXBlci5jYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQncyBub3QgYSBjb25jZXJuLiBIb3dldmVyLCBpZiB3ZSB3YW50IHRvIGV4ZXJjaXNlIHRoZSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLCBsaWtlIGBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcmAgb3IgYF9fY2lmc19nZXRfc3VwZXJgIHZpYSBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAsIHdlIHByb2JhYmx5IG5lZWQgYENJRlNgIGFuZCBwb3RlbnRpYWxseSBgQ0lGU19ERlNfVVBDQUxMYCBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmRpdGlvbnMgZm9yIGBkZnMuY2AgaW4gdGhlIGBmcy9zbWIvY2xpZW50L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpZiBJIGRlY2lkZSB0byBwdXJzdWUgdGhvc2UgcmVsYXRlZCBmdW5jdGlvbnMuIEJ1dCBmb3Igbm93LCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgaXRzZWxmIGlzIHRoZSBwcmltYXJ5IHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo0OS45ODM1MDk4MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODA5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvTWFrZWZpbGU9MjM9Y2lmcy0kKENPTkZJR19DSUZTX1VQQ0FMTCkgKz0gY2lmc19zcG5lZ28ub1xcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjQtXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZToyNTpjaWZzLSQoQ09ORklHX0NJRlNfREZTX1VQQ0FMTCkgKz0gZGZzX2NhY2hlLm8gZGZzLm9cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo1MC4wMzIzMjQ5NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE4NTY2ODI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgbWlzYy5vYCBpbiB0aGUgU2FtYmEgQ2xpZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtaXNjLm9gIGlzIGJlaW5nIGNvbXBpbGVkIGZvciB0aGUgU2FtYmEgY2xpZW50LiBNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGBNYWtlZmlsZWAgZm9yIHRoZSBgZnMvc21iL2NsaWVudGAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEknbGwgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAyMCwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG9iamVjdCBmaWxlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGluc2lnaHQgaW50byBob3cgYG1pc2Mub2AgaXMgYnVpbHQsIGFueSByZWxldmFudCBjb21waWxlciBmbGFncyB0aGF0IGFyZSB1c2VkLCBhbmQgd2hpY2ggb3RoZXIgc291cmNlIGZpbGVzLCBpZiBhbnksIGl0IHJlbGllcyBvbi4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIG1ha2UgdGFyZ2V0IGFuZCBJIGNhbiBxdWlja2x5IGdsZWFuIHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjUzLjIxNzk5NTU3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zbWIvY2xpZW50L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgTGludXggQ0lGUy9TTUIyL1NNQjMgVkZTIGNsaWVudFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y2NmbGFncy15ICs9IC1JJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0NJRlMpICs9IGNpZnMub1xcbiAgIDc6XFx0XFxuICAgODpcXHRjaWZzLXkgOj0gdHJhY2UubyBjaWZzZnMubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBcXFxcXFxuICAgOTpcXHRcXHQgIGlub2RlLm8gbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgY2FjaGVkX2Rpci5vIGNpZnNfdW5pY29kZS5vIGNpZnNlbmNyeXB0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0ICByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8gdW5jLm8gd2ludWNhc2UubyBcXFxcXFxuICAxMjpcXHRcXHQgIHNtYjJvcHMubyBzbWIybWFwZXJyb3IubyBzbWIydHJhbnNwb3J0Lm8gXFxcXFxcbiAgMTM6XFx0XFx0ICBzbWIybWlzYy5vIHNtYjJwZHUubyBzbWIyaW5vZGUubyBzbWIyZmlsZS5vIGNpZnNhY2wubyBmc19jb250ZXh0Lm8gXFxcXFxcbiAgMTQ6XFx0XFx0ICBkbnNfcmVzb2x2ZS5vIGNpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLm8gYXNuMS5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgbmFtZXNwYWNlLm8gcmVwYXJzZS5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdCQob2JqKS9hc24xLm86ICQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5oXFxuICAxODpcXHRcXG4gIDE5OlxcdCQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vOiAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuYyAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuaFxcbiAgMjA6XFx0XFxuICAyMTpcXHRjaWZzLSQoQ09ORklHX0NJRlNfWEFUVFIpICs9IHhhdHRyLm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y2lmcy0kKENPTkZJR19DSUZTX1VQQ0FMTCkgKz0gY2lmc19zcG5lZ28ub1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRjaWZzLSQoQ09ORklHX0NJRlNfREZTX1VQQ0FMTCkgKz0gZGZzX2NhY2hlLm8gZGZzLm9cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y2lmcy0kKENPTkZJR19DSUZTX1NXTl9VUENBTEwpICs9IG5ldGxpbmsubyBjaWZzX3N3bi5vXFxuICAyODpcXHRcXG4gIDI5OlxcdGNpZnMtJChDT05GSUdfQ0lGU19GU0NBQ0hFKSArPSBmc2NhY2hlLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y2lmcy0kKENPTkZJR19DSUZTX1NNQl9ESVJFQ1QpICs9IHNtYmRpcmVjdC5vXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNpZnMtJChDT05GSUdfQ0lGU19ST09UKSArPSBjaWZzcm9vdC5vXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNpZnMtJChDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kpICs9IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6NTMuMjE4MDYxMTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMzE4NzYyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQ0lGUyBhbmQgU3VwZXJibG9jayBJdGVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG1pc2Mub2AgaXMgaW52b2x2ZWQgd2l0aCBgY2lmcy15YCwgc3BlY2lmaWNhbGx5LCBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgLCB3aGljaCBpcyBpbnRlcmVzdGluZ2x5IGNhbGxlZCBieSBgZnMvc21iL2NsaWVudC9kZnMuY2AuIEFuZCB0aGF0IGlzIGl0c2VsZiBwYXJ0IG9mIGEgYGNpZnMtJChDT05GSUdfQ0lGU19ERlNfVVBDQUxMKSArPSBkZnNfY2FjaGUubyBkZnMub2AgY29uZmlndXJhdGlvbi4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgIGluIGBtaXNjLmNgIHRoZW4gY2FsbHMgYF9fY2lmc19nZXRfc3VwZXJgLlxuXG5TbywgYGRmcy5jYCBjYWxscyBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgLiBBbHJpZ2h0LCB1bmRlcnN0b29kLiBUaGUgY29uZmlndXJhdGlvbnMgYXQgcGxheSBoZXJlIGFyZSBgQ0lGU2AgYW5kIGBDSUZTX0RGU19VUENBTExgLlxuXG5Ob3csIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgLiBJIHNlZSBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgYW5kIGBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcmAgYXMgY2FuZGlkYXRlcy5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBzdXBlcmJsb2NrcyBhcmUgdHJhdmVyc2VkLiBJdCBpcyBpbXBhY3RpbmcgdGhlIFZGUyBjb3JlIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgYSBoaWdoLXZhbHVlIHRhcmdldC4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgbG9ja2luZyBhbmQgaXRlcmF0aW9uIHNlbWFudGljcyBhcm91bmQgc3VwZXJibG9ja3MuIFRoZSBwYXRjaCBzaGlmdHMgdGhlIGl0ZXJhdGlvbiBtZXRob2QsIG1vdmluZyBmcm9tIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgb24gYHR5cGUtXHUwMDNlZnNfc3VwZXJzYCB0byBpdGVyYXRpbmcgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGJhY2t3YXJkcyB3aXRoIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlcmluZyBieSBgc2ItXHUwMDNlc190eXBlICE9IHR5cGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLlxuXG5ZZXAsIHRoZSBsb2NraW5nIGFuZCBpdGVyYXRpb24gc2VtYW50aWNzIGFjcm9zcyBzdXBlcmJsb2NrcyBpbiBWRlMgYXJlIGJlaW5nIGFsdGVyZWQgaGVyZSwgYW5kIHRoYXQncyBjb3JlIGtlcm5lbCBsb2dpYy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgdmVyaWZpZWQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY4LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjU3LjQ0OTk0MDAwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTM1NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCIsXG4gICAgXCJDSUZTX0RGU19VUENBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpdGVyYXRlX3N1cGVyc190eXBlXCIsXG4gICAgXCJjaWZzX2dldF9kZnNfdGNvbl9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBjb3JlIFZGUyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiBsb2dpYyBpbiBpdGVyYXRlX3N1cGVyc190eXBlKCkgYnkgc3dpdGNoaW5nIGZyb20gaXRlcmF0aW5nIG92ZXIgdHlwZS1cXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIkNJRlNfREZTX1VQQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml0ZXJhdGVfc3VwZXJzX3R5cGVcIixcbiAgICBcImNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgVkZTIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljIGluIGl0ZXJhdGVfc3VwZXJzX3R5cGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBpdGVyYXRpbmcgb3ZlciB0eXBlLVxcdTAwM2Vmc19zdXBlcnMgdG8gd2Fsa2luZyB0aGUgZ2xvYmFsIHN1cGVyX2Jsb2NrcyBsaXN0IGJhY2t3YXJkcyB3aGlsZSBkcm9wcGluZyBhbmQgcmVhY3F1aXJpbmcgc2JfbG9jay4gVGhpcyBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIHRyYXZlcnNhbCBzZW1hbnRpY3MgaW4gYSBjb3JlIFZGUyBoZWxwZXIgdXNlZCBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIChzdWNoIGFzIENJRlMgREZTIHJlY29ubmVjdHMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIHRyYXZlcnNhbCBpbmNvbnNpc3RlbmNpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjU3LjUyNjQ4NDM5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODAxMTk5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo1Ny41MjcxNzE2NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTE3OTQyODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGUoKWAgaW4gYGZzL3N1cGVyLmNgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGxpc3QgdmlhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFxcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVxcdTAwM2VzX3R5cGUgPT0gdHlwZWAsIHJhdGhlciB0aGFuIGl0ZXJhdGluZyBgdHlwZS1cXHUwMDNlZnNfc3VwZXJzYCB3aXRoIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAuIFRoaXMgZW5zdXJlcyBsaXN0IGN1cnNvciBzYWZldHkgd2hpbGUgYHNiX2xvY2tgIGlzIGRyb3BwZWQgZHVyaW5nIHN1cGVyYmxvY2sgaXRlcmF0aW9uLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGxpc3QgdHJhdmVyc2FsLCBzeW5jaHJvbml6YXRpb24sIGFuZCBzdXBlcmJsb2NrIHJlZmVyZW5jZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxpc3QgdHJhdmVyc2FsLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBhZGRyZXNzYWJsZSBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZWMxZDQ0NTY4NTZiN2NmZDZmNjUyMzg5YzBjNjBhZGM0YjBkMGU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMTozNzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCAwNWU0NDMxNzMwMzg3Li5jOGFjY2QxNDRiYWQyIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuKysrIGIvZnMvc3VwZXIuY1xuQEAgLTEwMjYsMTEgKzEwMjYsMTggQEAgdm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnkoc2IsIFx1MDAyNnR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuK1x0LypcbitcdCAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrXG4rXHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXG4rXHQgKiBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdCkge1xuIFx0XHRib29sIGxvY2tlZDtcbiBcbiBcdFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG4gXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChzYi1cdTAwM2VzX3R5cGUgIT0gdHlwZSlcbitcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2ItXHUwMDNlc19wYXNzaXZlKSlcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjU3LjUyNzE3MjUwMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjgzNzgwOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBmdXp6aW5nLiBJdCdzIG1vZGlmeWluZyBgZnMvc3VwZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIGZ1bmN0aW9uLiBGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYmVlbiBhIGNoYW5nZSB0byBob3cgdGhlIHN1cGVyYmxvY2tzIGFyZSBpdGVyYXRlZC4gUHJldmlvdXNseSwgaXQgdXNlZCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgIG9uIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2AuIE5vdywgaXQncyB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYCBvbiBgc3VwZXJfYmxvY2tzYCwgd2l0aCB0aGUgaW5jbHVzaW9uIG9mIGEgY2hlY2sgZm9yIGBzYi1cdTAwM2VzX3R5cGUgPT0gdHlwZWAgYW5kIHNvbWUga2luZCBvZiBwYXNzaXZlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IHVzaW5nIGBzX3Bhc3NpdmVgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHRoZXkgc3dpdGNoaW5nIGZyb20gYW4gaGxpc3QgdG8gYSBsaXN0PyBJcyBpdCByZWxhdGVkIHRvIHRoZSBcIm5ld2VzdC1maXJzdCB2aXNpdGF0aW9uXCIgY29tbWVudD8gSXMgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBsb2NraW5nIG9yIGNvbmN1cnJlbmN5IGlzc3VlcywgaGVuY2UgdGhlIHVzZSBvZiBgc19wYXNzaXZlYCBhbmQgZHJvcHBpbmcgYHNiX2xvY2tgIHdpdGhpbiB0aGUgbG9vcD8gVGhpcyBzdWdnZXN0cyBpdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiB0aGUgc3VwZXJibG9jayBpdGVyYXRpb24gcHJvY2VzcywgbGlrZWx5IHRvIGltcHJvdmUgZWl0aGVyIHBlcmZvcm1hbmNlIG9yIGNvcnJlY3RuZXNzIG9yIGJvdGguXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXM6IHdpbGwgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBLTVNBTiBjb3VsZCBjYXRjaD8gVGhlIGZhY3QgdGhhdCBhIFwicGFzc2l2ZSByZWZlcmVuY2VcIiBpcyBiZWluZyB1c2VkIGFuZCB0aGF0IHRoZXJlIGFyZSBleHBsaWNpdCBjaGVja3MgZm9yIGBTQl9EWUlOR2AgYW5kIHR5cGUgbWlzbWF0Y2ggaGludHMgYXQgdGhpcyBwcm9jZXNzIGJlaW5nIGZhaXJseSBjb21wbGV4LiBJIHNob3VsZCBhbmFseXplIHdoYXQgaGFwcGVucyBpZiBgcmVmY291bnRfaW5jX25vdF96ZXJvYCByZXR1cm5zIHplcm8sIGlzIHRoaXMgcGF0aCBiZWluZyBjb3ZlcmVkIGJ5IG90aGVyIGV4aXN0aW5nIHNhbml0aXplcnM/XG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzg6MDMuMjEwOTU2NzA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjA6XFx0ICpcXHRTY2FucyB0aGUgc3VwZXJibG9jayBsaXN0IGFuZCBjYWxscyBnaXZlbiBmdW5jdGlvbiwgcGFzc2luZyBpdFxcbjEwMjE6XFx0ICpcXHRsb2NrZWQgc3VwZXJibG9jayBhbmQgZ2l2ZW4gYXJndW1lbnQuXFxuMTAyMjpcXHQgKi9cXG4xMDIzOlxcdHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG4xMDI0OlxcdFxcdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxcbjEwMjU6XFx0e1xcbjEwMjY6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiX2xvY2spO1xcbjEwMjk6XFx0XFx0LypcXG4xMDMwOlxcdFxcdCAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrXFxuMTAzMTpcXHRcXHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXFxuMTAzMjpcXHRcXHQgKiBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi5cXG4xMDMzOlxcdFxcdCAqL1xcbjEwMzQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHtcXG4xMDM1OlxcdFxcdFxcdGJvb2wgbG9ja2VkO1xcbjEwMzY6XFx0XFxuMTAzNzpcXHRcXHRcXHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcXG4xMDM4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwMzk6XFx0XFx0XFx0aWYgKHNiLVxcdTAwM2VzX3R5cGUgIT0gdHlwZSlcXG4xMDQwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwNDE6XFx0XFxuMTA0MjpcXHRcXHRcXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2c2ItXFx1MDAzZXNfcGFzc2l2ZSkpXFxuMTA0MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHRcXHRsb2NrZWQgPSBzdXBlcl9sb2NrX3NoYXJlZChzYik7XFxuMTA0ODpcXHRcXHRcXHRpZiAobG9ja2VkKSB7XFxuMTA0OTpcXHRcXHRcXHRcXHRmKHNiLCBhcmcpO1xcbjEwNTA6XFx0XFx0XFx0XFx0c3VwZXJfdW5sb2NrX3NoYXJlZChzYik7XFxuMTA1MTpcXHRcXHRcXHR9XFxuMTA1MjpcXHRcXG4xMDUzOlxcdFxcdFxcdGlmIChwKVxcbjEwNTQ6XFx0XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwNTU6XFx0XFx0XFx0cCA9IHNiO1xcbjEwNTY6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDU3OlxcdFxcdH1cXG4xMDU4OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDU5OlxcdFxcdGlmIChwKVxcbjEwNjA6XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwNjE6XFx0fVxcbjEwNjI6XFx0XFxuMTA2MzpcXHRFWFBPUlRfU1lNQk9MKGl0ZXJhdGVfc3VwZXJzX3R5cGUpO1xcbjEwNjQ6XFx0XFxuMTA2NTpcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnVzZXJfZ2V0X3N1cGVyKGRldl90IGRldiwgYm9vbCBleGNsKVxcbjEwNjY6XFx0e1xcbjEwNjc6XFx0XFx0c3RydWN0IHN1cGVyX2RldiAqc2JfZGV2O1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRmb3IgKHNiX2RldiA9IHN1cGVyX2Rldl9maXJzdChkZXYpOyBzYl9kZXY7IHNiX2RldiA9IHN1cGVyX2Rldl9uZXh0KHNiX2RldikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzg6MDMuMjExMTQyODk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDY5MDQwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIGl0cyByZWNlbnQgaGlzdG9yeSBhbmQgdXNhZ2UuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNvZGViYXNlLiBXaGVyZSdzIGl0IHVzZWQ/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHMgY2FsbCBpdD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBwYXR0ZXJuIG9yIGFsZ29yaXRobT8gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGxvb2tpbmcgYXQgdGhlIGRpcmVjdCBjYWxsZXJzLlxuXG5UaGVuLCBpZiB0aGF0IGRvZXNuJ3QgaW1tZWRpYXRlbHkgc2hlZCBlbm91Z2ggbGlnaHQsIG9yIGlmIEkgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLCBJJ2xsIG1vdmUgb24gdG8gc291cmNlIGNvbnRyb2wuIEknbGwgZWl0aGVyIHVzZSBgZ2l0IGJsYW1lYCBvciBhIG1vcmUgZ2VuZXJhbCBgZ2l0IGxvZ2Agc2VhcmNoLCBwZXJoYXBzIGNvbWJpbmVkIHdpdGggYGdyZXBgLCBsb29raW5nIGZvciBhbnkgbWVudGlvbnMgb2YgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGV4aXN0cywgYW55IG1ham9yIGNoYW5nZXMgaXQncyB1bmRlcmdvbmUsIGFuZCB3aG8ncyBiZWVuIGludGVyYWN0aW5nIHdpdGggaXQuIFRoZSBoaXN0b3J5IGNvdWxkIGJlIHF1aXRlIHJldmVhbGluZzsgaXQgbWlnaHQgc2hvdyBwYXN0IGJ1Z3Mgb3Igb3B0aW1pemF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB3aGF0IEknbSBsb29raW5nIGF0IHRvZGF5LiBUaGlzIGFsc28gaGVscHMgdG8gZXN0YWJsaXNoIGNvbnRleHQgaWYgSSdtIG5vdCBmYW1pbGlhciB3aXRoIHRoZSBjb2RlIGluIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozODowNS44NTgwNTU1MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg0NTcyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXRlcmF0ZV9zdXBlcnNfdHlwZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTAtXFx0Zm9yICg7ICpmc190eXBlOyBmc190eXBlKyspIHtcXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MTE6XFx0XFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSgqZnNfdHlwZSwgZiwgXFx1MDAyNnNkKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTItXFx0XFx0aWYgKHNkLnNiKSB7XFxuLS1cXG5mcy9zdXBlci5jPTEwMDk9dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4tLVxcbmZzL3N1cGVyLmMtMTAxNC0vKipcXG5mcy9zdXBlci5jOjEwMTU6ICpcXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxcbmZzL3N1cGVyLmMtMTAxNi0gKlxcdEB0eXBlOiBmcyB0eXBlXFxuLS1cXG5mcy9zdXBlci5jLTEwMjItICovXFxuZnMvc3VwZXIuYzoxMDIzOnZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG5mcy9zdXBlci5jLTEwMjQtXFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuLS1cXG5mcy9zdXBlci5jLTEwNjItXFxuZnMvc3VwZXIuYzoxMDYzOkVYUE9SVF9TWU1CT0woaXRlcmF0ZV9zdXBlcnNfdHlwZSk7XFxuZnMvc3VwZXIuYy0xMDY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTMyNTI9ZXh0ZXJuIHZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMjUzOmV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKixcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzI1NC1cXHRcXHRcXHQgICAgICAgIHZvaWQgKCopKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozODowNy40NTY1MjgzOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzI1NjcxNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQ29kZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaXRlcmF0ZV9zdXBlcnNgIGFuZCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSwgaW4gdGhpcyBjYXNlLCB0aGUgbGluZSBkaXJlY3RseSBhYm92ZSBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAsIHdoaWNoIHNob3VsZCBiZSBgaXRlcmF0ZV9zdXBlcnNgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBhcyBvZnRlbiByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBjbG9zZSB0byBlYWNoIG90aGVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGluaGVyaXRhbmNlIG9yIHR5cGUgaGllcmFyY2hpZXMg4oCTIHdoaWNoIGlzIHdoYXQgdGhlc2UgbmFtZXMgYXJlIGhlYXZpbHkgc3VnZ2VzdGluZy4gTGV0J3Mgc2VlIGlmIHRoYXQncyB3aGVyZSBJIGNhbiBmaW5kIHRoZSBjb25uZWN0aW9uLCBvciB3aGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaXMgbW9yZSBjb21wbGV4IHRoYW4gYSBzaW1wbGUgZGVmaW5pdGlvbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM4OjA5LjE4MjIwMzgwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTVVBFUl9JVEVSX1VOTE9DS0VEKSB7XFxuIDk5MzpcXHRcXHRcXHRcXHRmKHNiLCBhcmcpO1xcbiA5OTQ6XFx0XFx0XFx0fSBlbHNlIGlmIChzdXBlcl9sb2NrKHNiLCBleGNsKSkge1xcbiA5OTU6XFx0XFx0XFx0XFx0ZihzYiwgYXJnKTtcXG4gOTk2OlxcdFxcdFxcdFxcdHN1cGVyX3VubG9jayhzYiwgZXhjbCk7XFxuIDk5NzpcXHRcXHRcXHR9XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdFxcdGlmIChwKVxcbjEwMDA6XFx0XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwMDE6XFx0XFx0XFx0cCA9IHNiO1xcbjEwMDI6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDAzOlxcdFxcdH1cXG4xMDA0OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDA1OlxcdFxcdGlmIChwKVxcbjEwMDY6XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwMDc6XFx0fVxcbjEwMDg6XFx0XFxuMTAwOTpcXHR2b2lkIGl0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxcbjEwMTA6XFx0e1xcbjEwMTE6XFx0XFx0X19pdGVyYXRlX3N1cGVycyhmLCBhcmcsIDApO1xcbjEwMTI6XFx0fVxcbjEwMTM6XFx0XFxuMTAxNDpcXHQvKipcXG4xMDE1OlxcdCAqXFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSAtIGNhbGwgZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2tzIG9mIGdpdmVuIHR5cGVcXG4xMDE2OlxcdCAqXFx0QHR5cGU6IGZzIHR5cGVcXG4xMDE3OlxcdCAqXFx0QGY6IGZ1bmN0aW9uIHRvIGNhbGxcXG4xMDE4OlxcdCAqXFx0QGFyZzogYXJndW1lbnQgdG8gcGFzcyB0byBpdFxcbjEwMTk6XFx0ICpcXG4xMDIwOlxcdCAqXFx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcXG4xMDIxOlxcdCAqXFx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxcbjEwMjI6XFx0ICovXFxuMTAyMzpcXHR2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXFxuMTAyNDpcXHRcXHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzg6MDkuMTgyMzk2MTc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1MjQxODMxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGV5J3ZlIGNoYW5nZWQgaG93IGBpdGVyYXRlX3N1cGVyc190eXBlYCB3b3Jrcy4gUHJldmlvdXNseSwgaXQgdXNlZCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgIHRvIGl0ZXJhdGUgdGhyb3VnaCBgdHlwZS1cdTAwM2Vmc19zdXBlcnNgLiBUaGUgaXNzdWUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXMgdGhhdCB0aGUgYHNiX2xvY2tgIHdhcyBiZWluZyBkcm9wcGVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCB3aGlsZSBgcGAgaGFkIGEgcGFzc2l2ZSByZWZlcmVuY2UuIEkgcmVtZW1iZXIgdGhpcyBwYXR0ZXJuOyBpdOKAmXMgcmlza3kgd2l0aCBgaGxpc3RgIGJlY2F1c2UgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGNhbiBjb3JydXB0IHRoZSB0cmF2ZXJzYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBvbGQgY29kZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNoYW5nZS5cblxuQnV0IHdhaXQsIEkgc2VlIHRoYXQgYF9faXRlcmF0ZV9zdXBlcnNgIHVzZXMgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZWAgb24gdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0LCBpdGVyYXRpbmcgdmlhIHRoZSBgc19saXN0YCBmaWVsZCwgbm90IHRoZSBgc19pbnN0YW5jZXNgIGhsaXN0LiBTbyB0aGUgbmV3IGNoYW5nZSB0byB1c2UgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpYCBhbmQgZmlsdGVyIGJ5IGBzYi1cdTAwM2VzX3R5cGUgIT0gdHlwZWAgaXMgYWN0dWFsbHkgbWFraW5nIGl0ICpjb25zaXN0ZW50KiB3aXRoIHRoZSBzYWZlIGl0ZXJhdGlvbiBpbiBgX19pdGVyYXRlX3N1cGVyc2AuIFRoaXMgc2VlbXMgcmlnaHQuIEl04oCZcyBwcm90ZWN0aW5nIHRoZSBpdGVyYXRpb24gYnkgZW5zdXJpbmcgdGhlIGxpc3QgZG9lc27igJl0IGNoYW5nZSwgb3IgdGhlIGN1cnNvciBpcyBtYWludGFpbmVkIGJ5IHVzaW5nIGBzX3Bhc3NpdmVgIHByb3Blcmx5LCBvciBzYWZlIGl0ZXJhdGlvbiBvZiB0aGUgaGxpc3Qgd2hlbiB0aGUgbG9jayBpcyBkcm9wcGVkLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIEtNU0FOIGNvbmNlcm5zLlxuXG5GaXJzdCwgZG9lcyB0aGlzIGNoYW5nZSB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGUgcGFkZGluZyBsZWFrcz8gTm9wZS4gVGhpcyBpcyBqdXN0IGFuIGl0ZXJhdGlvbiBhbmQgbG9ja2luZyBmaXguIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGluaXRpYWxpemF0aW9uIGNvZGUsIG5vIG5ldyBzdHJ1Y3QgZGVmaW5pdGlvbnMuXG5cblNlY29uZCwgY291bGQgdGhlIHBhdGNoIHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGNvZGUgdXNlcyBgc2JgLCB3aGljaCBpcyBpbml0aWFsaXplZC4gYHNiLVx1MDAzZXNfdHlwZWAgaXMgYWxzbyBpbml0aWFsaXplZC5cblxuVGhpcmQsIHdoYXQgcG90ZW50aWFsIGJ1Z3MgZG9lcyBpdCBmaXg/IFdlbGwsIGJhc2VkIG9uIHdoYXQgSSBzZWUgaXQgaXMgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbGlzdCBjb3JydXB0aW9uLCBpdGVyYXRvciBpbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMsIGFsbCByZWxhdGVkIHRvIHRoZSBsb2NraW5nIGFuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgbGlzdC4gU291bmRzIGxpa2UgaXQgc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuRmluYWxseSwgaXMgdGhlcmUgYW55IGNoYW5jZSBvZiB1c2VyLXNwYWNlIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBpbmZvcm1hdGlvbiBsZWFrcz8gQWJzb2x1dGVseSBub3QuIFRoaXMgY2hhbmdlIGlzIGVudGlyZWx5IHdpdGhpbiBrZXJuZWwgc3BhY2UgYW5kIGRlYWxzIHdpdGggaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5TbywgSSdtIGNvbmNsdWRpbmcgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBsaXN0IHRyYXZlcnNhbCwgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBjb3ZlciB0aG9zZSBjb25jdXJyZW5jeSBhbmQgbG9jayBpc3N1ZXMuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBBbGwgdGhlIGNyaXRlcmlhIGNoZWNrIG91dC4gVGltZSB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0NywiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozODoxNi43MDY1ODIxNzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpYCBhbmQgZmlsdGVyIGJ5IGBzYi1cXHUwMDNlc190eXBlID09IHR5cGVgLCByYXRoZXIgdGhhbiBpdGVyYXRpbmcgYHR5cGUtXFx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBsaXN0IHRyYXZlcnNhbCwgc3luY2hyb25pemF0aW9uLCBhbmQgc3VwZXJibG9jayByZWZlcmVuY2UgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsaXN0IHRyYXZlcnNhbCwgY29uY3VycmVuY3ksIG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgYWRkcmVzc2FibGUgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGUoKWAgaW4gYGZzL3N1cGVyLmNgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGxpc3QgdmlhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFxcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVxcdTAwM2VzX3R5cGUgPT0gdHlwZWAsIHJhdGhlciB0aGFuIGl0ZXJhdGluZyBgdHlwZS1cXHUwMDNlZnNfc3VwZXJzYCB3aXRoIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAuIFRoaXMgZW5zdXJlcyBsaXN0IGN1cnNvciBzYWZldHkgd2hpbGUgYHNiX2xvY2tgIGlzIGRyb3BwZWQgZHVyaW5nIHN1cGVyYmxvY2sgaXRlcmF0aW9uLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGxpc3QgdHJhdmVyc2FsLCBzeW5jaHJvbml6YXRpb24sIGFuZCBzdXBlcmJsb2NrIHJlZmVyZW5jZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxpc3QgdHJhdmVyc2FsLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBhZGRyZXNzYWJsZSBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 01:20:12 +0000 UTC FinishedAt: 2026-09-04 01:38:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "CIFS_DFS_UPCALL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "eb85469f0dd69ca145d63117450e14c31f67f698", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "CIFS_DFS_UPCALL" ], "series_id": "d498d30e-3a53-452b-873f-eb6a3478fd66" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iterate_supers_type", "cifs_get_dfs_tcon_super" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7Q0lGU19ERlNfVVBDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXRlcmF0ZV9zdXBlcnNfdHlwZSYjMzQ7LAogICAgJiMzNDtjaWZzX2dldF9kZnNfdGNvbl9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBWRlMgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaW4gaXRlcmF0ZV9zdXBlcnNfdHlwZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGl0ZXJhdGluZyBvdmVyIHR5cGUtXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmVjMWQ0NDU2ODU2YjdjZmQ2ZjY1MjM4OWMwYzYwYWRjNGIwZDBlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDQgMDE6Mzc6MDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmM4YWNjZDE0NGJhZDIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9zdXBlci5jXG5AQCAtMTAyNiwxMSAmIzQzOzEwMjYsMTggQEAgdm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnkoc2IsIFx1MDAyNnR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIHBhc3NpdmUgcmVmZXJlbmNlIGtlZXBzIHRoZSBzX2xpc3QgY3Vyc29yIHZhbGlkIHdoaWxlIHNiX2xvY2tcbiYjNDM7XHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXG4mIzQzO1x0ICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdCkge1xuIFx0XHRib29sIGxvY2tlZDtcbiBcbiBcdFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG4gXHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRpZiAoc2ItXHUwMDNlc190eXBlICE9IHR5cGUpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzYi1cdTAwM2VzX3Bhc3NpdmUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7Q0lGU19ERlNfVVBDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXRlcmF0ZV9zdXBlcnNfdHlwZSYjMzQ7LAogICAgJiMzNDtjaWZzX2dldF9kZnNfdGNvbl9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBWRlMgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaW4gaXRlcmF0ZV9zdXBlcnNfdHlwZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGl0ZXJhdGluZyBvdmVyIHR5cGUtXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmVjMWQ0NDU2ODU2YjdjZmQ2ZjY1MjM4OWMwYzYwYWRjNGIwZDBlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDE6Mzc6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li5jOGFjY2QxNDRiYWQyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTEwMjYsMTEgJiM0MzsxMDI2LDE4IEBAIHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJmFtcDtzYl9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJmFtcDt0eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrCiYjNDM7CSAqIGlzIGRyb3BwZWQuIEVudHJpZXMgYXJlIGFkZGVkIGF0IHRoZSB0YWlsLiBXYWxrIGJhY2t3YXJkcyB0byByZXRhaW4KJiM0MzsJICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsICZhbXA7c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKIAkJYm9vbCBsb2NrZWQ7CiAKIAkJaWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChzYi0mZ3Q7c190eXBlICE9IHR5cGUpCiYjNDM7CQkJY29udGludWU7CiAKIAkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzYi0mZ3Q7c19wYXNzaXZlKSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gSSBzZWUgYSByZXF1ZXN0IHRvIGV2YWx1YXRlIGEgTGludXgga2VybmVsIHBhdGNoLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHJlbGF0ZWQgdG8gYHN5emthbGxlcmAgZnV6emluZywgd2hpY2ggbWVhbnMgaXQmIzM5O3MgYWJvdXQgaW1wcm92aW5nIHRlc3RpbmcgYW5kIGJ1ZyBkaXNjb3ZlcnkgaW4gdGhlIGtlcm5lbC4gVGhpcyBpcyBhIHN0YW5kYXJkIGRldmVsb3BtZW50IGFuZCBRQSB0YXNrLCBzbyBubyByZWQgZmxhZ3MgdGhlcmUg4oCTIHdlIGNhbiBwcm9jZWVkIGNhdXRpb3VzbHkgYnV0IHNhZmVseS4KCk5vdywgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGZzL3N1cGVyLmNgLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZSBsb29rLCBnaXZlbiBpdHMgY3JpdGljYWwgcm9sZSBpbiB0aGUgZmlsZXN5c3RlbS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgZGlmZiBzaG93cyBjaGFuZ2VzIGFyb3VuZCB0aGUgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBjaGFuZ2luZyB0aGUgaXRlcmF0aW9uIGxvZ2ljIHRocm91Z2ggYSBsaXN0IG9mIHN1cGVyYmxvY2tzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgYnV0IHRoZSBwYXRjaCBpcyByZXBsYWNpbmcgaXQgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYC4gVGhlcmUmIzM5O3MgYSBjb21tZW50IGluZGljYXRpbmcgdGhhdCB0aGlzIGNoYW5nZSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggbWFpbnRhaW5pbmcgY3Vyc29yIHZhbGlkaXR5IHdoaWxlIGRyb3BwaW5nIGBzYl9sb2NrYCBhbmQgd2Fsa2luZyB0aGUgbGlzdCBiYWNrd2FyZCBmb3IgbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uIEFsc28sIHRoZXJlJiMzOTtzIGEgY29uZGl0aW9uYWwgYWRkZWQgdG8gb25seSBwcm9jZXNzIHN1cGVyYmxvY2tzIG9mIHRoZSBjb3JyZWN0IHR5cGUuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpdGVyYXRlX3N1cGVyc190eXBlYCBkb2VzIGFuZCB3aG8gY2FsbHMgaXQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdC4gTGV0JiMzOTtzIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGZzL3N1cGVyLmNgIGFyb3VuZCBsaW5lIDEwMjYgdG8gc2VlIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgdGhlIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGFjY2VzcyBwYXR0ZXJucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGlzIGtleSBoZXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIGlzc3VlcywgYW5kIGFueSBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgaW4gYSBmdXp6aW5nIGNvbnRleHQgd2hlcmUgd2UmIzM5O3JlIHRyeWluZyB0byBzdHJlc3MgdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbXByb3ZlIHRoZSBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpdGVyYXRpb24sIGFuZCB0byBoYW5kbGUgYSByYWNlIGNvbmRpdGlvbiwgc28gdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zdXBlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDE1Olx0ICpcdGl0ZXJhdGVfc3VwZXJzX3R5cGUgLSBjYWxsIGZ1bmN0aW9uIGZvciBzdXBlcmJsb2NrcyBvZiBnaXZlbiB0eXBlXG4xMDE2Olx0ICpcdEB0eXBlOiBmcyB0eXBlXG4xMDE3Olx0ICpcdEBmOiBmdW5jdGlvbiB0byBjYWxsXG4xMDE4Olx0ICpcdEBhcmc6IGFyZ3VtZW50IHRvIHBhc3MgdG8gaXRcbjEwMTk6XHQgKlxuMTAyMDpcdCAqXHRTY2FucyB0aGUgc3VwZXJibG9jayBsaXN0IGFuZCBjYWxscyBnaXZlbiBmdW5jdGlvbiwgcGFzc2luZyBpdFxuMTAyMTpcdCAqXHRsb2NrZWQgc3VwZXJibG9jayBhbmQgZ2l2ZW4gYXJndW1lbnQuXG4xMDIyOlx0ICovXG4xMDIzOlx0dm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxuMTAyNDpcdFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXG4xMDI1Olx0e1xuMTAyNjpcdFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xuMTAyNzpcdFxuMTAyODpcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTAyOTpcdFx0LypcbjEwMzA6XHRcdCAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrXG4xMDMxOlx0XHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXG4xMDMyOlx0XHQgKiBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi5cbjEwMzM6XHRcdCAqL1xuMTAzNDpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdCkge1xuMTAzNTpcdFx0XHRib29sIGxvY2tlZDtcbjEwMzY6XHRcbjEwMzc6XHRcdFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG4xMDM4Olx0XHRcdFx0Y29udGludWU7XG4xMDM5Olx0XHRcdGlmIChzYi1cdTAwM2VzX3R5cGUgIT0gdHlwZSlcbjEwNDA6XHRcdFx0XHRjb250aW51ZTtcbjEwNDE6XHRcbjEwNDI6XHRcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2ItXHUwMDNlc19wYXNzaXZlKSlcbjEwNDM6XHRcdFx0XHRjb250aW51ZTtcbjEwNDQ6XHRcbjEwNDU6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4xMDQ2Olx0XG4xMDQ3Olx0XHRcdGxvY2tlZCA9IHN1cGVyX2xvY2tfc2hhcmVkKHNiKTtcbjEwNDg6XHRcdFx0aWYgKGxvY2tlZCkge1xuMTA0OTpcdFx0XHRcdGYoc2IsIGFyZyk7XG4xMDUwOlx0XHRcdFx0c3VwZXJfdW5sb2NrX3NoYXJlZChzYik7XG4xMDUxOlx0XHRcdH1cbjEwNTI6XHRcbjEwNTM6XHRcdFx0aWYgKHApXG4xMDU0Olx0XHRcdFx0cHV0X3N1cGVyKHApO1xuMTA1NTpcdFx0XHRwID0gc2I7XG4xMDU2Olx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwNTc6XHRcdH1cbjEwNTg6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTA1OTpcdFx0aWYgKHApXG4xMDYwOlx0XHRcdHB1dF9zdXBlcihwKTtcbjEwNjE6XHR9XG4xMDYyOlx0XG4xMDYzOlx0RVhQT1JUX1NZTUJPTChpdGVyYXRlX3N1cGVyc190eXBlKTtcbjEwNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIENhbGxlcnMgb2YgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1c2FnZSBvZiBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0byB0cmFjZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLiBUaGUgZ29hbCBpcyB0byBzZWUgaG93IGl0JiMzOTtzIGJlaW5nICp1c2VkKiAtIHdoYXQmIzM5O3MgdGhlIGNvbnRleHQsIHdoYXQgb3RoZXIgZGF0YSBpcyBpbnZvbHZlZCwgYW5kIHdoYXQmIzM5O3MgdGhlIGludGVuZGVkIHB1cnBvc2Ugb2YgdGhhdCBpdGVyYXRpb24gb3ZlciB0aGUgc3VwZXJ0eXBlcy4gQXJlIHdlIHVzaW5nIGl0IGZvciB0eXBlIGNoZWNraW5nLCBpbmhlcml0YW5jZSBhbmFseXNpcywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgc29saWQgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2FsbCBzaXRlcyB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbuKAmXMgcm9sZSBhbmQgdG8gbWFrZSBlZmZlY3RpdmUgY2hhbmdlcy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGJleW9uZCB0aGUgaW1tZWRpYXRlIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpdGVyYXRlX3N1cGVyc190eXBlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvbWlzYy5jPTg5OT1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICpfX2NpZnNfZ2V0X3N1cGVyKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSxcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTAtXHRmb3IgKDsgKmZzX3R5cGU7IGZzX3R5cGUmIzQzOyYjNDM7KSB7XG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MTE6XHRcdGl0ZXJhdGVfc3VwZXJzX3R5cGUoKmZzX3R5cGUsIGYsIFx1MDAyNnNkKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkxMi1cdFx0aWYgKHNkLnNiKSB7XG4tLVxuZnMvc3VwZXIuYz0xMDA5PXZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXG4tLVxuZnMvc3VwZXIuYy0xMDE0LS8qKlxuZnMvc3VwZXIuYzoxMDE1OiAqXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxuZnMvc3VwZXIuYy0xMDE2LSAqXHRAdHlwZTogZnMgdHlwZVxuLS1cbmZzL3N1cGVyLmMtMTAyMi0gKi9cbmZzL3N1cGVyLmM6MTAyMzp2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXG5mcy9zdXBlci5jLTEwMjQtXHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbi0tXG5mcy9zdXBlci5jLTEwNjItXG5mcy9zdXBlci5jOjEwNjM6RVhQT1JUX1NZTUJPTChpdGVyYXRlX3N1cGVyc190eXBlKTtcbmZzL3N1cGVyLmMtMTA2NC1cbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmg9MzI1Mj1leHRlcm4gdm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZyk7XG5pbmNsdWRlL2xpbnV4L2ZzLmg6MzI1MzpleHRlcm4gdm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICosXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzI1NC1cdFx0XHQgICAgICAgIHZvaWQgKCopKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICopO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwOTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFN1cGVyYmxvY2sgSXRlcmF0aW9uIFNhZmV0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXaGVuIGl0ZXJhdGluZyB0aHJvdWdoIHN1cGVyYmxvY2tzLCBzcGVjaWZpY2FsbHkgd2l0aCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAsIHRoZSBjb2RlIHVzZXMgYHN1cGVyX2Jsb2Nrc2AgaW5zdGVhZCBvZiBkaXJlY3RseSB3YWxraW5nIGB0eXBlLSZndDtmc19zdXBlcnNgLiBUaGUgcmVhc29uIGltbWVkaWF0ZWx5IGNsaWNrczogZHJvcHBpbmcgYHNiX2xvY2tgIHdpdGhpbiB0aGUgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCBsb29wIG9uIGB0eXBlLSZndDtmc19zdXBlcnNgIGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBJZiB0aGUgY3Vyc29yIGlzbiYjMzk7dCBwcm9wZXJseSBwcm90ZWN0ZWQsIG9yIGlmIHRoZSBgc19pbnN0YW5jZXNgIGxpc3QgaXMgYmVpbmcgbW9kaWZpZWQgY29uY3VycmVudGx5LCB3ZSBjb3VsZCBydW4gaW50byBzZXJpb3VzIGlzc3Vlcy4gQnV0IHVzaW5nIHRoZSBgc3VwZXJfYmxvY2tzYCBsaXN0IChgc19saXN0YCkgY2lyY3VtdmVudHMgdGhpcyBjb25jZXJuLiBUaGUgYHBgIHdpdGhpbiB0aGF0IGxpc3Qgb2ZmZXJzIGEgcGFzc2l2ZSByZWZlcmVuY2UsIGFuZCBhIGBwdXRfc3VwZXIocClgIG9wZXJhdGlvbiBvbmx5IGhhcHBlbnMgZHVyaW5nIGRlc3RydWN0aW9uIG9yIHJlbGF0ZWQgZXZlbnRzLiBUaGF0JiMzOTtzIHNpZ25pZmljYW50bHkgc2FmZXIuIFdhaXQgYSBzZWNvbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2ggYW5kIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIEkgc2hvdWxkIGFsc28gcmV2aWV3IGBpdGVyYXRlX3N1cGVyc2AgaW4gYGZzL3N1cGVyLmNgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGdlbmVyYWwgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaXMgc291bmQsIG5vdCBqdXN0IHRoaXMgc3BlY2lmaWMgY2FzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4MDpcdFxuIDk4MTpcdFx0Zm9yIChzYiA9IGZpcnN0X3N1cGVyKGZsYWdzKTtcbiA5ODI6XHRcdCAgICAgIWxpc3RfZW50cnlfaXNfaGVhZChzYiwgXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpO1xuIDk4MzpcdFx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xuIDk4NDpcdFx0XHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcbiA5ODU6XHRcdFx0XHRjb250aW51ZTtcbiA5ODY6XHRcbiA5ODc6XHRcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2ItXHUwMDNlc19wYXNzaXZlKSlcbiA5ODg6XHRcdFx0XHRjb250aW51ZTtcbiA5ODk6XHRcbiA5OTA6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JfbG9jayk7XG4gOTkxOlx0XG4gOTkyOlx0XHRcdGlmIChmbGFncyBcdTAwMjYgU1VQRVJfSVRFUl9VTkxPQ0tFRCkge1xuIDk5MzpcdFx0XHRcdGYoc2IsIGFyZyk7XG4gOTk0Olx0XHRcdH0gZWxzZSBpZiAoc3VwZXJfbG9jayhzYiwgZXhjbCkpIHtcbiA5OTU6XHRcdFx0XHRmKHNiLCBhcmcpO1xuIDk5NjpcdFx0XHRcdHN1cGVyX3VubG9jayhzYiwgZXhjbCk7XG4gOTk3Olx0XHRcdH1cbiA5OTg6XHRcbiA5OTk6XHRcdFx0aWYgKHApXG4xMDAwOlx0XHRcdFx0cHV0X3N1cGVyKHApO1xuMTAwMTpcdFx0XHRwID0gc2I7XG4xMDAyOlx0XHRcdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwMDM6XHRcdH1cbjEwMDQ6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTAwNTpcdFx0aWYgKHApXG4xMDA2Olx0XHRcdHB1dF9zdXBlcihwKTtcbjEwMDc6XHR9XG4xMDA4Olx0XG4xMDA5Olx0dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbjEwMTA6XHR7XG4xMDExOlx0XHRfX2l0ZXJhdGVfc3VwZXJzKGYsIGFyZywgMCk7XG4xMDEyOlx0fVxuMTAxMzpcdFxuMTAxNDpcdC8qKlxuMTAxNTpcdCAqXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxuMTAxNjpcdCAqXHRAdHlwZTogZnMgdHlwZVxuMTAxNzpcdCAqXHRAZjogZnVuY3Rpb24gdG8gY2FsbFxuMTAxODpcdCAqXHRAYXJnOiBhcmd1bWVudCB0byBwYXNzIHRvIGl0XG4xMDE5Olx0ICpcbjEwMjA6XHQgKlx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcbjEwMjE6XHQgKlx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxuMTAyMjpcdCAqL1xuMTAyMzpcdHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbjEwMjQ6XHRcdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMjMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdXBlciBCbG9jayBJdGVyYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkgc2VlIHRoZXkmIzM5O3ZlIHN3YXBwZWQgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIHRvIGl0ZXJhdGUgdGhyb3VnaCBgc3VwZXJfYmxvY2tzYCBpbiByZXZlcnNlIG5vdywgdXNpbmcgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgJmFtcDtzdXBlcl9ibG9ja3MsIHNfbGlzdClgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGNvZGU/IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJiMzOTt0IGp1c3QgYSBkZWFkIGJyYW5jaC4KClJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGF0IGZ1bmN0aW9uIGlzIGluIGBmcy9zdXBlci5jYC4gT2theSwgdGhhdCYjMzk7cyBhIGNvcmUgVkZTIGZpbGUuIFNvIGl0JiMzOTtzIHVzZWQgc29tZXdoZXJlIGluIHRoZSBmaWxlc3lzdGVtIHN0YWNrLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBjYWxsZWQgYnkgQ0lGUy9TTUIsIHNwZWNpZmljYWxseSB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBjaWZzX2dldF9zdXBlcmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBwbGFjZXMgd2l0aGluIHRoZSBrZXJuZWwgb3IgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnRpbmcvb3BlcmF0aW9ucy4KCkFscmlnaHQsIHRoYXQgdGVsbHMgbWUgdGhlIGNoYW5nZSBsaWtlbHkgaGFzIGFuIGVmZmVjdC4gQnV0LCBiZWZvcmUgSSBnZXQgYW55IGZ1cnRoZXIgaW50byB3aGF0IHRoaXMgaW1wYWN0IG1heSBiZSwgSSBuZWVkIHRvIGNoZWNrIGV4YWN0bHkgd2hhdCBpcyBjYWxsaW5nIGBjaWZzX2dldF9zdXBlcmAsIGFuZCBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIFRoZSBjYWxsIGdyYXBoIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSwgYW5kIHdoYXQgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgZGVwZW5kaW5nIG9uIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NpZnNfZ2V0X3N1cGVyfGNpZnNfZ2V0X3N1cGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvbWlzYy5jPTg3Nz1zdGF0aWMgdm9pZCB0Y29uX3N1cGVyX2NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmFyZylcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy04OTgtXG5mcy9zbWIvY2xpZW50L21pc2MuYzo4OTk6c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MDAtXHRcdFx0XHRcdCAgICB2b2lkICpkYXRhKVxuLS1cbmZzL3NtYi9jbGllbnQvbWlzYy5jPTkzMj1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTM5LVx0c3Bpbl91bmxvY2soXHUwMDI2dGNvbi1cdTAwM2V0Y19sb2NrKTtcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjk0MDpcdHJldHVybiBfX2NpZnNfZ2V0X3N1cGVyKHRjb25fc3VwZXJfY2IsIHRjb24pO1xuZnMvc21iL2NsaWVudC9taXNjLmMtOTQxLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5NAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgQ0lGUy9TTUIgYW5kIENvcmUgVkZTIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBDSUZTL1NNQiBvciBERlMgaGVyZSwgb3IgaWYgdGhpcyBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgZnVuY3Rpb24gaXMgc29tZWhvdyBpbnRlZ3JhdGVkIGludG8gdGhlIGNvcmUgVkZTLiBGb3J0dW5hdGVseSwgSSByZW1lbWJlciB0aGF0IGBpdGVyYXRlX3N1cGVyc190eXBlYCBpcyBpbmRlZWQgYW4gZXhwb3J0ZWQgY29yZSBWRlMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBmb3VuZCBpbiBgZnMvc3VwZXIuY2AuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdCwgYnV0IGxldCYjMzk7cyBub3QganVtcCB0byBjb25jbHVzaW9ucy4KCkJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgdGhlIENJRlMvU01CIGZ1bmN0aW9uYWxpdHkgaXRzZWxmIGhhcyBhbnkgQ09ORklHIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudC4gTXkgaW5zdGluY3RzIHRlbGwgbWUgdG8gbG9vayBmb3IgdGhpbmdzIGxpa2UgYENJRlNgIG9yIGBTTUJfQ0xJRU5UYCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEnigJlsbCBzdGFydCBieSBleGFtaW5pbmcgYGZzL3NtYi9jbGllbnQvS2NvbmZpZ2AgYW5kIHRoZSBjb3JyZXNwb25kaW5nIE1ha2VmaWxlIHRvIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IENJRlMvU01CIGlzIGNvbmZpZ3VyZWQgYW5kIHdoZXJlIGl0IHNpdHMgaW4gcmVsYXRpb24gdG8gdGhlIFZGUy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y2lmc19nZXRfZGZzX3Rjb25fc3VwZXImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0zODM9aW50IHNtYjJfcGFyc2VfcXVlcnlfZGlyZWN0b3J5KHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIHN0cnVjdCBrdmVjICpyc3BfaW92LFxuLS1cbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMzg2LVxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDozODc6c3RydWN0IHN1cGVyX2Jsb2NrICpjaWZzX2dldF9kZnNfdGNvbl9zdXBlcihzdHJ1Y3QgY2lmc190Y29uICp0Y29uKTtcbmZzL3NtYi9jbGllbnQvY2lmc3Byb3RvLmgtMzg4LXZvaWQgY2lmc19wdXRfdGNwX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xuLS1cbmZzL3NtYi9jbGllbnQvZGZzLmM9Mzg2PWludCBjaWZzX3RyZWVfY29ubmVjdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uKVxuLS1cbmZzL3NtYi9jbGllbnQvZGZzLmMtNDMyLVxuZnMvc21iL2NsaWVudC9kZnMuYzo0MzM6XHRzYiA9IGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHRjb24pO1xuZnMvc21iL2NsaWVudC9kZnMuYy00MzQtXHRpZiAoIUlTX0VSUihzYikpXG4tLVxuZnMvc21iL2NsaWVudC9taXNjLmM9OTI2PXN0YXRpYyB2b2lkIF9fY2lmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbi0tXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MzEtXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MzI6c3RydWN0IHN1cGVyX2Jsb2NrICpjaWZzX2dldF9kZnNfdGNvbl9zdXBlcihzdHJ1Y3QgY2lmc190Y29uICp0Y29uKVxuZnMvc21iL2NsaWVudC9taXNjLmMtOTMzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUzMgoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNJRlMvREZTIENvbmZpZ3VyYXRpb24gQXVkaXQqKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGBmcy9zbWIvY2xpZW50YCBLY29uZmlnIGZpbGVzLiBNeSBicmFpbiYjMzk7cyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGZvciBDSUZTIGFuZCBERlMgc3VwcG9ydCwgb3Igd2UgY291bGQgYmUgaW4gZm9yIHNvbWUgc2VyaW91cyBoZWFkYWNoZXMgZG93biB0aGUgbGluZS4gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGNsZWFybHkgaWRlbnRpZnkgd2hhdCBvcHRpb25zIGFyZSBlbmFibGVkLCBkaXNhYmxlZCwgYW5kIHdoYXQgdGhlaXIgaW50ZXJkZXBlbmRlbmNpZXMgYXJlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY3Vyc29yeSBnbGFuY2U7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBjb25maWcgb3B0aW9uIGluIGRldGFpbCwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gdGhlIHByb3BlciBvcGVyYXRpb24gb2YgdGhlIFNNQiBjbGllbnQuIExldOKAmXMgbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBjb25maWd1cmVkIGNvcnJlY3RseS4gVGhpcyB3aWxsIHNhdmUgdXMgaXNzdWVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDSUZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXG5mcy9zbWIvY2xpZW50L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo1NDpjb25maWcgQ0lGU19TVEFUUzJcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7RXh0ZW5kZWQgc3RhdGlzdGljc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02Ny1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo2ODpjb25maWcgQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1lcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBsZWdhY3kgc2VydmVycyB3aGljaCB1c2UgbGVzcyBzZWN1cmUgZGlhbGVjdHNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctODItXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctODQtXHRib29sIFwmIzM0O0tlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjkyOmNvbmZpZyBDSUZTX1hBVFRSXG5mcy9zbWIvY2xpZW50L0tjb25maWctOTMtXHRib29sIFwmIzM0O0NJRlMgZXh0ZW5kZWQgYXR0cmlidXRlc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMDYtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTA3OmNvbmZpZyBDSUZTX1BPU0lYXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDtDSUZTIFBPU0lYIEV4dGVuc2lvbnNcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTE4LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMjg6Y29uZmlnIENJRlNfREVCVUcyXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTI5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYWRkaXRpb25hbCBDSUZTIGRlYnVnZ2luZyByb3V0aW5lc1wmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMzgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTM5OmNvbmZpZyBDSUZTX0RFQlVHX0RVTVBfS0VZU1xuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7RHVtcCBlbmNyeXB0aW9uIGtleXMgZm9yIG9mZmxpbmUgZGVjcnlwdGlvbiAoVW5zYWZlKVwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNDgtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNTAtXHRib29sIFwmIzM0O0RGUyBmZWF0dXJlIHN1cHBvcnRcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE2Mjpjb25maWcgQ0lGU19TV05fVVBDQUxMXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYzLVx0Ym9vbCBcJiMzNDtTV04gZmVhdHVyZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE3Mi1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNzM6Y29uZmlnIENJRlNfTkZTRF9FWFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXHRib29sIFwmIzM0O0FsbG93IG5mc2QgdG8gZXhwb3J0IENJRlMgZmlsZSBzeXN0ZW1cJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWc9MTc5PWlmIENJRlNcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTgxOmNvbmZpZyBDSUZTX1NNQl9ESVJFQ1RcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODItXHRib29sIFwmIzM0O1NNQiBEaXJlY3Qgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTAtXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTkxOmNvbmZpZyBDSUZTX0ZTQ0FDSEVcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O1Byb3ZpZGUgQ0lGUyBjbGllbnQgY2FjaGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE5OC1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwMC1cdGJvb2wgXCYjMzQ7U01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcJiMzNDtcbi0tXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIwNzpjb25maWcgQ0lGU19DT01QUkVTU0lPTlxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U01CIG1lc3NhZ2UgY29tcHJlc3Npb24gKEV4cGVyaW1lbnRhbClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc4MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDY1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBJbXBsaWNhdGlvbnMgZm9yIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3ZlIGdvdCBhIHBhdGNoIHRoYXQmIzM5O3MgZnVuZGFtZW50YWxseSBjaGFuZ2luZyBob3cgd2UgaXRlcmF0ZSB0aHJvdWdoIHN1cGVyYmxvY2tzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBjb3JlIFZGUyAoYGZzL3N1cGVyLmNgKS4gU2luY2UgYGZzL3N1cGVyLmNgIGlzIGFsd2F5cyBidWlsdCAoY29yZSBWRlMsIGBvYmoteSAmIzQzOz0gc3VwZXIub2AgaW4gYGZzL01ha2VmaWxlYCksIHdlIGtub3cgdGhpcyBpcyBhIGtleSBhcmVhIHRvIGNvbnNpZGVyLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCB3aGljaCBpcyBhIGZ1bmN0aW9uIGNyaXRpY2FsIGZvciB0cmF2ZXJzaW5nIHRocm91Z2ggdGhlIHN1cGVyYmxvY2sgaW5zdGFuY2VzIG9mIGEgY2VydGFpbiB0eXBlLgoKUHJldmlvdXNseSwgaXQgdXNlZCBhIGhhc2ggbGlzdCwgYW5kIG5vdyBpdCYjMzk7cyBzd2l0Y2hpbmcgdG8gYSByZXZlcnNlIGxpc3QgaXRlcmF0aW9uLiBUaGlzIHN1Z2dlc3RzIGEgcG90ZW50aWFsIGNoYW5nZSBpbiBob3cgdGhlIG5ld2VzdCBzdXBlcmJsb2NrcyBhcmUgaGFuZGxlZC4gVGhlIGxvY2ssIGBzYl9sb2NrYCwgaXMgc3RpbGwgaW52b2x2ZWQsIGJ1dCB0aGUgcGF0Y2ggZGVzY3JpcHRpb24gbWVudGlvbnMgYHNfbGlzdGAgZm9yIHRyYXZlcnNpbmcgYW5kIGEgYHNfcGFzc2l2ZWAgcmVmY291bnQgZm9yIHZhbGlkaXR5IGR1cmluZyBsb2NrIGRyb3BzLgoKTm93LCBsZXQmIzM5O3MgYXNzZXNzIHRoaXMgcGF0Y2ggYmFzZWQgb24gb3VyIGZ1enppbmcgY3JpdGVyaWEuCgoxLiAgKipDb3JlIFN1YnN5c3RlbXM6KiogRGVmaW5pdGVseSB3b3J0aCBsb29raW5nIGF0LiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBWRlMsIHN5bmNocm9uaXphdGlvbi9sb2NraW5nLCBldGMuLCBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzLiBUaGlzIGZpdHMgdGhlIGJpbGwg4oCTIHdlJiMzOTtyZSBjaGFuZ2luZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiwgd2hpY2ggaXMgYSBjb3JlIFZGUyBmdW5jdGlvbi4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC4KCjIuICAqKkZvY3VzIFN5bWJvbHM6KiogVGhlIG1vc3Qgb2J2aW91cyBpcyBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgaXRzZWxmLiBJdCYjMzk7cyBkaXJlY3RseSBtb2RpZmllZCwgYW5kIGl0JiMzOTtzIG5vdCBhIGZ1bmN0aW9uIHRoYXQmIzM5O3MgdWJpcXVpdG91cyBpbiB0aGUgc2Vuc2Ugb2YgYmVpbmcgYSAqYmFzaWMqIGhlbHBlciAobGlrZSBga2ZyZWVgIG9yIGBrbWFsbG9jYCkuIEl0JiMzOTtzIHNwZWNpZmljIHRvIGl0ZXJhdGluZyBzdXBlcmJsb2Nrcy4gSSBjb3VsZCBjb25zaWRlciBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgIG9yIGBfX2NpZnNfZ2V0X3N1cGVyYCBzaW5jZSB0aGV5IGNhbGwgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCBidXQgdGhlIHByaW1hcnkgc3ltYm9sIGlzIGNsZWFybHkgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLiBJdCYjMzk7cyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCYjMzk7cyBkaXJlY3RseSBjaGFuZ2VkLCBhbmQgdGhhdCYjMzk7cyB0aGUgY2xlYXJlc3QgZm9jdXMuCgozLiAgKipFbmFibGVDb25maWdzOioqIFNpbmNlIGBmcy9zdXBlci5jYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gSG93ZXZlciwgaWYgd2Ugd2FudCB0byBleGVyY2lzZSB0aGUgY29kZSBwYXRocyByZWxhdGVkIHRvIHRob3NlIG90aGVyIGZ1bmN0aW9ucywgbGlrZSBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgIG9yIGBfX2NpZnNfZ2V0X3N1cGVyYCB2aWEgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCB3ZSBwcm9iYWJseSBuZWVkIGBDSUZTYCBhbmQgcG90ZW50aWFsbHkgYENJRlNfREZTX1VQQ0FMTGAgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgYnVpbGQgY29uZGl0aW9ucyBmb3IgYGRmcy5jYCBpbiB0aGUgYGZzL3NtYi9jbGllbnQvTWFrZWZpbGVgIHRvIGNvbmZpcm0gdGhlIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGlmIEkgZGVjaWRlIHRvIHB1cnN1ZSB0aG9zZSByZWxhdGVkIGZ1bmN0aW9ucy4gQnV0IGZvciBub3csIGBpdGVyYXRlX3N1cGVyc190eXBlYCBpdHNlbGYgaXMgdGhlIHByaW1hcnkgdGFyZ2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3NtYi9jbGllbnQvTWFrZWZpbGU9MjM9Y2lmcy0kKENPTkZJR19DSUZTX1VQQ0FMTCkgJiM0Mzs9IGNpZnNfc3BuZWdvLm9cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjQtXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlOjI1OmNpZnMtJChDT05GSUdfQ0lGU19ERlNfVVBDQUxMKSAmIzQzOz0gZGZzX2NhY2hlLm8gZGZzLm9cbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQyCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgbWlzYy5vYCBpbiB0aGUgU2FtYmEgQ2xpZW50KioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbWlzYy5vYCBpcyBiZWluZyBjb21waWxlZCBmb3IgdGhlIFNhbWJhIGNsaWVudC4gTXkgZmlyc3Qgc3RlcCBpcyBnb2luZyB0byBiZSB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBgTWFrZWZpbGVgIGZvciB0aGUgYGZzL3NtYi9jbGllbnRgIGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDIwLCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG9iamVjdCBmaWxlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGluc2lnaHQgaW50byBob3cgYG1pc2Mub2AgaXMgYnVpbHQsIGFueSByZWxldmFudCBjb21waWxlciBmbGFncyB0aGF0IGFyZSB1c2VkLCBhbmQgd2hpY2ggb3RoZXIgc291cmNlIGZpbGVzLCBpZiBhbnksIGl0IHJlbGllcyBvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBtYWtlIHRhcmdldCBhbmQgSSBjYW4gcXVpY2tseSBnbGVhbiB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9zbWIvY2xpZW50L01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdCNcbiAgIDM6XHQjIE1ha2VmaWxlIGZvciBMaW51eCBDSUZTL1NNQjIvU01CMyBWRlMgY2xpZW50XG4gICA0Olx0I1xuICAgNTpcdGNjZmxhZ3MteSAmIzQzOz0gLUkkKHNyYylcdFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xuICAgNjpcdG9iai0kKENPTkZJR19DSUZTKSAmIzQzOz0gY2lmcy5vXG4gICA3Olx0XG4gICA4Olx0Y2lmcy15IDo9IHRyYWNlLm8gY2lmc2ZzLm8gY2lmc19kZWJ1Zy5vIGNvbm5lY3QubyBkaXIubyBmaWxlLm8gXFxcbiAgIDk6XHRcdCAgaW5vZGUubyBsaW5rLm8gbWlzYy5vIG5ldG1pc2MubyBzbWJlbmNyeXB0Lm8gdHJhbnNwb3J0Lm8gXFxcbiAgMTA6XHRcdCAgY2FjaGVkX2Rpci5vIGNpZnNfdW5pY29kZS5vIGNpZnNlbmNyeXB0Lm8gXFxcbiAgMTE6XHRcdCAgcmVhZGRpci5vIGlvY3RsLm8gc2Vzcy5vIGV4cG9ydC5vIHVuYy5vIHdpbnVjYXNlLm8gXFxcbiAgMTI6XHRcdCAgc21iMm9wcy5vIHNtYjJtYXBlcnJvci5vIHNtYjJ0cmFuc3BvcnQubyBcXFxuICAxMzpcdFx0ICBzbWIybWlzYy5vIHNtYjJwZHUubyBzbWIyaW5vZGUubyBzbWIyZmlsZS5vIGNpZnNhY2wubyBmc19jb250ZXh0Lm8gXFxcbiAgMTQ6XHRcdCAgZG5zX3Jlc29sdmUubyBjaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vIGFzbjEubyBcXFxuICAxNTpcdFx0ICBuYW1lc3BhY2UubyByZXBhcnNlLm9cbiAgMTY6XHRcbiAgMTc6XHQkKG9iaikvYXNuMS5vOiAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuaFxuICAxODpcdFxuICAxOTpcdCQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vOiAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuYyAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuaFxuICAyMDpcdFxuICAyMTpcdGNpZnMtJChDT05GSUdfQ0lGU19YQVRUUikgJiM0Mzs9IHhhdHRyLm9cbiAgMjI6XHRcbiAgMjM6XHRjaWZzLSQoQ09ORklHX0NJRlNfVVBDQUxMKSAmIzQzOz0gY2lmc19zcG5lZ28ub1xuICAyNDpcdFxuICAyNTpcdGNpZnMtJChDT05GSUdfQ0lGU19ERlNfVVBDQUxMKSAmIzQzOz0gZGZzX2NhY2hlLm8gZGZzLm9cbiAgMjY6XHRcbiAgMjc6XHRjaWZzLSQoQ09ORklHX0NJRlNfU1dOX1VQQ0FMTCkgJiM0Mzs9IG5ldGxpbmsubyBjaWZzX3N3bi5vXG4gIDI4Olx0XG4gIDI5Olx0Y2lmcy0kKENPTkZJR19DSUZTX0ZTQ0FDSEUpICYjNDM7PSBmc2NhY2hlLm9cbiAgMzA6XHRcbiAgMzE6XHRjaWZzLSQoQ09ORklHX0NJRlNfU01CX0RJUkVDVCkgJiM0Mzs9IHNtYmRpcmVjdC5vXG4gIDMyOlx0XG4gIDMzOlx0Y2lmcy0kKENPTkZJR19DSUZTX1JPT1QpICYjNDM7PSBjaWZzcm9vdC5vXG4gIDM0Olx0XG4gIDM1Olx0Y2lmcy0kKENPTkZJR19DSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWSkgJiM0Mzs9IFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDY4CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDM5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBDSUZTIGFuZCBTdXBlcmJsb2NrIEl0ZXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBtaXNjLm9gIGlzIGludm9sdmVkIHdpdGggYGNpZnMteWAsIHNwZWNpZmljYWxseSwgYGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmdseSBjYWxsZWQgYnkgYGZzL3NtYi9jbGllbnQvZGZzLmNgLiBBbmQgdGhhdCBpcyBpdHNlbGYgcGFydCBvZiBhIGBjaWZzLSQoQ09ORklHX0NJRlNfREZTX1VQQ0FMTCkgJiM0Mzs9IGRmc19jYWNoZS5vIGRmcy5vYCBjb25maWd1cmF0aW9uLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcmAgaW4gYG1pc2MuY2AgdGhlbiBjYWxscyBgX19jaWZzX2dldF9zdXBlcmAuCgpTbywgYGRmcy5jYCBjYWxscyBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgLiBBbHJpZ2h0LCB1bmRlcnN0b29kLiBUaGUgY29uZmlndXJhdGlvbnMgYXQgcGxheSBoZXJlIGFyZSBgQ0lGU2AgYW5kIGBDSUZTX0RGU19VUENBTExgLgoKTm93LCBsZXQmIzM5O3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgcmVsZXZhbnQgYEZvY3VzU3ltYm9sc2AuIEkgc2VlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBhbmQgYGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyYCBhcyBjYW5kaWRhdGVzLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBzdXBlcmJsb2NrcyBhcmUgdHJhdmVyc2VkLiBJdCBpcyBpbXBhY3RpbmcgdGhlIFZGUyBjb3JlIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgYSBoaWdoLXZhbHVlIHRhcmdldC4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgbG9ja2luZyBhbmQgaXRlcmF0aW9uIHNlbWFudGljcyBhcm91bmQgc3VwZXJibG9ja3MuIFRoZSBwYXRjaCBzaGlmdHMgdGhlIGl0ZXJhdGlvbiBtZXRob2QsIG1vdmluZyBmcm9tIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgb24gYHR5cGUtJmd0O2ZzX3N1cGVyc2AgdG8gaXRlcmF0aW5nIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBiYWNrd2FyZHMgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCAmYW1wO3N1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlcmluZyBieSBgc2ItJmd0O3NfdHlwZSAhPSB0eXBlYC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGNoYW5nZS4KClllcCwgdGhlIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBzZW1hbnRpY3MgYWNyb3NzIHN1cGVyYmxvY2tzIGluIFZGUyBhcmUgYmVpbmcgYWx0ZXJlZCBoZXJlLCBhbmQgdGhhdCYjMzk7cyBjb3JlIGtlcm5lbCBsb2dpYy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKQWxyaWdodCwgd2l0aCB0aGF0IHZlcmlmaWVkLCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7Q0lGU19ERlNfVVBDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXRlcmF0ZV9zdXBlcnNfdHlwZSYjMzQ7LAogICAgJiMzNDtjaWZzX2dldF9kZnNfdGNvbl9zdXBlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhbHRlcnMgY29yZSBWRlMgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaW4gaXRlcmF0ZV9zdXBlcnNfdHlwZSgpIGJ5IHN3aXRjaGluZyBmcm9tIGl0ZXJhdGluZyBvdmVyIHR5cGUtXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0O0NJRlNfREZTX1VQQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2l0ZXJhdGVfc3VwZXJzX3R5cGUmIzM0OywKICAgICYjMzQ7Y2lmc19nZXRfZGZzX3Rjb25fc3VwZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgVkZTIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljIGluIGl0ZXJhdGVfc3VwZXJzX3R5cGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBpdGVyYXRpbmcgb3ZlciB0eXBlLVx1MDAzZWZzX3N1cGVycyB0byB3YWxraW5nIHRoZSBnbG9iYWwgc3VwZXJfYmxvY2tzIGxpc3QgYmFja3dhcmRzIHdoaWxlIGRyb3BwaW5nIGFuZCByZWFjcXVpcmluZyBzYl9sb2NrLiBUaGlzIG1vZGlmaWVzIHN5bmNocm9uaXphdGlvbiBhbmQgdHJhdmVyc2FsIHNlbWFudGljcyBpbiBhIGNvcmUgVkZTIGhlbHBlciB1c2VkIGR1cmluZyBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgKHN1Y2ggYXMgQ0lGUyBERlMgcmVjb25uZWN0cykuIEZ1enppbmcgaXMgd2FycmFudGVkIHRvIGVuc3VyZSBubyByYWNlIGNvbmRpdGlvbnMgb3IgdHJhdmVyc2FsIGluY29uc2lzdGVuY2llcyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmVjMWQ0NDU2ODU2YjdjZmQ2ZjY1MjM4OWMwYzYwYWRjNGIwZDBlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDQgMDE6Mzc6MDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCAwNWU0NDMxNzMwMzg3Li5jOGFjY2QxNDRiYWQyIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3N1cGVyLmMKQEAgLTEwMjYsMTEgJiM0MzsxMDI2LDE4IEBAIHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7CiAKIAlzcGluX2xvY2soJmFtcDtzYl9sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJmFtcDt0eXBlLSZndDtmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrCiYjNDM7CSAqIGlzIGRyb3BwZWQuIEVudHJpZXMgYXJlIGFkZGVkIGF0IHRoZSB0YWlsLiBXYWxrIGJhY2t3YXJkcyB0byByZXRhaW4KJiM0MzsJICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uCiYjNDM7CSAqLwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsICZhbXA7c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHsKIAkJYm9vbCBsb2NrZWQ7CiAKIAkJaWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpCiAJCQljb250aW51ZTsKJiM0MzsJCWlmIChzYi0mZ3Q7c190eXBlICE9IHR5cGUpCiYjNDM7CQkJY29udGludWU7CiAKIAkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oJmFtcDtzYi0mZ3Q7c19wYXNzaXZlKSkKIAkJCWNvbnRpbnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBmdXp6aW5nLiBJdCYjMzk7cyBtb2RpZnlpbmcgYGZzL3N1cGVyLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdW5jdGlvbi4gRnJvbSB0aGUgZGlmZiwgaXQgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBiZWVuIGEgY2hhbmdlIHRvIGhvdyB0aGUgc3VwZXJibG9ja3MgYXJlIGl0ZXJhdGVkLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgb24gYHR5cGUtJmd0O2ZzX3N1cGVyc2AuIE5vdywgaXQmIzM5O3MgdXNpbmcgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZWAgb24gYHN1cGVyX2Jsb2Nrc2AsIHdpdGggdGhlIGluY2x1c2lvbiBvZiBhIGNoZWNrIGZvciBgc2ItJmd0O3NfdHlwZSA9PSB0eXBlYCBhbmQgc29tZSBraW5kIG9mIHBhc3NpdmUgcmVmZXJlbmNlIG1hbmFnZW1lbnQgdXNpbmcgYHNfcGFzc2l2ZWAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHRoZXkgc3dpdGNoaW5nIGZyb20gYW4gaGxpc3QgdG8gYSBsaXN0PyBJcyBpdCByZWxhdGVkIHRvIHRoZSAmIzM0O25ld2VzdC1maXJzdCB2aXNpdGF0aW9uJiMzNDsgY29tbWVudD8gSXMgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBsb2NraW5nIG9yIGNvbmN1cnJlbmN5IGlzc3VlcywgaGVuY2UgdGhlIHVzZSBvZiBgc19wYXNzaXZlYCBhbmQgZHJvcHBpbmcgYHNiX2xvY2tgIHdpdGhpbiB0aGUgbG9vcD8gVGhpcyBzdWdnZXN0cyBpdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiB0aGUgc3VwZXJibG9jayBpdGVyYXRpb24gcHJvY2VzcywgbGlrZWx5IHRvIGltcHJvdmUgZWl0aGVyIHBlcmZvcm1hbmNlIG9yIGNvcnJlY3RuZXNzIG9yIGJvdGguCgpUaGUgaW1wb3J0YW50IHRoaW5nIGlzOiB3aWxsIHRoaXMgY2hhbmdlIHBvdGVudGlhbGx5IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBzYWZldHkgaXNzdWVzIHRoYXQgS01TQU4gY291bGQgY2F0Y2g/IFRoZSBmYWN0IHRoYXQgYSAmIzM0O3Bhc3NpdmUgcmVmZXJlbmNlJiMzNDsgaXMgYmVpbmcgdXNlZCBhbmQgdGhhdCB0aGVyZSBhcmUgZXhwbGljaXQgY2hlY2tzIGZvciBgU0JfRFlJTkdgIGFuZCB0eXBlIG1pc21hdGNoIGhpbnRzIGF0IHRoaXMgcHJvY2VzcyBiZWluZyBmYWlybHkgY29tcGxleC4gSSBzaG91bGQgYW5hbHl6ZSB3aGF0IGhhcHBlbnMgaWYgYHJlZmNvdW50X2luY19ub3RfemVyb2AgcmV0dXJucyB6ZXJvLCBpcyB0aGlzIHBhdGggYmVpbmcgY292ZXJlZCBieSBvdGhlciBleGlzdGluZyBzYW5pdGl6ZXJzPwoKSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAwMTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3N1cGVyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMjA6XHQgKlx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcbjEwMjE6XHQgKlx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxuMTAyMjpcdCAqL1xuMTAyMzpcdHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbjEwMjQ6XHRcdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxuMTAyNTpcdHtcbjEwMjY6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsICpwID0gTlVMTDtcbjEwMjc6XHRcbjEwMjg6XHRcdHNwaW5fbG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwMjk6XHRcdC8qXG4xMDMwOlx0XHQgKiBUaGUgcGFzc2l2ZSByZWZlcmVuY2Uga2VlcHMgdGhlIHNfbGlzdCBjdXJzb3IgdmFsaWQgd2hpbGUgc2JfbG9ja1xuMTAzMTpcdFx0ICogaXMgZHJvcHBlZC4gRW50cmllcyBhcmUgYWRkZWQgYXQgdGhlIHRhaWwuIFdhbGsgYmFja3dhcmRzIHRvIHJldGFpblxuMTAzMjpcdFx0ICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uXG4xMDMzOlx0XHQgKi9cbjEwMzQ6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHtcbjEwMzU6XHRcdFx0Ym9vbCBsb2NrZWQ7XG4xMDM2Olx0XG4xMDM3Olx0XHRcdGlmIChzdXBlcl9mbGFncyhzYiwgU0JfRFlJTkcpKVxuMTAzODpcdFx0XHRcdGNvbnRpbnVlO1xuMTAzOTpcdFx0XHRpZiAoc2ItXHUwMDNlc190eXBlICE9IHR5cGUpXG4xMDQwOlx0XHRcdFx0Y29udGludWU7XG4xMDQxOlx0XG4xMDQyOlx0XHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNnNiLVx1MDAzZXNfcGFzc2l2ZSkpXG4xMDQzOlx0XHRcdFx0Y29udGludWU7XG4xMDQ0Olx0XG4xMDQ1Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuMTA0NjpcdFxuMTA0NzpcdFx0XHRsb2NrZWQgPSBzdXBlcl9sb2NrX3NoYXJlZChzYik7XG4xMDQ4Olx0XHRcdGlmIChsb2NrZWQpIHtcbjEwNDk6XHRcdFx0XHRmKHNiLCBhcmcpO1xuMTA1MDpcdFx0XHRcdHN1cGVyX3VubG9ja19zaGFyZWQoc2IpO1xuMTA1MTpcdFx0XHR9XG4xMDUyOlx0XG4xMDUzOlx0XHRcdGlmIChwKVxuMTA1NDpcdFx0XHRcdHB1dF9zdXBlcihwKTtcbjEwNTU6XHRcdFx0cCA9IHNiO1xuMTA1NjpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4xMDU3Olx0XHR9XG4xMDU4Olx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwNTk6XHRcdGlmIChwKVxuMTA2MDpcdFx0XHRwdXRfc3VwZXIocCk7XG4xMDYxOlx0fVxuMTA2MjpcdFxuMTA2MzpcdEVYUE9SVF9TWU1CT0woaXRlcmF0ZV9zdXBlcnNfdHlwZSk7XG4xMDY0Olx0XG4xMDY1Olx0c3RydWN0IHN1cGVyX2Jsb2NrICp1c2VyX2dldF9zdXBlcihkZXZfdCBkZXYsIGJvb2wgZXhjbClcbjEwNjY6XHR7XG4xMDY3Olx0XHRzdHJ1Y3Qgc3VwZXJfZGV2ICpzYl9kZXY7XG4xMDY4Olx0XG4xMDY5Olx0XHRmb3IgKHNiX2RldiA9IHN1cGVyX2Rldl9maXJzdChkZXYpOyBzYl9kZXY7IHNiX2RldiA9IHN1cGVyX2Rldl9uZXh0KHNiX2RldikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY3NAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyB0YXNrLCBhcyBpZiB0aGVzZSB3ZXJlIG15IGludGVybmFsIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIGBpdGVyYXRlX3N1cGVyc190eXBlYCoqCgpSaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIE15IGZpcnN0IHN0ZXAgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvZiBpdHMgcmVjZW50IGhpc3RvcnkgYW5kIHVzYWdlLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY29kZWJhc2UuIFdoZXJlJiMzOTtzIGl0IHVzZWQ/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHMgY2FsbCBpdD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBwYXR0ZXJuIG9yIGFsZ29yaXRobT8gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGxvb2tpbmcgYXQgdGhlIGRpcmVjdCBjYWxsZXJzLgoKVGhlbiwgaWYgdGhhdCBkb2VzbiYjMzk7dCBpbW1lZGlhdGVseSBzaGVkIGVub3VnaCBsaWdodCwgb3IgaWYgSSB3YW50IHRvIGRpZyBkZWVwZXIgaW50byB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgZnVuY3Rpb24sIEkmIzM5O2xsIG1vdmUgb24gdG8gc291cmNlIGNvbnRyb2wuIEkmIzM5O2xsIGVpdGhlciB1c2UgYGdpdCBibGFtZWAgb3IgYSBtb3JlIGdlbmVyYWwgYGdpdCBsb2dgIHNlYXJjaCwgcGVyaGFwcyBjb21iaW5lZCB3aXRoIGBncmVwYCwgbG9va2luZyBmb3IgYW55IG1lbnRpb25zIG9mIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBleGlzdHMsIGFueSBtYWpvciBjaGFuZ2VzIGl0JiMzOTtzIHVuZGVyZ29uZSwgYW5kIHdobyYjMzk7cyBiZWVuIGludGVyYWN0aW5nIHdpdGggaXQuIFRoZSBoaXN0b3J5IGNvdWxkIGJlIHF1aXRlIHJldmVhbGluZzsgaXQgbWlnaHQgc2hvdyBwYXN0IGJ1Z3Mgb3Igb3B0aW1pemF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB3aGF0IEkmIzM5O20gbG9va2luZyBhdCB0b2RheS4gVGhpcyBhbHNvIGhlbHBzIHRvIGVzdGFibGlzaCBjb250ZXh0IGlmIEkmIzM5O20gbm90IGZhbWlsaWFyIHdpdGggdGhlIGNvZGUgaW4gcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l0ZXJhdGVfc3VwZXJzX3R5cGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvc21iL2NsaWVudC9taXNjLmM9ODk5PXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKl9fY2lmc19nZXRfc3VwZXIodm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLFxuLS1cbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkxMC1cdGZvciAoOyAqZnNfdHlwZTsgZnNfdHlwZSYjNDM7JiM0MzspIHtcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkxMTpcdFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSgqZnNfdHlwZSwgZiwgXHUwMDI2c2QpO1xuZnMvc21iL2NsaWVudC9taXNjLmMtOTEyLVx0XHRpZiAoc2Quc2IpIHtcbi0tXG5mcy9zdXBlci5jPTEwMDk9dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbi0tXG5mcy9zdXBlci5jLTEwMTQtLyoqXG5mcy9zdXBlci5jOjEwMTU6ICpcdGl0ZXJhdGVfc3VwZXJzX3R5cGUgLSBjYWxsIGZ1bmN0aW9uIGZvciBzdXBlcmJsb2NrcyBvZiBnaXZlbiB0eXBlXG5mcy9zdXBlci5jLTEwMTYtICpcdEB0eXBlOiBmcyB0eXBlXG4tLVxuZnMvc3VwZXIuYy0xMDIyLSAqL1xuZnMvc3VwZXIuYzoxMDIzOnZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcbmZzL3N1cGVyLmMtMTAyNC1cdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxuLS1cbmZzL3N1cGVyLmMtMTA2Mi1cbmZzL3N1cGVyLmM6MTA2MzpFWFBPUlRfU1lNQk9MKGl0ZXJhdGVfc3VwZXJzX3R5cGUpO1xuZnMvc3VwZXIuYy0xMDY0LVxuLS1cbmluY2x1ZGUvbGludXgvZnMuaD0zMjUyPWV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKTtcbmluY2x1ZGUvbGludXgvZnMuaDozMjUzOmV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKixcbmluY2x1ZGUvbGludXgvZnMuaC0zMjU0LVx0XHRcdCAgICAgICAgdm9pZCAoKikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgQ29kZSBTdHJ1Y3R1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBpdGVyYXRlX3N1cGVyc2AgYW5kIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGltbWVkaWF0ZSBzdXJyb3VuZGluZyBjb2RlLCBpbiB0aGlzIGNhc2UsIHRoZSBsaW5lIGRpcmVjdGx5IGFib3ZlIGBpdGVyYXRlX3N1cGVyc190eXBlYCwgd2hpY2ggc2hvdWxkIGJlIGBpdGVyYXRlX3N1cGVyc2AuIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQsIGFzIG9mdGVuIHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGNsb3NlIHRvIGVhY2ggb3RoZXIsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggaW5oZXJpdGFuY2Ugb3IgdHlwZSBoaWVyYXJjaGllcyDigJMgd2hpY2ggaXMgd2hhdCB0aGVzZSBuYW1lcyBhcmUgaGVhdmlseSBzdWdnZXN0aW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoYXQmIzM5O3Mgd2hlcmUgSSBjYW4gZmluZCB0aGUgY29ubmVjdGlvbiwgb3Igd2hldGhlciB0aGUgcmVsYXRpb25zaGlwIGlzIG1vcmUgY29tcGxleCB0aGFuIGEgc2ltcGxlIGRlZmluaXRpb24gb3JkZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvc3VwZXIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTkwOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiX2xvY2spO1xuIDk5MTpcdFxuIDk5MjpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IFNVUEVSX0lURVJfVU5MT0NLRUQpIHtcbiA5OTM6XHRcdFx0XHRmKHNiLCBhcmcpO1xuIDk5NDpcdFx0XHR9IGVsc2UgaWYgKHN1cGVyX2xvY2soc2IsIGV4Y2wpKSB7XG4gOTk1Olx0XHRcdFx0ZihzYiwgYXJnKTtcbiA5OTY6XHRcdFx0XHRzdXBlcl91bmxvY2soc2IsIGV4Y2wpO1xuIDk5NzpcdFx0XHR9XG4gOTk4Olx0XG4gOTk5Olx0XHRcdGlmIChwKVxuMTAwMDpcdFx0XHRcdHB1dF9zdXBlcihwKTtcbjEwMDE6XHRcdFx0cCA9IHNiO1xuMTAwMjpcdFx0XHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4xMDAzOlx0XHR9XG4xMDA0Olx0XHRzcGluX3VubG9jayhcdTAwMjZzYl9sb2NrKTtcbjEwMDU6XHRcdGlmIChwKVxuMTAwNjpcdFx0XHRwdXRfc3VwZXIocCk7XG4xMDA3Olx0fVxuMTAwODpcdFxuMTAwOTpcdHZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXG4xMDEwOlx0e1xuMTAxMTpcdFx0X19pdGVyYXRlX3N1cGVycyhmLCBhcmcsIDApO1xuMTAxMjpcdH1cbjEwMTM6XHRcbjEwMTQ6XHQvKipcbjEwMTU6XHQgKlx0aXRlcmF0ZV9zdXBlcnNfdHlwZSAtIGNhbGwgZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2tzIG9mIGdpdmVuIHR5cGVcbjEwMTY6XHQgKlx0QHR5cGU6IGZzIHR5cGVcbjEwMTc6XHQgKlx0QGY6IGZ1bmN0aW9uIHRvIGNhbGxcbjEwMTg6XHQgKlx0QGFyZzogYXJndW1lbnQgdG8gcGFzcyB0byBpdFxuMTAxOTpcdCAqXG4xMDIwOlx0ICpcdFNjYW5zIHRoZSBzdXBlcmJsb2NrIGxpc3QgYW5kIGNhbGxzIGdpdmVuIGZ1bmN0aW9uLCBwYXNzaW5nIGl0XG4xMDIxOlx0ICpcdGxvY2tlZCBzdXBlcmJsb2NrIGFuZCBnaXZlbiBhcmd1bWVudC5cbjEwMjI6XHQgKi9cbjEwMjM6XHR2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXG4xMDI0Olx0XHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMDE6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE0NwoJCQkJCQkJb3V0cHV0OiAyMDEKCQkJCQkJCXRob3VnaHRzOiA2NTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBDaGFuZ2UqKgoKT2theSwgc28gSSBzZWUgdGhleSYjMzk7dmUgY2hhbmdlZCBob3cgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIHdvcmtzLiBQcmV2aW91c2x5LCBpdCB1c2VkIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgdG8gaXRlcmF0ZSB0aHJvdWdoIGB0eXBlLSZndDtmc19zdXBlcnNgLiBUaGUgaXNzdWUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXMgdGhhdCB0aGUgYHNiX2xvY2tgIHdhcyBiZWluZyBkcm9wcGVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCB3aGlsZSBgcGAgaGFkIGEgcGFzc2l2ZSByZWZlcmVuY2UuIEkgcmVtZW1iZXIgdGhpcyBwYXR0ZXJuOyBpdOKAmXMgcmlza3kgd2l0aCBgaGxpc3RgIGJlY2F1c2UgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGNhbiBjb3JydXB0IHRoZSB0cmF2ZXJzYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBvbGQgY29kZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNoYW5nZS4KCkJ1dCB3YWl0LCBJIHNlZSB0aGF0IGBfX2l0ZXJhdGVfc3VwZXJzYCB1c2VzIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2VgIG9uIHRoZSBnbG9iYWwgYHN1cGVyX2Jsb2Nrc2AgbGlzdCwgaXRlcmF0aW5nIHZpYSB0aGUgYHNfbGlzdGAgZmllbGQsIG5vdCB0aGUgYHNfaW5zdGFuY2VzYCBobGlzdC4gU28gdGhlIG5ldyBjaGFuZ2UgdG8gdXNlIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsICZhbXA7c3VwZXJfYmxvY2tzLCBzX2xpc3QpYCBhbmQgZmlsdGVyIGJ5IGBzYi0mZ3Q7c190eXBlICE9IHR5cGVgIGlzIGFjdHVhbGx5IG1ha2luZyBpdCAqY29uc2lzdGVudCogd2l0aCB0aGUgc2FmZSBpdGVyYXRpb24gaW4gYF9faXRlcmF0ZV9zdXBlcnNgLiBUaGlzIHNlZW1zIHJpZ2h0LiBJdOKAmXMgcHJvdGVjdGluZyB0aGUgaXRlcmF0aW9uIGJ5IGVuc3VyaW5nIHRoZSBsaXN0IGRvZXNu4oCZdCBjaGFuZ2UsIG9yIHRoZSBjdXJzb3IgaXMgbWFpbnRhaW5lZCBieSB1c2luZyBgc19wYXNzaXZlYCBwcm9wZXJseSwgb3Igc2FmZSBpdGVyYXRpb24gb2YgdGhlIGhsaXN0IHdoZW4gdGhlIGxvY2sgaXMgZHJvcHBlZC4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIEtNU0FOIGNvbmNlcm5zLgoKRmlyc3QsIGRvZXMgdGhpcyBjaGFuZ2UgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRlIHBhZGRpbmcgbGVha3M/IE5vcGUuIFRoaXMgaXMganVzdCBhbiBpdGVyYXRpb24gYW5kIGxvY2tpbmcgZml4LiBObyBuZXcgYWxsb2NhdGlvbnMsIG5vIG5ldyBpbml0aWFsaXphdGlvbiBjb2RlLCBubyBuZXcgc3RydWN0IGRlZmluaXRpb25zLgoKU2Vjb25kLCBjb3VsZCB0aGUgcGF0Y2ggcmVhZCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLiBUaGUgY29kZSB1c2VzIGBzYmAsIHdoaWNoIGlzIGluaXRpYWxpemVkLiBgc2ItJmd0O3NfdHlwZWAgaXMgYWxzbyBpbml0aWFsaXplZC4KClRoaXJkLCB3aGF0IHBvdGVudGlhbCBidWdzIGRvZXMgaXQgZml4PyBXZWxsLCBiYXNlZCBvbiB3aGF0IEkgc2VlIGl0IGlzIGF2b2lkaW5nIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIGxpc3QgY29ycnVwdGlvbiwgaXRlcmF0b3IgaW52YWxpZGF0aW9uLCBhbmQgcmFjZSBjb25kaXRpb25zLCBhbGwgcmVsYXRlZCB0byB0aGUgbG9ja2luZyBhbmQgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIGxpc3QuIFNvdW5kcyBsaWtlIGl0IHNob3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuCgpGaW5hbGx5LCBpcyB0aGVyZSBhbnkgY2hhbmNlIG9mIHVzZXItc3BhY2UgY29waWVzLCB1bmluaXRpYWxpemVkIGJ1ZmZlcnMsIG9yIGluZm9ybWF0aW9uIGxlYWtzPyBBYnNvbHV0ZWx5IG5vdC4gVGhpcyBjaGFuZ2UgaXMgZW50aXJlbHkgd2l0aGluIGtlcm5lbCBzcGFjZSBhbmQgZGVhbHMgd2l0aCBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuCgpTbywgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMgZHVyaW5nIGxpc3QgdHJhdmVyc2FsLCBub3QgbWVtb3J5IGluaXRpYWxpemF0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlLiBLQVNBTiBhbmQgTE9DS0RFUCB3aWxsIGNvdmVyIHRob3NlIGNvbmN1cnJlbmN5IGFuZCBsb2NrIGlzc3Vlcy4KCkkmIzM5O20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC4gQWxsIHRoZSBjcml0ZXJpYSBjaGVjayBvdXQuIFRpbWUgdG8gc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDAxOjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cblxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGUoKWAgaW4gYGZzL3N1cGVyLmNgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGxpc3QgdmlhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlciBieSBgc2ItXHUwMDNlc190eXBlID09IHR5cGVgLCByYXRoZXIgdGhhbiBpdGVyYXRpbmcgYHR5cGUtXHUwMDNlZnNfc3VwZXJzYCB3aXRoIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAuIFRoaXMgZW5zdXJlcyBsaXN0IGN1cnNvciBzYWZldHkgd2hpbGUgYHNiX2xvY2tgIGlzIGRyb3BwZWQgZHVyaW5nIHN1cGVyYmxvY2sgaXRlcmF0aW9uLlxuXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBsaXN0IHRyYXZlcnNhbCwgc3luY2hyb25pemF0aW9uLCBhbmQgc3VwZXJibG9jayByZWZlcmVuY2UgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsaXN0IHRyYXZlcnNhbCwgY29uY3VycmVuY3ksIG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgYWRkcmVzc2FibGUgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBub3QgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjA5Ljg5OTczOTcyM1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2ODA2ODc1MjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIkNJRlNfREZTX1VQQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml0ZXJhdGVfc3VwZXJzX3R5cGVcIixcbiAgICBcImNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaXRlcmF0ZV9zdXBlcnNfdHlwZSgpYCBpbiBgZnMvc3VwZXIuY2AgdG8gaXRlcmF0ZSBvdmVyIHRoZSBnbG9iYWwgYHN1cGVyX2Jsb2Nrc2AgbGlzdCB2aWEgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlciBieSBgc2ItXFx1MDAzZXNfdHlwZSA9PSB0eXBlYCwgcmF0aGVyIHRoYW4gaXRlcmF0aW5nIGB0eXBlLVxcdTAwM2Vmc19zdXBlcnNgIHdpdGggYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YC4gVGhpcyBlbnN1cmVzIGxpc3QgY3Vyc29yIHNhZmV0eSB3aGlsZSBgc2JfbG9ja2AgaXMgZHJvcHBlZCBkdXJpbmcgc3VwZXJibG9jayBpdGVyYXRpb24uXFxuXFxuVGhpcyBjaGFuZ2UgcHVyZWx5IGFmZmVjdHMgbGlzdCB0cmF2ZXJzYWwsIHN5bmNocm9uaXphdGlvbiwgYW5kIHN1cGVyYmxvY2sgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIHN0cnVjdHVyZSBwYWRkaW5nLCBvciBrZXJuZWwtdG8tdXNlciBjb3BpZXMuIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdpdGggbGlzdCB0cmF2ZXJzYWwsIGNvbmN1cnJlbmN5LCBvciByZWZlcmVuY2UgY291bnRpbmcgYXJlIGFkZHJlc3NhYmxlIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scywgbm90IEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBjb3JlIFZGUyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiBsb2dpYyBpbiBpdGVyYXRlX3N1cGVyc190eXBlKCkgYnkgc3dpdGNoaW5nIGZyb20gaXRlcmF0aW5nIG92ZXIgdHlwZS1cXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzowOS44OTk3NDU4OTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyODUzOTQzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJlYzFkNDQ1Njg1NmI3Y2ZkNmY2NTIzODljMGM2MGFkYzRiMGQwZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBTZXAgNCAwMTozNzowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuY1xcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmM4YWNjZDE0NGJhZDIgMTAwNjQ0XFxuLS0tIGEvZnMvc3VwZXIuY1xcbisrKyBiL2ZzL3N1cGVyLmNcXG5AQCAtMTAyNiwxMSArMTAyNiwxOCBAQCB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXFxuIFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsICpwID0gTlVMTDtcXG4gXFxuIFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuLVxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHNiLCBcXHUwMDI2dHlwZS1cXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xcbitcXHQvKlxcbitcXHQgKiBUaGUgcGFzc2l2ZSByZWZlcmVuY2Uga2VlcHMgdGhlIHNfbGlzdCBjdXJzb3IgdmFsaWQgd2hpbGUgc2JfbG9ja1xcbitcXHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXFxuK1xcdCAqIG5ld2VzdC1maXJzdCB2aXNpdGF0aW9uLlxcbitcXHQgKi9cXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHtcXG4gXFx0XFx0Ym9vbCBsb2NrZWQ7XFxuIFxcbiBcXHRcXHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGlmIChzYi1cXHUwMDNlc190eXBlICE9IHR5cGUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNiLVxcdTAwM2VzX3Bhc3NpdmUpKVxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6MTAuMzI5NDAyODE0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NzE5NzA3NjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCIsXG4gICAgXCJDSUZTX0RGU19VUENBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpdGVyYXRlX3N1cGVyc190eXBlXCIsXG4gICAgXCJjaWZzX2dldF9kZnNfdGNvbl9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBjb3JlIFZGUyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiBsb2dpYyBpbiBpdGVyYXRlX3N1cGVyc190eXBlKCkgYnkgc3dpdGNoaW5nIGZyb20gaXRlcmF0aW5nIG92ZXIgdHlwZS1cXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJlYzFkNDQ1Njg1NmI3Y2ZkNmY2NTIzODljMGM2MGFkYzRiMGQwZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDAxOjM3OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmNcbmluZGV4IDA1ZTQ0MzE3MzAzODcuLmM4YWNjZDE0NGJhZDIgMTAwNjQ0XG4tLS0gYS9mcy9zdXBlci5jXG4rKysgYi9mcy9zdXBlci5jXG5AQCAtMTAyNiwxMSArMTAyNiwxOCBAQCB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXG4gXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCAqcCA9IE5VTEw7XG4gXG4gXHRzcGluX2xvY2soXHUwMDI2c2JfbG9jayk7XG4tXHRobGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgXHUwMDI2dHlwZS1cdTAwM2Vmc19zdXBlcnMsIHNfaW5zdGFuY2VzKSB7XG4rXHQvKlxuK1x0ICogVGhlIHBhc3NpdmUgcmVmZXJlbmNlIGtlZXBzIHRoZSBzX2xpc3QgY3Vyc29yIHZhbGlkIHdoaWxlIHNiX2xvY2tcbitcdCAqIGlzIGRyb3BwZWQuIEVudHJpZXMgYXJlIGFkZGVkIGF0IHRoZSB0YWlsLiBXYWxrIGJhY2t3YXJkcyB0byByZXRhaW5cbitcdCAqIG5ld2VzdC1maXJzdCB2aXNpdGF0aW9uLlxuK1x0ICovXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7XG4gXHRcdGJvb2wgbG9ja2VkO1xuIFxuIFx0XHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcbiBcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKHNiLVx1MDAzZXNfdHlwZSAhPSB0eXBlKVxuK1x0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZzYi1cdTAwM2VzX3Bhc3NpdmUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6MTAuMzI5NDA1NjQ0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTI3ODQwMjUzNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTGludXggS2VybmVsIFBhdGNoIGZvciBTeXprYWxsZXIgRnV6emluZyoqXG5cbk9rYXksIHNvIEkgc2VlIGEgcmVxdWVzdCB0byBldmFsdWF0ZSBhIExpbnV4IGtlcm5lbCBwYXRjaC4gU3BlY2lmaWNhbGx5LCBpdCdzIHJlbGF0ZWQgdG8gYHN5emthbGxlcmAgZnV6emluZywgd2hpY2ggbWVhbnMgaXQncyBhYm91dCBpbXByb3ZpbmcgdGVzdGluZyBhbmQgYnVnIGRpc2NvdmVyeSBpbiB0aGUga2VybmVsLiBUaGlzIGlzIGEgc3RhbmRhcmQgZGV2ZWxvcG1lbnQgYW5kIFFBIHRhc2ssIHNvIG5vIHJlZCBmbGFncyB0aGVyZSDigJMgd2UgY2FuIHByb2NlZWQgY2F1dGlvdXNseSBidXQgc2FmZWx5LlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJdCdzIG1vZGlmeWluZyBgZnMvc3VwZXIuY2AsIHdoaWNoIGFsd2F5cyB3YXJyYW50cyBhIGNsb3NlIGxvb2ssIGdpdmVuIGl0cyBjcml0aWNhbCByb2xlIGluIHRoZSBmaWxlc3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyBhcm91bmQgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBjaGFuZ2luZyB0aGUgaXRlcmF0aW9uIGxvZ2ljIHRocm91Z2ggYSBsaXN0IG9mIHN1cGVyYmxvY2tzLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgdXNpbmcgYGhsaXN0X2Zvcl9lYWNoX2VudHJ5YCwgYnV0IHRoZSBwYXRjaCBpcyByZXBsYWNpbmcgaXQgd2l0aCBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYC4gVGhlcmUncyBhIGNvbW1lbnQgaW5kaWNhdGluZyB0aGF0IHRoaXMgY2hhbmdlIGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBtYWludGFpbmluZyBjdXJzb3IgdmFsaWRpdHkgd2hpbGUgZHJvcHBpbmcgYHNiX2xvY2tgIGFuZCB3YWxraW5nIHRoZSBsaXN0IGJhY2t3YXJkIGZvciBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi4gQWxzbywgdGhlcmUncyBhIGNvbmRpdGlvbmFsIGFkZGVkIHRvIG9ubHkgcHJvY2VzcyBzdXBlcmJsb2NrcyBvZiB0aGUgY29ycmVjdCB0eXBlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBpdGVyYXRlX3N1cGVyc190eXBlYCBkb2VzIGFuZCB3aG8gY2FsbHMgaXQgdG8gZnVsbHkgZ3Jhc3AgdGhlIGltcGFjdC4gTGV0J3MgcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZnMvc3VwZXIuY2AgYXJvdW5kIGxpbmUgMTAyNiB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB0aGUgY29udGV4dC4gVW5kZXJzdGFuZGluZyB0aGUgYWNjZXNzIHBhdHRlcm5zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaXMga2V5IGhlcmUuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBpc3N1ZXMsIGFuZCBhbnkgaW1wYWN0IG9uIHBlcmZvcm1hbmNlLCBlc3BlY2lhbGx5IGluIGEgZnV6emluZyBjb250ZXh0IHdoZXJlIHdlJ3JlIHRyeWluZyB0byBzdHJlc3MgdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBvZiB0aGlzIGNoYW5nZSBpcyB0byBpbXByb3ZlIHRoZSBzeW5jaHJvbml6YXRpb24gb2Ygc3VwZXJibG9jayBpdGVyYXRpb24sIGFuZCB0byBoYW5kbGUgYSByYWNlIGNvbmRpdGlvbiwgc28gdGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyMy4xMTM0MzQxMTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDE1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDE1OlxcdCAqXFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSAtIGNhbGwgZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2tzIG9mIGdpdmVuIHR5cGVcXG4xMDE2OlxcdCAqXFx0QHR5cGU6IGZzIHR5cGVcXG4xMDE3OlxcdCAqXFx0QGY6IGZ1bmN0aW9uIHRvIGNhbGxcXG4xMDE4OlxcdCAqXFx0QGFyZzogYXJndW1lbnQgdG8gcGFzcyB0byBpdFxcbjEwMTk6XFx0ICpcXG4xMDIwOlxcdCAqXFx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcXG4xMDIxOlxcdCAqXFx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxcbjEwMjI6XFx0ICovXFxuMTAyMzpcXHR2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXFxuMTAyNDpcXHRcXHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4xMDI1OlxcdHtcXG4xMDI2OlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsICpwID0gTlVMTDtcXG4xMDI3OlxcdFxcbjEwMjg6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDI5OlxcdFxcdC8qXFxuMTAzMDpcXHRcXHQgKiBUaGUgcGFzc2l2ZSByZWZlcmVuY2Uga2VlcHMgdGhlIHNfbGlzdCBjdXJzb3IgdmFsaWQgd2hpbGUgc2JfbG9ja1xcbjEwMzE6XFx0XFx0ICogaXMgZHJvcHBlZC4gRW50cmllcyBhcmUgYWRkZWQgYXQgdGhlIHRhaWwuIFdhbGsgYmFja3dhcmRzIHRvIHJldGFpblxcbjEwMzI6XFx0XFx0ICogbmV3ZXN0LWZpcnN0IHZpc2l0YXRpb24uXFxuMTAzMzpcXHRcXHQgKi9cXG4xMDM0OlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7XFxuMTAzNTpcXHRcXHRcXHRib29sIGxvY2tlZDtcXG4xMDM2OlxcdFxcbjEwMzc6XFx0XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXFxuMTAzODpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDM5OlxcdFxcdFxcdGlmIChzYi1cXHUwMDNlc190eXBlICE9IHR5cGUpXFxuMTA0MDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDQxOlxcdFxcbjEwNDI6XFx0XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNiLVxcdTAwM2VzX3Bhc3NpdmUpKVxcbjEwNDM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMTA0NDpcXHRcXG4xMDQ1OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0XFx0bG9ja2VkID0gc3VwZXJfbG9ja19zaGFyZWQoc2IpO1xcbjEwNDg6XFx0XFx0XFx0aWYgKGxvY2tlZCkge1xcbjEwNDk6XFx0XFx0XFx0XFx0ZihzYiwgYXJnKTtcXG4xMDUwOlxcdFxcdFxcdFxcdHN1cGVyX3VubG9ja19zaGFyZWQoc2IpO1xcbjEwNTE6XFx0XFx0XFx0fVxcbjEwNTI6XFx0XFxuMTA1MzpcXHRcXHRcXHRpZiAocClcXG4xMDU0OlxcdFxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDU1OlxcdFxcdFxcdHAgPSBzYjtcXG4xMDU2OlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTA1NzpcXHRcXHR9XFxuMTA1ODpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTA1OTpcXHRcXHRpZiAocClcXG4xMDYwOlxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDYxOlxcdH1cXG4xMDYyOlxcdFxcbjEwNjM6XFx0RVhQT1JUX1NZTUJPTChpdGVyYXRlX3N1cGVyc190eXBlKTtcXG4xMDY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyMy4xMTM1NTQ5NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk1NzQ0Mzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdG8gdHJhY2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBiZWluZyBjYWxsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4gVGhlIGdvYWwgaXMgdG8gc2VlIGhvdyBpdCdzIGJlaW5nICp1c2VkKiAtIHdoYXQncyB0aGUgY29udGV4dCwgd2hhdCBvdGhlciBkYXRhIGlzIGludm9sdmVkLCBhbmQgd2hhdCdzIHRoZSBpbnRlbmRlZCBwdXJwb3NlIG9mIHRoYXQgaXRlcmF0aW9uIG92ZXIgdGhlIHN1cGVydHlwZXMuIEFyZSB3ZSB1c2luZyBpdCBmb3IgdHlwZSBjaGVja2luZywgaW5oZXJpdGFuY2UgYW5hbHlzaXMsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGwgc2l0ZXMgd2lsbCBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb27igJlzIHJvbGUgYW5kIHRvIG1ha2UgZWZmZWN0aXZlIGNoYW5nZXMuIEknbGwgbmVlZCB0byBsb29rIGJleW9uZCB0aGUgaW1tZWRpYXRlIGRlZmluaXRpb24gb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgYW5kIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjbHVlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQyNywiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6MjUuMDA5MzAyMDk5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NDYxMjczMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXRlcmF0ZV9zdXBlcnNfdHlwZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTAtXFx0Zm9yICg7ICpmc190eXBlOyBmc190eXBlKyspIHtcXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MTE6XFx0XFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSgqZnNfdHlwZSwgZiwgXFx1MDAyNnNkKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTItXFx0XFx0aWYgKHNkLnNiKSB7XFxuLS1cXG5mcy9zdXBlci5jPTEwMDk9dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4tLVxcbmZzL3N1cGVyLmMtMTAxNC0vKipcXG5mcy9zdXBlci5jOjEwMTU6ICpcXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxcbmZzL3N1cGVyLmMtMTAxNi0gKlxcdEB0eXBlOiBmcyB0eXBlXFxuLS1cXG5mcy9zdXBlci5jLTEwMjItICovXFxuZnMvc3VwZXIuYzoxMDIzOnZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG5mcy9zdXBlci5jLTEwMjQtXFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuLS1cXG5mcy9zdXBlci5jLTEwNjItXFxuZnMvc3VwZXIuYzoxMDYzOkVYUE9SVF9TWU1CT0woaXRlcmF0ZV9zdXBlcnNfdHlwZSk7XFxuZnMvc3VwZXIuYy0xMDY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTMyNTI9ZXh0ZXJuIHZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMjUzOmV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKixcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzI1NC1cXHRcXHRcXHQgICAgICAgIHZvaWQgKCopKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyNi43NTU0Mzg2NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTA3Mzc4MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTdXBlcmJsb2NrIEl0ZXJhdGlvbiBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdoZW4gaXRlcmF0aW5nIHRocm91Z2ggc3VwZXJibG9ja3MsIHNwZWNpZmljYWxseSB3aXRoIGBpdGVyYXRlX3N1cGVyc190eXBlYCwgdGhlIGNvZGUgdXNlcyBgc3VwZXJfYmxvY2tzYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IHdhbGtpbmcgYHR5cGUtXHUwMDNlZnNfc3VwZXJzYC4gVGhlIHJlYXNvbiBpbW1lZGlhdGVseSBjbGlja3M6IGRyb3BwaW5nIGBzYl9sb2NrYCB3aXRoaW4gdGhlIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgbG9vcCBvbiBgdHlwZS1cdTAwM2Vmc19zdXBlcnNgIGlzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uLiBJZiB0aGUgY3Vyc29yIGlzbid0IHByb3Blcmx5IHByb3RlY3RlZCwgb3IgaWYgdGhlIGBzX2luc3RhbmNlc2AgbGlzdCBpcyBiZWluZyBtb2RpZmllZCBjb25jdXJyZW50bHksIHdlIGNvdWxkIHJ1biBpbnRvIHNlcmlvdXMgaXNzdWVzLiBCdXQgdXNpbmcgdGhlIGBzdXBlcl9ibG9ja3NgIGxpc3QgKGBzX2xpc3RgKSBjaXJjdW12ZW50cyB0aGlzIGNvbmNlcm4uIFRoZSBgcGAgd2l0aGluIHRoYXQgbGlzdCBvZmZlcnMgYSBwYXNzaXZlIHJlZmVyZW5jZSwgYW5kIGEgYHB1dF9zdXBlcihwKWAgb3BlcmF0aW9uIG9ubHkgaGFwcGVucyBkdXJpbmcgZGVzdHJ1Y3Rpb24gb3IgcmVsYXRlZCBldmVudHMuIFRoYXQncyBzaWduaWZpY2FudGx5IHNhZmVyLiBXYWl0IGEgc2Vjb25kLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNydWNpYWwsIEkgc2hvdWxkIGFsc28gcmV2aWV3IGBpdGVyYXRlX3N1cGVyc2AgaW4gYGZzL3N1cGVyLmNgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGdlbmVyYWwgc3VwZXJibG9jayBpdGVyYXRpb24gbG9naWMgaXMgc291bmQsIG5vdCBqdXN0IHRoaXMgc3BlY2lmaWMgY2FzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTA5MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzoyOS42NjI4MTk4NzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5ODA6XFx0XFxuIDk4MTpcXHRcXHRmb3IgKHNiID0gZmlyc3Rfc3VwZXIoZmxhZ3MpO1xcbiA5ODI6XFx0XFx0ICAgICAhbGlzdF9lbnRyeV9pc19oZWFkKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpO1xcbiA5ODM6XFx0XFx0ICAgICBzYiA9IG5leHRfc3VwZXIoc2IsIGZsYWdzKSkge1xcbiA5ODQ6XFx0XFx0XFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXFxuIDk4NTpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gOTg2OlxcdFxcbiA5ODc6XFx0XFx0XFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNnNiLVxcdTAwM2VzX3Bhc3NpdmUpKVxcbiA5ODg6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDk4OTpcXHRcXG4gOTkwOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4gOTkxOlxcdFxcbiA5OTI6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgU1VQRVJfSVRFUl9VTkxPQ0tFRCkge1xcbiA5OTM6XFx0XFx0XFx0XFx0ZihzYiwgYXJnKTtcXG4gOTk0OlxcdFxcdFxcdH0gZWxzZSBpZiAoc3VwZXJfbG9jayhzYiwgZXhjbCkpIHtcXG4gOTk1OlxcdFxcdFxcdFxcdGYoc2IsIGFyZyk7XFxuIDk5NjpcXHRcXHRcXHRcXHRzdXBlcl91bmxvY2soc2IsIGV4Y2wpO1xcbiA5OTc6XFx0XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRcXHRpZiAocClcXG4xMDAwOlxcdFxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDAxOlxcdFxcdFxcdHAgPSBzYjtcXG4xMDAyOlxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTAwMzpcXHRcXHR9XFxuMTAwNDpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2JfbG9jayk7XFxuMTAwNTpcXHRcXHRpZiAocClcXG4xMDA2OlxcdFxcdFxcdHB1dF9zdXBlcihwKTtcXG4xMDA3OlxcdH1cXG4xMDA4OlxcdFxcbjEwMDk6XFx0dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4xMDEwOlxcdHtcXG4xMDExOlxcdFxcdF9faXRlcmF0ZV9zdXBlcnMoZiwgYXJnLCAwKTtcXG4xMDEyOlxcdH1cXG4xMDEzOlxcdFxcbjEwMTQ6XFx0LyoqXFxuMTAxNTpcXHQgKlxcdGl0ZXJhdGVfc3VwZXJzX3R5cGUgLSBjYWxsIGZ1bmN0aW9uIGZvciBzdXBlcmJsb2NrcyBvZiBnaXZlbiB0eXBlXFxuMTAxNjpcXHQgKlxcdEB0eXBlOiBmcyB0eXBlXFxuMTAxNzpcXHQgKlxcdEBmOiBmdW5jdGlvbiB0byBjYWxsXFxuMTAxODpcXHQgKlxcdEBhcmc6IGFyZ3VtZW50IHRvIHBhc3MgdG8gaXRcXG4xMDE5OlxcdCAqXFxuMTAyMDpcXHQgKlxcdFNjYW5zIHRoZSBzdXBlcmJsb2NrIGxpc3QgYW5kIGNhbGxzIGdpdmVuIGZ1bmN0aW9uLCBwYXNzaW5nIGl0XFxuMTAyMTpcXHQgKlxcdGxvY2tlZCBzdXBlcmJsb2NrIGFuZCBnaXZlbiBhcmd1bWVudC5cXG4xMDIyOlxcdCAqL1xcbjEwMjM6XFx0dm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxcbjEwMjQ6XFx0XFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjI5LjY2Mjk1NjM1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5NTQ4MDc0NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTdXBlciBCbG9jayBJdGVyYXRpb24gQ2hhbmdlKipcblxuT2theSwgc28gSSBzZWUgdGhleSd2ZSBzd2FwcGVkIGBpdGVyYXRlX3N1cGVyc190eXBlYCB0byBpdGVyYXRlIHRocm91Z2ggYHN1cGVyX2Jsb2Nrc2AgaW4gcmV2ZXJzZSBub3csIHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogY29kZT8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBqdXN0IGEgZGVhZCBicmFuY2guXG5cblJpZ2h0LCBsZXQncyBzZWUsIHRoYXQgZnVuY3Rpb24gaXMgaW4gYGZzL3N1cGVyLmNgLiBPa2F5LCB0aGF0J3MgYSBjb3JlIFZGUyBmaWxlLiBTbyBpdCdzIHVzZWQgc29tZXdoZXJlIGluIHRoZSBmaWxlc3lzdGVtIHN0YWNrLCB3aGljaCBtZWFucyBpdCBjb3VsZCBiZSBjYWxsZWQgYnkgQ0lGUy9TTUIsIHNwZWNpZmljYWxseSB0aHJvdWdoIGZ1bmN0aW9ucyBsaWtlIGBjaWZzX2dldF9zdXBlcmAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciBwbGFjZXMgd2l0aGluIHRoZSBrZXJuZWwgb3IgZHVyaW5nIGZpbGVzeXN0ZW0gbW91bnRpbmcvb3BlcmF0aW9ucy5cblxuQWxyaWdodCwgdGhhdCB0ZWxscyBtZSB0aGUgY2hhbmdlIGxpa2VseSBoYXMgYW4gZWZmZWN0LiBCdXQsIGJlZm9yZSBJIGdldCBhbnkgZnVydGhlciBpbnRvIHdoYXQgdGhpcyBpbXBhY3QgbWF5IGJlLCBJIG5lZWQgdG8gY2hlY2sgZXhhY3RseSB3aGF0IGlzIGNhbGxpbmcgYGNpZnNfZ2V0X3N1cGVyYCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gVGhlIGNhbGwgZ3JhcGggd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNjb3BlIG9mIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBkZXBlbmRpbmcgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzozMi42MTc3NzQ3OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwNzY4ODA2MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19jaWZzX2dldF9zdXBlcnxjaWZzX2dldF9zdXBlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L21pc2MuYz04Nzc9c3RhdGljIHZvaWQgdGNvbl9zdXBlcl9jYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICphcmcpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy04OTgtXFxuZnMvc21iL2NsaWVudC9taXNjLmM6ODk5OnN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKl9fY2lmc19nZXRfc3VwZXIodm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLFxcbmZzL3NtYi9jbGllbnQvbWlzYy5jLTkwMC1cXHRcXHRcXHRcXHRcXHQgICAgdm9pZCAqZGF0YSlcXG4tLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jPTkzMj1zdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MzktXFx0c3Bpbl91bmxvY2soXFx1MDAyNnRjb24tXFx1MDAzZXRjX2xvY2spO1xcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjk0MDpcXHRyZXR1cm4gX19jaWZzX2dldF9zdXBlcih0Y29uX3N1cGVyX2NiLCB0Y29uKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05NDEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzozNi42OTQ3MDEwMDNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA1OTQ5ODYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIENJRlMvU01CIGFuZCBDb3JlIFZGUyBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggQ0lGUy9TTUIgb3IgREZTIGhlcmUsIG9yIGlmIHRoaXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIGZ1bmN0aW9uIGlzIHNvbWVob3cgaW50ZWdyYXRlZCBpbnRvIHRoZSBjb3JlIFZGUy4gRm9ydHVuYXRlbHksIEkgcmVtZW1iZXIgdGhhdCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgaXMgaW5kZWVkIGFuIGV4cG9ydGVkIGNvcmUgVkZTIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgZm91bmQgaW4gYGZzL3N1cGVyLmNgLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gYSBiaXQsIGJ1dCBsZXQncyBub3QganVtcCB0byBjb25jbHVzaW9ucy5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgYWxzbyBjaGVjayBpZiB0aGUgQ0lGUy9TTUIgZnVuY3Rpb25hbGl0eSBpdHNlbGYgaGFzIGFueSBDT05GSUcgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50LiBNeSBpbnN0aW5jdHMgdGVsbCBtZSB0byBsb29rIGZvciB0aGluZ3MgbGlrZSBgQ0lGU2Agb3IgYFNNQl9DTElFTlRgIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSeKAmWxsIHN0YXJ0IGJ5IGV4YW1pbmluZyBgZnMvc21iL2NsaWVudC9LY29uZmlnYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgTWFrZWZpbGUgdG8gc2VlIHdoYXQncyBiZWluZyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGhvdyBDSUZTL1NNQiBpcyBjb25maWd1cmVkIGFuZCB3aGVyZSBpdCBzaXRzIGluIHJlbGF0aW9uIHRvIHRoZSBWRlMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3OTQsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo0MC43NTQyMDI3MDhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDc4NDA5MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaD0zODM9aW50IHNtYjJfcGFyc2VfcXVlcnlfZGlyZWN0b3J5KHN0cnVjdCBjaWZzX3Rjb24gKnRjb24sIHN0cnVjdCBrdmVjICpyc3BfaW92LFxcbi0tXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaC0zODYtXFxuZnMvc21iL2NsaWVudC9jaWZzcHJvdG8uaDozODc6c3RydWN0IHN1cGVyX2Jsb2NrICpjaWZzX2dldF9kZnNfdGNvbl9zdXBlcihzdHJ1Y3QgY2lmc190Y29uICp0Y29uKTtcXG5mcy9zbWIvY2xpZW50L2NpZnNwcm90by5oLTM4OC12b2lkIGNpZnNfcHV0X3RjcF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcXG4tLVxcbmZzL3NtYi9jbGllbnQvZGZzLmM9Mzg2PWludCBjaWZzX3RyZWVfY29ubmVjdChjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc190Y29uICp0Y29uKVxcbi0tXFxuZnMvc21iL2NsaWVudC9kZnMuYy00MzItXFxuZnMvc21iL2NsaWVudC9kZnMuYzo0MzM6XFx0c2IgPSBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcih0Y29uKTtcXG5mcy9zbWIvY2xpZW50L2Rmcy5jLTQzNC1cXHRpZiAoIUlTX0VSUihzYikpXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYz05MjY9c3RhdGljIHZvaWQgX19jaWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbi0tXFxuZnMvc21iL2NsaWVudC9taXNjLmMtOTMxLVxcbmZzL3NtYi9jbGllbnQvbWlzYy5jOjkzMjpzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyKHN0cnVjdCBjaWZzX3Rjb24gKnRjb24pXFxuZnMvc21iL2NsaWVudC9taXNjLmMtOTMzLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6NDIuNTYyMDUyNjJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgwNjMxNjY0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ0lGUy9ERlMgQ29uZmlndXJhdGlvbiBBdWRpdCoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBgZnMvc21iL2NsaWVudGAgS2NvbmZpZyBmaWxlcy4gTXkgYnJhaW4ncyBhbHJlYWR5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbnMgZm9yIENJRlMgYW5kIERGUyBzdXBwb3J0LCBvciB3ZSBjb3VsZCBiZSBpbiBmb3Igc29tZSBzZXJpb3VzIGhlYWRhY2hlcyBkb3duIHRoZSBsaW5lLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gY2xlYXJseSBpZGVudGlmeSB3aGF0IG9wdGlvbnMgYXJlIGVuYWJsZWQsIGRpc2FibGVkLCBhbmQgd2hhdCB0aGVpciBpbnRlcmRlcGVuZGVuY2llcyBhcmUuIFRoaXMgaXNuJ3QganVzdCBhIGN1cnNvcnkgZ2xhbmNlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggY29uZmlnIG9wdGlvbiBpbiBkZXRhaWwsIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHRoZSBwcm9wZXIgb3BlcmF0aW9uIG9mIHRoZSBTTUIgY2xpZW50LiBMZXTigJlzIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcgY29uZmlndXJlZCBjb3JyZWN0bHkuIFRoaXMgd2lsbCBzYXZlIHVzIGlzc3VlcyBkb3duIHRoZSBsaW5lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTMyLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6NDQuMzY4MzcyOTAxWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg4MzQzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0lGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyOmNvbmZpZyBDSUZTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlNNQjMgYW5kIENJRlMgc3VwcG9ydCAoYWR2YW5jZWQgbmV0d29yayBmaWxlc3lzdGVtKVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy01My1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6NTQ6Y29uZmlnIENJRlNfU1RBVFMyXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTU1LVxcdGJvb2wgXFxcIkV4dGVuZGVkIHN0YXRpc3RpY3NcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctNjctXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjY4OmNvbmZpZyBDSUZTX0FMTE9XX0lOU0VDVVJFX0xFR0FDWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJTdXBwb3J0IGxlZ2FjeSBzZXJ2ZXJzIHdoaWNoIHVzZSBsZXNzIHNlY3VyZSBkaWFsZWN0c1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy04Mi1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6ODM6Y29uZmlnIENJRlNfVVBDQUxMXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTg0LVxcdGJvb2wgXFxcIktlcmJlcm9zL1NQTkVHTyBhZHZhbmNlZCBzZXNzaW9uIHNldHVwXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTkxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzo5Mjpjb25maWcgQ0lGU19YQVRUUlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy05My1cXHRib29sIFxcXCJDSUZTIGV4dGVuZGVkIGF0dHJpYnV0ZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMDc6Y29uZmlnIENJRlNfUE9TSVhcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkNJRlMgUE9TSVggRXh0ZW5zaW9uc1xcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMTgtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjExOTpjb25maWcgQ0lGU19ERUJVR1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjAtXFx0Ym9vbCBcXFwiRW5hYmxlIENJRlMgZGVidWdnaW5nIHJvdXRpbmVzXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTEyNy1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTI4OmNvbmZpZyBDSUZTX0RFQlVHMlxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xMjktXFx0Ym9vbCBcXFwiRW5hYmxlIGFkZGl0aW9uYWwgQ0lGUyBkZWJ1Z2dpbmcgcm91dGluZXNcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTM4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxMzk6Y29uZmlnIENJRlNfREVCVUdfRFVNUF9LRVlTXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJEdW1wIGVuY3J5cHRpb24ga2V5cyBmb3Igb2ZmbGluZSBkZWNyeXB0aW9uIChVbnNhZmUpXFxcIlxcbi0tXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE0OC1cXG5mcy9zbWIvY2xpZW50L0tjb25maWc6MTQ5OmNvbmZpZyBDSUZTX0RGU19VUENBTExcXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTUwLVxcdGJvb2wgXFxcIkRGUyBmZWF0dXJlIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTYxLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxNjI6Y29uZmlnIENJRlNfU1dOX1VQQ0FMTFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNjMtXFx0Ym9vbCBcXFwiU1dOIGZlYXR1cmUgc3VwcG9ydFxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzItXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE3Mzpjb25maWcgQ0lGU19ORlNEX0VYUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xNzQtXFx0Ym9vbCBcXFwiQWxsb3cgbmZzZCB0byBleHBvcnQgQ0lGUyBmaWxlIHN5c3RlbVxcXCJcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0xNzk9aWYgQ0lGU1xcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xODAtXFxuZnMvc21iL2NsaWVudC9LY29uZmlnOjE4MTpjb25maWcgQ0lGU19TTUJfRElSRUNUXFxuZnMvc21iL2NsaWVudC9LY29uZmlnLTE4Mi1cXHRib29sIFxcXCJTTUIgRGlyZWN0IHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTkwLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTE6Y29uZmlnIENJRlNfRlNDQUNIRVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0xOTItXFx0Ym9vbCBcXFwiUHJvdmlkZSBDSUZTIGNsaWVudCBjYWNoaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMTk4LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoxOTk6Y29uZmlnIENJRlNfUk9PVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMDAtXFx0Ym9vbCBcXFwiU01CIHJvb3QgZmlsZSBzeXN0ZW0gKEV4cGVyaW1lbnRhbClcXFwiXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA2LVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMDc6Y29uZmlnIENJRlNfQ09NUFJFU1NJT05cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjA4LVxcdGJvb2wgXFxcIlNNQiBtZXNzYWdlIGNvbXByZXNzaW9uIChFeHBlcmltZW50YWwpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo0NC40MTcyNjE3NDlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU2NjI0NDkyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGFuZCBJbXBsaWNhdGlvbnMgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3ZlIGdvdCBhIHBhdGNoIHRoYXQncyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBpdGVyYXRlIHRocm91Z2ggc3VwZXJibG9ja3MsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvcmUgVkZTIChgZnMvc3VwZXIuY2ApLiBTaW5jZSBgZnMvc3VwZXIuY2AgaXMgYWx3YXlzIGJ1aWx0IChjb3JlIFZGUywgYG9iai15ICs9IHN1cGVyLm9gIGluIGBmcy9NYWtlZmlsZWApLCB3ZSBrbm93IHRoaXMgaXMgYSBrZXkgYXJlYSB0byBjb25zaWRlci4gSXQncyBtb2RpZnlpbmcgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLCB3aGljaCBpcyBhIGZ1bmN0aW9uIGNyaXRpY2FsIGZvciB0cmF2ZXJzaW5nIHRocm91Z2ggdGhlIHN1cGVyYmxvY2sgaW5zdGFuY2VzIG9mIGEgY2VydGFpbiB0eXBlLlxuXG5QcmV2aW91c2x5LCBpdCB1c2VkIGEgaGFzaCBsaXN0LCBhbmQgbm93IGl0J3Mgc3dpdGNoaW5nIHRvIGEgcmV2ZXJzZSBsaXN0IGl0ZXJhdGlvbi4gVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBjaGFuZ2UgaW4gaG93IHRoZSBuZXdlc3Qgc3VwZXJibG9ja3MgYXJlIGhhbmRsZWQuIFRoZSBsb2NrLCBgc2JfbG9ja2AsIGlzIHN0aWxsIGludm9sdmVkLCBidXQgdGhlIHBhdGNoIGRlc2NyaXB0aW9uIG1lbnRpb25zIGBzX2xpc3RgIGZvciB0cmF2ZXJzaW5nIGFuZCBhIGBzX3Bhc3NpdmVgIHJlZmNvdW50IGZvciB2YWxpZGl0eSBkdXJpbmcgbG9jayBkcm9wcy5cblxuTm93LCBsZXQncyBhc3Nlc3MgdGhpcyBwYXRjaCBiYXNlZCBvbiBvdXIgZnV6emluZyBjcml0ZXJpYS5cblxuMS4gICoqQ29yZSBTdWJzeXN0ZW1zOioqIERlZmluaXRlbHkgd29ydGggbG9va2luZyBhdC4gQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gVkZTLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZywgZXRjLiwgYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBmaXRzIHRoZSBiaWxsIOKAkyB3ZSdyZSBjaGFuZ2luZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiwgd2hpY2ggaXMgYSBjb3JlIFZGUyBmdW5jdGlvbi4gU28sIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuMi4gICoqRm9jdXMgU3ltYm9sczoqKiBUaGUgbW9zdCBvYnZpb3VzIGlzIGBpdGVyYXRlX3N1cGVyc190eXBlYCBpdHNlbGYuIEl0J3MgZGlyZWN0bHkgbW9kaWZpZWQsIGFuZCBpdCdzIG5vdCBhIGZ1bmN0aW9uIHRoYXQncyB1YmlxdWl0b3VzIGluIHRoZSBzZW5zZSBvZiBiZWluZyBhICpiYXNpYyogaGVscGVyIChsaWtlIGBrZnJlZWAgb3IgYGttYWxsb2NgKS4gSXQncyBzcGVjaWZpYyB0byBpdGVyYXRpbmcgc3VwZXJibG9ja3MuIEkgY291bGQgY29uc2lkZXIgYGNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyYCBvciBgX19jaWZzX2dldF9zdXBlcmAgc2luY2UgdGhleSBjYWxsIGBpdGVyYXRlX3N1cGVyc190eXBlYCwgYnV0IHRoZSBwcmltYXJ5IHN5bWJvbCBpcyBjbGVhcmx5IGBpdGVyYXRlX3N1cGVyc190eXBlYC4gSXQncyB0aGUgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCdzIGRpcmVjdGx5IGNoYW5nZWQsIGFuZCB0aGF0J3MgdGhlIGNsZWFyZXN0IGZvY3VzLlxuXG4zLiAgKipFbmFibGVDb25maWdzOioqIFNpbmNlIGBmcy9zdXBlci5jYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQncyBub3QgYSBjb25jZXJuLiBIb3dldmVyLCBpZiB3ZSB3YW50IHRvIGV4ZXJjaXNlIHRoZSBjb2RlIHBhdGhzIHJlbGF0ZWQgdG8gdGhvc2Ugb3RoZXIgZnVuY3Rpb25zLCBsaWtlIGBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcmAgb3IgYF9fY2lmc19nZXRfc3VwZXJgIHZpYSBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAsIHdlIHByb2JhYmx5IG5lZWQgYENJRlNgIGFuZCBwb3RlbnRpYWxseSBgQ0lGU19ERlNfVVBDQUxMYCBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIGNvbmRpdGlvbnMgZm9yIGBkZnMuY2AgaW4gdGhlIGBmcy9zbWIvY2xpZW50L01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBpZiBJIGRlY2lkZSB0byBwdXJzdWUgdGhvc2UgcmVsYXRlZCBmdW5jdGlvbnMuIEJ1dCBmb3Igbm93LCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgaXRzZWxmIGlzIHRoZSBwcmltYXJ5IHRhcmdldC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc4MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo0OS45ODM1MDk4MDhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4ODA5Mjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9zbWIvY2xpZW50L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3NtYi9jbGllbnQvTWFrZWZpbGU9MjM9Y2lmcy0kKENPTkZJR19DSUZTX1VQQ0FMTCkgKz0gY2lmc19zcG5lZ28ub1xcbmZzL3NtYi9jbGllbnQvTWFrZWZpbGUtMjQtXFxuZnMvc21iL2NsaWVudC9NYWtlZmlsZToyNTpjaWZzLSQoQ09ORklHX0NJRlNfREZTX1VQQ0FMTCkgKz0gZGZzX2NhY2hlLm8gZGZzLm9cXG5mcy9zbWIvY2xpZW50L01ha2VmaWxlLTI2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo1MC4wMzIzMjQ5NTZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzE4NTY2ODI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQnVpbGQgUHJvY2VzcyBvZiBgbWlzYy5vYCBpbiB0aGUgU2FtYmEgQ2xpZW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtaXNjLm9gIGlzIGJlaW5nIGNvbXBpbGVkIGZvciB0aGUgU2FtYmEgY2xpZW50LiBNeSBmaXJzdCBzdGVwIGlzIGdvaW5nIHRvIGJlIHRvIGxvb2sgZGlyZWN0bHkgYXQgdGhlIGBNYWtlZmlsZWAgZm9yIHRoZSBgZnMvc21iL2NsaWVudGAgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEknbGwgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgbGluZSAyMCwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIG9iamVjdCBmaWxlIGRlZmluaXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIG1vc3QgZGlyZWN0IGluc2lnaHQgaW50byBob3cgYG1pc2Mub2AgaXMgYnVpbHQsIGFueSByZWxldmFudCBjb21waWxlciBmbGFncyB0aGF0IGFyZSB1c2VkLCBhbmQgd2hpY2ggb3RoZXIgc291cmNlIGZpbGVzLCBpZiBhbnksIGl0IHJlbGllcyBvbi4gSG9wZWZ1bGx5LCBpdCdzIGEgc3RyYWlnaHRmb3J3YXJkIG1ha2UgdGFyZ2V0IGFuZCBJIGNhbiBxdWlja2x5IGdsZWFuIHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE0MiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjUzLjIxNzk5NTU3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zbWIvY2xpZW50L01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgTGludXggQ0lGUy9TTUIyL1NNQjMgVkZTIGNsaWVudFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0Y2NmbGFncy15ICs9IC1JJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0NJRlMpICs9IGNpZnMub1xcbiAgIDc6XFx0XFxuICAgODpcXHRjaWZzLXkgOj0gdHJhY2UubyBjaWZzZnMubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBcXFxcXFxuICAgOTpcXHRcXHQgIGlub2RlLm8gbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgY2FjaGVkX2Rpci5vIGNpZnNfdW5pY29kZS5vIGNpZnNlbmNyeXB0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0ICByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8gdW5jLm8gd2ludWNhc2UubyBcXFxcXFxuICAxMjpcXHRcXHQgIHNtYjJvcHMubyBzbWIybWFwZXJyb3IubyBzbWIydHJhbnNwb3J0Lm8gXFxcXFxcbiAgMTM6XFx0XFx0ICBzbWIybWlzYy5vIHNtYjJwZHUubyBzbWIyaW5vZGUubyBzbWIyZmlsZS5vIGNpZnNhY2wubyBmc19jb250ZXh0Lm8gXFxcXFxcbiAgMTQ6XFx0XFx0ICBkbnNfcmVzb2x2ZS5vIGNpZnNfc3BuZWdvX25lZ3Rva2VuaW5pdC5hc24xLm8gYXNuMS5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgbmFtZXNwYWNlLm8gcmVwYXJzZS5vXFxuICAxNjpcXHRcXG4gIDE3OlxcdCQob2JqKS9hc24xLm86ICQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5oXFxuICAxODpcXHRcXG4gIDE5OlxcdCQob2JqKS9jaWZzX3NwbmVnb19uZWd0b2tlbmluaXQuYXNuMS5vOiAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuYyAkKG9iaikvY2lmc19zcG5lZ29fbmVndG9rZW5pbml0LmFzbjEuaFxcbiAgMjA6XFx0XFxuICAyMTpcXHRjaWZzLSQoQ09ORklHX0NJRlNfWEFUVFIpICs9IHhhdHRyLm9cXG4gIDIyOlxcdFxcbiAgMjM6XFx0Y2lmcy0kKENPTkZJR19DSUZTX1VQQ0FMTCkgKz0gY2lmc19zcG5lZ28ub1xcbiAgMjQ6XFx0XFxuICAyNTpcXHRjaWZzLSQoQ09ORklHX0NJRlNfREZTX1VQQ0FMTCkgKz0gZGZzX2NhY2hlLm8gZGZzLm9cXG4gIDI2OlxcdFxcbiAgMjc6XFx0Y2lmcy0kKENPTkZJR19DSUZTX1NXTl9VUENBTEwpICs9IG5ldGxpbmsubyBjaWZzX3N3bi5vXFxuICAyODpcXHRcXG4gIDI5OlxcdGNpZnMtJChDT05GSUdfQ0lGU19GU0NBQ0hFKSArPSBmc2NhY2hlLm9cXG4gIDMwOlxcdFxcbiAgMzE6XFx0Y2lmcy0kKENPTkZJR19DSUZTX1NNQl9ESVJFQ1QpICs9IHNtYmRpcmVjdC5vXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNpZnMtJChDT05GSUdfQ0lGU19ST09UKSArPSBjaWZzcm9vdC5vXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNpZnMtJChDT05GSUdfQ0lGU19BTExPV19JTlNFQ1VSRV9MRUdBQ1kpICs9IFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzc6NTMuMjE4MDYxMTc3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyMzE4NzYyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgQ0lGUyBhbmQgU3VwZXJibG9jayBJdGVyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYG1pc2Mub2AgaXMgaW52b2x2ZWQgd2l0aCBgY2lmcy15YCwgc3BlY2lmaWNhbGx5LCBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgLCB3aGljaCBpcyBpbnRlcmVzdGluZ2x5IGNhbGxlZCBieSBgZnMvc21iL2NsaWVudC9kZnMuY2AuIEFuZCB0aGF0IGlzIGl0c2VsZiBwYXJ0IG9mIGEgYGNpZnMtJChDT05GSUdfQ0lGU19ERlNfVVBDQUxMKSArPSBkZnNfY2FjaGUubyBkZnMub2AgY29uZmlndXJhdGlvbi4gVGhlIGludGVyZXN0aW5nIHBhcnQgaXMgdGhhdCBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgIGluIGBtaXNjLmNgIHRoZW4gY2FsbHMgYF9fY2lmc19nZXRfc3VwZXJgLlxuXG5TbywgYGRmcy5jYCBjYWxscyBgY2lmc19nZXRfZGZzX3Rjb25fc3VwZXJgLiBBbHJpZ2h0LCB1bmRlcnN0b29kLiBUaGUgY29uZmlndXJhdGlvbnMgYXQgcGxheSBoZXJlIGFyZSBgQ0lGU2AgYW5kIGBDSUZTX0RGU19VUENBTExgLlxuXG5Ob3csIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIHJlbGV2YW50IGBGb2N1c1N5bWJvbHNgLiBJIHNlZSBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAgYW5kIGBjaWZzX2dldF9kZnNfdGNvbl9zdXBlcmAgYXMgY2FuZGlkYXRlcy5cblxuVGhlIGNydWNpYWwgcXVlc3Rpb24gaXMsIGlzIGBpdGVyYXRlX3N1cGVyc190eXBlYCBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhpcyBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBzdXBlcmJsb2NrcyBhcmUgdHJhdmVyc2VkLiBJdCBpcyBpbXBhY3RpbmcgdGhlIFZGUyBjb3JlIGxvZ2ljLCB3aGljaCBpcyBhbHdheXMgYSBoaWdoLXZhbHVlIHRhcmdldC4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgbG9ja2luZyBhbmQgaXRlcmF0aW9uIHNlbWFudGljcyBhcm91bmQgc3VwZXJibG9ja3MuIFRoZSBwYXRjaCBzaGlmdHMgdGhlIGl0ZXJhdGlvbiBtZXRob2QsIG1vdmluZyBmcm9tIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAgb24gYHR5cGUtXHUwMDNlZnNfc3VwZXJzYCB0byBpdGVyYXRpbmcgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGJhY2t3YXJkcyB3aXRoIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFx1MDAyNnN1cGVyX2Jsb2Nrcywgc19saXN0KWAgYW5kIGZpbHRlcmluZyBieSBgc2ItXHUwMDNlc190eXBlICE9IHR5cGVgLiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLlxuXG5ZZXAsIHRoZSBsb2NraW5nIGFuZCBpdGVyYXRpb24gc2VtYW50aWNzIGFjcm9zcyBzdXBlcmJsb2NrcyBpbiBWRlMgYXJlIGJlaW5nIGFsdGVyZWQgaGVyZSwgYW5kIHRoYXQncyBjb3JlIGtlcm5lbCBsb2dpYy4gRGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgdmVyaWZpZWQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDY4LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjU3LjQ0OTk0MDAwNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NTM1NzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCIsXG4gICAgXCJDSUZTX0RGU19VUENBTExcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpdGVyYXRlX3N1cGVyc190eXBlXCIsXG4gICAgXCJjaWZzX2dldF9kZnNfdGNvbl9zdXBlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFsdGVycyBjb3JlIFZGUyBzdXBlcmJsb2NrIGl0ZXJhdGlvbiBsb2dpYyBpbiBpdGVyYXRlX3N1cGVyc190eXBlKCkgYnkgc3dpdGNoaW5nIGZyb20gaXRlcmF0aW5nIG92ZXIgdHlwZS1cXHUwMDNlZnNfc3VwZXJzIHRvIHdhbGtpbmcgdGhlIGdsb2JhbCBzdXBlcl9ibG9ja3MgbGlzdCBiYWNrd2FyZHMgd2hpbGUgZHJvcHBpbmcgYW5kIHJlYWNxdWlyaW5nIHNiX2xvY2suIFRoaXMgbW9kaWZpZXMgc3luY2hyb25pemF0aW9uIGFuZCB0cmF2ZXJzYWwgc2VtYW50aWNzIGluIGEgY29yZSBWRlMgaGVscGVyIHVzZWQgZHVyaW5nIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyAoc3VjaCBhcyBDSUZTIERGUyByZWNvbm5lY3RzKS4gRnV6emluZyBpcyB3YXJyYW50ZWQgdG8gZW5zdXJlIG5vIHJhY2UgY29uZGl0aW9ucyBvciB0cmF2ZXJzYWwgaW5jb25zaXN0ZW5jaWVzIGFyZSBpbnRyb2R1Y2VkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIkNJRlNfREZTX1VQQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIml0ZXJhdGVfc3VwZXJzX3R5cGVcIixcbiAgICBcImNpZnNfZ2V0X2Rmc190Y29uX3N1cGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWx0ZXJzIGNvcmUgVkZTIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljIGluIGl0ZXJhdGVfc3VwZXJzX3R5cGUoKSBieSBzd2l0Y2hpbmcgZnJvbSBpdGVyYXRpbmcgb3ZlciB0eXBlLVxcdTAwM2Vmc19zdXBlcnMgdG8gd2Fsa2luZyB0aGUgZ2xvYmFsIHN1cGVyX2Jsb2NrcyBsaXN0IGJhY2t3YXJkcyB3aGlsZSBkcm9wcGluZyBhbmQgcmVhY3F1aXJpbmcgc2JfbG9jay4gVGhpcyBtb2RpZmllcyBzeW5jaHJvbml6YXRpb24gYW5kIHRyYXZlcnNhbCBzZW1hbnRpY3MgaW4gYSBjb3JlIFZGUyBoZWxwZXIgdXNlZCBkdXJpbmcgZmlsZXN5c3RlbSBvcGVyYXRpb25zIChzdWNoIGFzIENJRlMgREZTIHJlY29ubmVjdHMpLiBGdXp6aW5nIGlzIHdhcnJhbnRlZCB0byBlbnN1cmUgbm8gcmFjZSBjb25kaXRpb25zIG9yIHRyYXZlcnNhbCBpbmNvbnNpc3RlbmNpZXMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjU3LjUyNjQ4NDM5MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODAxMTk5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozNzo1Ny41MjcxNzE2NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTE3OTQyODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGUoKWAgaW4gYGZzL3N1cGVyLmNgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGxpc3QgdmlhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFxcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVxcdTAwM2VzX3R5cGUgPT0gdHlwZWAsIHJhdGhlciB0aGFuIGl0ZXJhdGluZyBgdHlwZS1cXHUwMDNlZnNfc3VwZXJzYCB3aXRoIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAuIFRoaXMgZW5zdXJlcyBsaXN0IGN1cnNvciBzYWZldHkgd2hpbGUgYHNiX2xvY2tgIGlzIGRyb3BwZWQgZHVyaW5nIHN1cGVyYmxvY2sgaXRlcmF0aW9uLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGxpc3QgdHJhdmVyc2FsLCBzeW5jaHJvbml6YXRpb24sIGFuZCBzdXBlcmJsb2NrIHJlZmVyZW5jZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxpc3QgdHJhdmVyc2FsLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBhZGRyZXNzYWJsZSBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyZWMxZDQ0NTY4NTZiN2NmZDZmNjUyMzg5YzBjNjBhZGM0YjBkMGU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgNCAwMTozNzowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jXG5pbmRleCAwNWU0NDMxNzMwMzg3Li5jOGFjY2QxNDRiYWQyIDEwMDY0NFxuLS0tIGEvZnMvc3VwZXIuY1xuKysrIGIvZnMvc3VwZXIuY1xuQEAgLTEwMjYsMTEgKzEwMjYsMTggQEAgdm9pZCBpdGVyYXRlX3N1cGVyc190eXBlKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLFxuIFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xuIFxuIFx0c3Bpbl9sb2NrKFx1MDAyNnNiX2xvY2spO1xuLVx0aGxpc3RfZm9yX2VhY2hfZW50cnkoc2IsIFx1MDAyNnR5cGUtXHUwMDNlZnNfc3VwZXJzLCBzX2luc3RhbmNlcykge1xuK1x0LypcbitcdCAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrXG4rXHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXG4rXHQgKiBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi5cbitcdCAqL1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdCkge1xuIFx0XHRib29sIGxvY2tlZDtcbiBcbiBcdFx0aWYgKHN1cGVyX2ZsYWdzKHNiLCBTQl9EWUlORykpXG4gXHRcdFx0Y29udGludWU7XG4rXHRcdGlmIChzYi1cdTAwM2VzX3R5cGUgIT0gdHlwZSlcbitcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2c2ItXHUwMDNlc19wYXNzaXZlKSlcbiBcdFx0XHRjb250aW51ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM3OjU3LjUyNzE3MjUwMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NjgzNzgwOTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKlxuXG5Pa2F5LCBsZXQncyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBjb25zaWRlciBLTVNBTiBmdXp6aW5nLiBJdCdzIG1vZGlmeWluZyBgZnMvc3VwZXIuY2AsIHNwZWNpZmljYWxseSB0aGUgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgIGZ1bmN0aW9uLiBGcm9tIHRoZSBkaWZmLCBpdCBsb29rcyBsaWtlIHRoZXJlJ3MgYmVlbiBhIGNoYW5nZSB0byBob3cgdGhlIHN1cGVyYmxvY2tzIGFyZSBpdGVyYXRlZC4gUHJldmlvdXNseSwgaXQgdXNlZCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgIG9uIGB0eXBlLVx1MDAzZWZzX3N1cGVyc2AuIE5vdywgaXQncyB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlYCBvbiBgc3VwZXJfYmxvY2tzYCwgd2l0aCB0aGUgaW5jbHVzaW9uIG9mIGEgY2hlY2sgZm9yIGBzYi1cdTAwM2VzX3R5cGUgPT0gdHlwZWAgYW5kIHNvbWUga2luZCBvZiBwYXNzaXZlIHJlZmVyZW5jZSBtYW5hZ2VtZW50IHVzaW5nIGBzX3Bhc3NpdmVgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBXaHkgYXJlIHRoZXkgc3dpdGNoaW5nIGZyb20gYW4gaGxpc3QgdG8gYSBsaXN0PyBJcyBpdCByZWxhdGVkIHRvIHRoZSBcIm5ld2VzdC1maXJzdCB2aXNpdGF0aW9uXCIgY29tbWVudD8gSXMgdGhpcyBjaGFuZ2UgcmVsYXRlZCB0byBsb2NraW5nIG9yIGNvbmN1cnJlbmN5IGlzc3VlcywgaGVuY2UgdGhlIHVzZSBvZiBgc19wYXNzaXZlYCBhbmQgZHJvcHBpbmcgYHNiX2xvY2tgIHdpdGhpbiB0aGUgbG9vcD8gVGhpcyBzdWdnZXN0cyBpdCBjb3VsZCBiZSBwYXJ0IG9mIGEgbGFyZ2VyIHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBvZiB0aGUgc3VwZXJibG9jayBpdGVyYXRpb24gcHJvY2VzcywgbGlrZWx5IHRvIGltcHJvdmUgZWl0aGVyIHBlcmZvcm1hbmNlIG9yIGNvcnJlY3RuZXNzIG9yIGJvdGguXG5cblRoZSBpbXBvcnRhbnQgdGhpbmcgaXM6IHdpbGwgdGhpcyBjaGFuZ2UgcG90ZW50aWFsbHkgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBLTVNBTiBjb3VsZCBjYXRjaD8gVGhlIGZhY3QgdGhhdCBhIFwicGFzc2l2ZSByZWZlcmVuY2VcIiBpcyBiZWluZyB1c2VkIGFuZCB0aGF0IHRoZXJlIGFyZSBleHBsaWNpdCBjaGVja3MgZm9yIGBTQl9EWUlOR2AgYW5kIHR5cGUgbWlzbWF0Y2ggaGludHMgYXQgdGhpcyBwcm9jZXNzIGJlaW5nIGZhaXJseSBjb21wbGV4LiBJIHNob3VsZCBhbmFseXplIHdoYXQgaGFwcGVucyBpZiBgcmVmY291bnRfaW5jX25vdF96ZXJvYCByZXR1cm5zIHplcm8sIGlzIHRoaXMgcGF0aCBiZWluZyBjb3ZlcmVkIGJ5IG90aGVyIGV4aXN0aW5nIHNhbml0aXplcnM/XG5cbkknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGNoYW5nZSBhbmQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgZGF0YSByYWNlcyBvciB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zIGludHJvZHVjZWQgYnkgdGhpcyBuZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1cGVyYmxvY2sgaXRlcmF0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzc1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzg6MDMuMjEwOTU2NzA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9zdXBlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMjA6XFx0ICpcXHRTY2FucyB0aGUgc3VwZXJibG9jayBsaXN0IGFuZCBjYWxscyBnaXZlbiBmdW5jdGlvbiwgcGFzc2luZyBpdFxcbjEwMjE6XFx0ICpcXHRsb2NrZWQgc3VwZXJibG9jayBhbmQgZ2l2ZW4gYXJndW1lbnQuXFxuMTAyMjpcXHQgKi9cXG4xMDIzOlxcdHZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG4xMDI0OlxcdFxcdHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxcbjEwMjU6XFx0e1xcbjEwMjY6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgKnAgPSBOVUxMO1xcbjEwMjc6XFx0XFxuMTAyODpcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiX2xvY2spO1xcbjEwMjk6XFx0XFx0LypcXG4xMDMwOlxcdFxcdCAqIFRoZSBwYXNzaXZlIHJlZmVyZW5jZSBrZWVwcyB0aGUgc19saXN0IGN1cnNvciB2YWxpZCB3aGlsZSBzYl9sb2NrXFxuMTAzMTpcXHRcXHQgKiBpcyBkcm9wcGVkLiBFbnRyaWVzIGFyZSBhZGRlZCBhdCB0aGUgdGFpbC4gV2FsayBiYWNrd2FyZHMgdG8gcmV0YWluXFxuMTAzMjpcXHRcXHQgKiBuZXdlc3QtZmlyc3QgdmlzaXRhdGlvbi5cXG4xMDMzOlxcdFxcdCAqL1xcbjEwMzQ6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpIHtcXG4xMDM1OlxcdFxcdFxcdGJvb2wgbG9ja2VkO1xcbjEwMzY6XFx0XFxuMTAzNzpcXHRcXHRcXHRpZiAoc3VwZXJfZmxhZ3Moc2IsIFNCX0RZSU5HKSlcXG4xMDM4OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwMzk6XFx0XFx0XFx0aWYgKHNiLVxcdTAwM2VzX3R5cGUgIT0gdHlwZSlcXG4xMDQwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjEwNDE6XFx0XFxuMTA0MjpcXHRcXHRcXHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcXHUwMDI2c2ItXFx1MDAzZXNfcGFzc2l2ZSkpXFxuMTA0MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4xMDQ0OlxcdFxcbjEwNDU6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHRcXHRsb2NrZWQgPSBzdXBlcl9sb2NrX3NoYXJlZChzYik7XFxuMTA0ODpcXHRcXHRcXHRpZiAobG9ja2VkKSB7XFxuMTA0OTpcXHRcXHRcXHRcXHRmKHNiLCBhcmcpO1xcbjEwNTA6XFx0XFx0XFx0XFx0c3VwZXJfdW5sb2NrX3NoYXJlZChzYik7XFxuMTA1MTpcXHRcXHRcXHR9XFxuMTA1MjpcXHRcXG4xMDUzOlxcdFxcdFxcdGlmIChwKVxcbjEwNTQ6XFx0XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwNTU6XFx0XFx0XFx0cCA9IHNiO1xcbjEwNTY6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDU3OlxcdFxcdH1cXG4xMDU4OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDU5OlxcdFxcdGlmIChwKVxcbjEwNjA6XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwNjE6XFx0fVxcbjEwNjI6XFx0XFxuMTA2MzpcXHRFWFBPUlRfU1lNQk9MKGl0ZXJhdGVfc3VwZXJzX3R5cGUpO1xcbjEwNjQ6XFx0XFxuMTA2NTpcXHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnVzZXJfZ2V0X3N1cGVyKGRldl90IGRldiwgYm9vbCBleGNsKVxcbjEwNjY6XFx0e1xcbjEwNjc6XFx0XFx0c3RydWN0IHN1cGVyX2RldiAqc2JfZGV2O1xcbjEwNjg6XFx0XFxuMTA2OTpcXHRcXHRmb3IgKHNiX2RldiA9IHN1cGVyX2Rldl9maXJzdChkZXYpOyBzYl9kZXY7IHNiX2RldiA9IHN1cGVyX2Rldl9uZXh0KHNiX2RldikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzg6MDMuMjExMTQyODk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI2NDY5MDQwNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGlzIHRhc2ssIGFzIGlmIHRoZXNlIHdlcmUgbXkgaW50ZXJuYWwgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGBpdGVyYXRlX3N1cGVyc190eXBlYC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9mIGl0cyByZWNlbnQgaGlzdG9yeSBhbmQgdXNhZ2UuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGNvZGViYXNlLiBXaGVyZSdzIGl0IHVzZWQ/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIG1ldGhvZHMgY2FsbCBpdD8gSXMgaXQgcGFydCBvZiBhIGxhcmdlciBwYXR0ZXJuIG9yIGFsZ29yaXRobT8gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYSBnb29kIG92ZXJ2aWV3IGJ5IGxvb2tpbmcgYXQgdGhlIGRpcmVjdCBjYWxsZXJzLlxuXG5UaGVuLCBpZiB0aGF0IGRvZXNuJ3QgaW1tZWRpYXRlbHkgc2hlZCBlbm91Z2ggbGlnaHQsIG9yIGlmIEkgd2FudCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGV2b2x1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uLCBJJ2xsIG1vdmUgb24gdG8gc291cmNlIGNvbnRyb2wuIEknbGwgZWl0aGVyIHVzZSBgZ2l0IGJsYW1lYCBvciBhIG1vcmUgZ2VuZXJhbCBgZ2l0IGxvZ2Agc2VhcmNoLCBwZXJoYXBzIGNvbWJpbmVkIHdpdGggYGdyZXBgLCBsb29raW5nIGZvciBhbnkgbWVudGlvbnMgb2YgYGl0ZXJhdGVfc3VwZXJzX3R5cGVgLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHdoeSB0aGlzIGZ1bmN0aW9uIGV4aXN0cywgYW55IG1ham9yIGNoYW5nZXMgaXQncyB1bmRlcmdvbmUsIGFuZCB3aG8ncyBiZWVuIGludGVyYWN0aW5nIHdpdGggaXQuIFRoZSBoaXN0b3J5IGNvdWxkIGJlIHF1aXRlIHJldmVhbGluZzsgaXQgbWlnaHQgc2hvdyBwYXN0IGJ1Z3Mgb3Igb3B0aW1pemF0aW9ucyB0aGF0IGFyZSByZWxldmFudCB0byB3aGF0IEknbSBsb29raW5nIGF0IHRvZGF5LiBUaGlzIGFsc28gaGVscHMgdG8gZXN0YWJsaXNoIGNvbnRleHQgaWYgSSdtIG5vdCBmYW1pbGlhciB3aXRoIHRoZSBjb2RlIGluIHF1ZXN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjc0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozODowNS44NTgwNTU1MDlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTg0NTcyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXRlcmF0ZV9zdXBlcnNfdHlwZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9zbWIvY2xpZW50L21pc2MuYz04OTk9c3RhdGljIHN0cnVjdCBzdXBlcl9ibG9jayAqX19jaWZzX2dldF9zdXBlcih2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksXFxuLS1cXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTAtXFx0Zm9yICg7ICpmc190eXBlOyBmc190eXBlKyspIHtcXG5mcy9zbWIvY2xpZW50L21pc2MuYzo5MTE6XFx0XFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSgqZnNfdHlwZSwgZiwgXFx1MDAyNnNkKTtcXG5mcy9zbWIvY2xpZW50L21pc2MuYy05MTItXFx0XFx0aWYgKHNkLnNiKSB7XFxuLS1cXG5mcy9zdXBlci5jPTEwMDk9dm9pZCBpdGVyYXRlX3N1cGVycyh2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG4tLVxcbmZzL3N1cGVyLmMtMTAxNC0vKipcXG5mcy9zdXBlci5jOjEwMTU6ICpcXHRpdGVyYXRlX3N1cGVyc190eXBlIC0gY2FsbCBmdW5jdGlvbiBmb3Igc3VwZXJibG9ja3Mgb2YgZ2l2ZW4gdHlwZVxcbmZzL3N1cGVyLmMtMTAxNi0gKlxcdEB0eXBlOiBmcyB0eXBlXFxuLS1cXG5mcy9zdXBlci5jLTEwMjItICovXFxuZnMvc3VwZXIuYzoxMDIzOnZvaWQgaXRlcmF0ZV9zdXBlcnNfdHlwZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSxcXG5mcy9zdXBlci5jLTEwMjQtXFx0dm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpXFxuLS1cXG5mcy9zdXBlci5jLTEwNjItXFxuZnMvc3VwZXIuYzoxMDYzOkVYUE9SVF9TWU1CT0woaXRlcmF0ZV9zdXBlcnNfdHlwZSk7XFxuZnMvc3VwZXIuYy0xMDY0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oPTMyNTI9ZXh0ZXJuIHZvaWQgaXRlcmF0ZV9zdXBlcnModm9pZCAoKmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICphcmcpO1xcbmluY2x1ZGUvbGludXgvZnMuaDozMjUzOmV4dGVybiB2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKixcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMzI1NC1cXHRcXHRcXHQgICAgICAgIHZvaWQgKCopKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB2b2lkICopLCB2b2lkICopO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozODowNy40NTY1MjgzOVoiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzI1NjcxNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgQ29kZSBTdHJ1Y3R1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgaXRlcmF0ZV9zdXBlcnNgIGFuZCBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAuIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBpbW1lZGlhdGUgc3Vycm91bmRpbmcgY29kZSwgaW4gdGhpcyBjYXNlLCB0aGUgbGluZSBkaXJlY3RseSBhYm92ZSBgaXRlcmF0ZV9zdXBlcnNfdHlwZWAsIHdoaWNoIHNob3VsZCBiZSBgaXRlcmF0ZV9zdXBlcnNgLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHBsYWNlIHRvIHN0YXJ0LCBhcyBvZnRlbiByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBjbG9zZSB0byBlYWNoIG90aGVyLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIGluaGVyaXRhbmNlIG9yIHR5cGUgaGllcmFyY2hpZXMg4oCTIHdoaWNoIGlzIHdoYXQgdGhlc2UgbmFtZXMgYXJlIGhlYXZpbHkgc3VnZ2VzdGluZy4gTGV0J3Mgc2VlIGlmIHRoYXQncyB3aGVyZSBJIGNhbiBmaW5kIHRoZSBjb25uZWN0aW9uLCBvciB3aGV0aGVyIHRoZSByZWxhdGlvbnNoaXAgaXMgbW9yZSBjb21wbGV4IHRoYW4gYSBzaW1wbGUgZGVmaW5pdGlvbiBvcmRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDAxOjM4OjA5LjE4MjIwMzgwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTA2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvc3VwZXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5OTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5OTA6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiX2xvY2spO1xcbiA5OTE6XFx0XFxuIDk5MjpcXHRcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBTVVBFUl9JVEVSX1VOTE9DS0VEKSB7XFxuIDk5MzpcXHRcXHRcXHRcXHRmKHNiLCBhcmcpO1xcbiA5OTQ6XFx0XFx0XFx0fSBlbHNlIGlmIChzdXBlcl9sb2NrKHNiLCBleGNsKSkge1xcbiA5OTU6XFx0XFx0XFx0XFx0ZihzYiwgYXJnKTtcXG4gOTk2OlxcdFxcdFxcdFxcdHN1cGVyX3VubG9jayhzYiwgZXhjbCk7XFxuIDk5NzpcXHRcXHRcXHR9XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdFxcdGlmIChwKVxcbjEwMDA6XFx0XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwMDE6XFx0XFx0XFx0cCA9IHNiO1xcbjEwMDI6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDAzOlxcdFxcdH1cXG4xMDA0OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYl9sb2NrKTtcXG4xMDA1OlxcdFxcdGlmIChwKVxcbjEwMDY6XFx0XFx0XFx0cHV0X3N1cGVyKHApO1xcbjEwMDc6XFx0fVxcbjEwMDg6XFx0XFxuMTAwOTpcXHR2b2lkIGl0ZXJhdGVfc3VwZXJzKHZvaWQgKCpmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqYXJnKVxcbjEwMTA6XFx0e1xcbjEwMTE6XFx0XFx0X19pdGVyYXRlX3N1cGVycyhmLCBhcmcsIDApO1xcbjEwMTI6XFx0fVxcbjEwMTM6XFx0XFxuMTAxNDpcXHQvKipcXG4xMDE1OlxcdCAqXFx0aXRlcmF0ZV9zdXBlcnNfdHlwZSAtIGNhbGwgZnVuY3Rpb24gZm9yIHN1cGVyYmxvY2tzIG9mIGdpdmVuIHR5cGVcXG4xMDE2OlxcdCAqXFx0QHR5cGU6IGZzIHR5cGVcXG4xMDE3OlxcdCAqXFx0QGY6IGZ1bmN0aW9uIHRvIGNhbGxcXG4xMDE4OlxcdCAqXFx0QGFyZzogYXJndW1lbnQgdG8gcGFzcyB0byBpdFxcbjEwMTk6XFx0ICpcXG4xMDIwOlxcdCAqXFx0U2NhbnMgdGhlIHN1cGVyYmxvY2sgbGlzdCBhbmQgY2FsbHMgZ2l2ZW4gZnVuY3Rpb24sIHBhc3NpbmcgaXRcXG4xMDIxOlxcdCAqXFx0bG9ja2VkIHN1cGVyYmxvY2sgYW5kIGdpdmVuIGFyZ3VtZW50LlxcbjEwMjI6XFx0ICovXFxuMTAyMzpcXHR2b2lkIGl0ZXJhdGVfc3VwZXJzX3R5cGUoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsXFxuMTAyNDpcXHRcXHR2b2lkICgqZikoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKmFyZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMDE6Mzg6MDkuMTgyMzk2MTc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc1MjQxODMxMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBpdGVyYXRlX3N1cGVyc190eXBlYCBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGV5J3ZlIGNoYW5nZWQgaG93IGBpdGVyYXRlX3N1cGVyc190eXBlYCB3b3Jrcy4gUHJldmlvdXNseSwgaXQgdXNlZCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgIHRvIGl0ZXJhdGUgdGhyb3VnaCBgdHlwZS1cdTAwM2Vmc19zdXBlcnNgLiBUaGUgaXNzdWUgdGhhdCBqdW1wcyBvdXQgYXQgbWUgaW1tZWRpYXRlbHkgaXMgdGhhdCB0aGUgYHNiX2xvY2tgIHdhcyBiZWluZyBkcm9wcGVkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCB3aGlsZSBgcGAgaGFkIGEgcGFzc2l2ZSByZWZlcmVuY2UuIEkgcmVtZW1iZXIgdGhpcyBwYXR0ZXJuOyBpdOKAmXMgcmlza3kgd2l0aCBgaGxpc3RgIGJlY2F1c2UgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGNhbiBjb3JydXB0IHRoZSB0cmF2ZXJzYWwuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBvbGQgY29kZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNoYW5nZS5cblxuQnV0IHdhaXQsIEkgc2VlIHRoYXQgYF9faXRlcmF0ZV9zdXBlcnNgIHVzZXMgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZWAgb24gdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0LCBpdGVyYXRpbmcgdmlhIHRoZSBgc19saXN0YCBmaWVsZCwgbm90IHRoZSBgc19pbnN0YW5jZXNgIGhsaXN0LiBTbyB0aGUgbmV3IGNoYW5nZSB0byB1c2UgYGxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzYiwgXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpYCBhbmQgZmlsdGVyIGJ5IGBzYi1cdTAwM2VzX3R5cGUgIT0gdHlwZWAgaXMgYWN0dWFsbHkgbWFraW5nIGl0ICpjb25zaXN0ZW50KiB3aXRoIHRoZSBzYWZlIGl0ZXJhdGlvbiBpbiBgX19pdGVyYXRlX3N1cGVyc2AuIFRoaXMgc2VlbXMgcmlnaHQuIEl04oCZcyBwcm90ZWN0aW5nIHRoZSBpdGVyYXRpb24gYnkgZW5zdXJpbmcgdGhlIGxpc3QgZG9lc27igJl0IGNoYW5nZSwgb3IgdGhlIGN1cnNvciBpcyBtYWludGFpbmVkIGJ5IHVzaW5nIGBzX3Bhc3NpdmVgIHByb3Blcmx5LCBvciBzYWZlIGl0ZXJhdGlvbiBvZiB0aGUgaGxpc3Qgd2hlbiB0aGUgbG9jayBpcyBkcm9wcGVkLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgbWVtb3J5IHNhZmV0eS4gSSBuZWVkIHRvIGJyZWFrIGRvd24gdGhlIEtNU0FOIGNvbmNlcm5zLlxuXG5GaXJzdCwgZG9lcyB0aGlzIGNoYW5nZSB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBjcmVhdGUgcGFkZGluZyBsZWFrcz8gTm9wZS4gVGhpcyBpcyBqdXN0IGFuIGl0ZXJhdGlvbiBhbmQgbG9ja2luZyBmaXguIE5vIG5ldyBhbGxvY2F0aW9ucywgbm8gbmV3IGluaXRpYWxpemF0aW9uIGNvZGUsIG5vIG5ldyBzdHJ1Y3QgZGVmaW5pdGlvbnMuXG5cblNlY29uZCwgY291bGQgdGhlIHBhdGNoIHJlYWQgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gVGhlIGNvZGUgdXNlcyBgc2JgLCB3aGljaCBpcyBpbml0aWFsaXplZC4gYHNiLVx1MDAzZXNfdHlwZWAgaXMgYWxzbyBpbml0aWFsaXplZC5cblxuVGhpcmQsIHdoYXQgcG90ZW50aWFsIGJ1Z3MgZG9lcyBpdCBmaXg/IFdlbGwsIGJhc2VkIG9uIHdoYXQgSSBzZWUgaXQgaXMgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbGlzdCBjb3JydXB0aW9uLCBpdGVyYXRvciBpbnZhbGlkYXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbnMsIGFsbCByZWxhdGVkIHRvIHRoZSBsb2NraW5nIGFuZCBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgbGlzdC4gU291bmRzIGxpa2UgaXQgc2hvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuRmluYWxseSwgaXMgdGhlcmUgYW55IGNoYW5jZSBvZiB1c2VyLXNwYWNlIGNvcGllcywgdW5pbml0aWFsaXplZCBidWZmZXJzLCBvciBpbmZvcm1hdGlvbiBsZWFrcz8gQWJzb2x1dGVseSBub3QuIFRoaXMgY2hhbmdlIGlzIGVudGlyZWx5IHdpdGhpbiBrZXJuZWwgc3BhY2UgYW5kIGRlYWxzIHdpdGggaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuXG5TbywgSSdtIGNvbmNsdWRpbmcgdGhhdCBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGFkZHJlc3NlcyBwb3RlbnRpYWwgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWVzIGR1cmluZyBsaXN0IHRyYXZlcnNhbCwgbm90IG1lbW9yeSBpbml0aWFsaXphdGlvbiBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gS0FTQU4gYW5kIExPQ0tERVAgd2lsbCBjb3ZlciB0aG9zZSBjb25jdXJyZW5jeSBhbmQgbG9jayBpc3N1ZXMuXG5cbkknbSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LiBBbGwgdGhlIGNyaXRlcmlhIGNoZWNrIG91dC4gVGltZSB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0NywiT3V0cHV0VG9rZW5zIjoyMDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQwMTozODoxNi43MDY1ODIxNzlaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBpdGVyYXRlX3N1cGVyc190eXBlKClgIGluIGBmcy9zdXBlci5jYCB0byBpdGVyYXRlIG92ZXIgdGhlIGdsb2JhbCBgc3VwZXJfYmxvY2tzYCBsaXN0IHZpYSBgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNiLCBcXHUwMDI2c3VwZXJfYmxvY2tzLCBzX2xpc3QpYCBhbmQgZmlsdGVyIGJ5IGBzYi1cXHUwMDNlc190eXBlID09IHR5cGVgLCByYXRoZXIgdGhhbiBpdGVyYXRpbmcgYHR5cGUtXFx1MDAzZWZzX3N1cGVyc2Agd2l0aCBgaGxpc3RfZm9yX2VhY2hfZW50cnlgLiBUaGlzIGVuc3VyZXMgbGlzdCBjdXJzb3Igc2FmZXR5IHdoaWxlIGBzYl9sb2NrYCBpcyBkcm9wcGVkIGR1cmluZyBzdXBlcmJsb2NrIGl0ZXJhdGlvbi5cXG5cXG5UaGlzIGNoYW5nZSBwdXJlbHkgYWZmZWN0cyBsaXN0IHRyYXZlcnNhbCwgc3luY2hyb25pemF0aW9uLCBhbmQgc3VwZXJibG9jayByZWZlcmVuY2UgbWFuYWdlbWVudC4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0dXJlIHBhZGRpbmcsIG9yIGtlcm5lbC10by11c2VyIGNvcGllcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd2l0aCBsaXN0IHRyYXZlcnNhbCwgY29uY3VycmVuY3ksIG9yIHJlZmVyZW5jZSBjb3VudGluZyBhcmUgYWRkcmVzc2FibGUgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLCBub3QgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGl0ZXJhdGVfc3VwZXJzX3R5cGUoKWAgaW4gYGZzL3N1cGVyLmNgIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZ2xvYmFsIGBzdXBlcl9ibG9ja3NgIGxpc3QgdmlhIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uoc2IsIFxcdTAwMjZzdXBlcl9ibG9ja3MsIHNfbGlzdClgIGFuZCBmaWx0ZXIgYnkgYHNiLVxcdTAwM2VzX3R5cGUgPT0gdHlwZWAsIHJhdGhlciB0aGFuIGl0ZXJhdGluZyBgdHlwZS1cXHUwMDNlZnNfc3VwZXJzYCB3aXRoIGBobGlzdF9mb3JfZWFjaF9lbnRyeWAuIFRoaXMgZW5zdXJlcyBsaXN0IGN1cnNvciBzYWZldHkgd2hpbGUgYHNiX2xvY2tgIGlzIGRyb3BwZWQgZHVyaW5nIHN1cGVyYmxvY2sgaXRlcmF0aW9uLlxcblxcblRoaXMgY2hhbmdlIHB1cmVseSBhZmZlY3RzIGxpc3QgdHJhdmVyc2FsLCBzeW5jaHJvbml6YXRpb24sIGFuZCBzdXBlcmJsb2NrIHJlZmVyZW5jZSBtYW5hZ2VtZW50LiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBzdHJ1Y3R1cmUgcGFkZGluZywgb3Iga2VybmVsLXRvLXVzZXIgY29waWVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3aXRoIGxpc3QgdHJhdmVyc2FsLCBjb25jdXJyZW5jeSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGFyZSBhZGRyZXNzYWJsZSBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMsIG5vdCBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[1] Phase: Succeeded StartedAt: 2026-09-04 01:38:28 +0000 UTC FinishedAt: 2026-09-04 01:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 01:38:28 +0000 UTC FinishedAt: 2026-09-04 01:38:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2] Phase: Succeeded StartedAt: 2026-09-04 01:38:28 +0000 UTC FinishedAt: 2026-09-04 05:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 01:38:28 +0000 UTC FinishedAt: 2026-09-04 05:18:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 01:38:28 +0000 UTC FinishedAt: 2026-09-04 01:38:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 01:38:28 +0000 UTC FinishedAt: 2026-09-04 01:38:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8kzpf/series-workflow8kzpf-convert-artifact-318124962/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 01:38:39 +0000 UTC FinishedAt: 2026-09-04 01:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 01:38:39 +0000 UTC FinishedAt: 2026-09-04 01:55: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:*5634053b-ccb9-45b5-b4c7-9ca997cd84dc,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-workflow8kzpf/series-workflow8kzpf-convert-artifact-318124962/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": "f4ffed7a-3e46-48ed-bd52-9c5f29d98b8e", "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-workflow8kzpf/series-workflow8kzpf-build-action-3203642720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 01:38:39 +0000 UTC FinishedAt: 2026-09-04 01:55: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:*5634053b-ccb9-45b5-b4c7-9ca997cd84dc,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-workflow8kzpf/series-workflow8kzpf-convert-artifact-318124962/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": "f4ffed7a-3e46-48ed-bd52-9c5f29d98b8e", "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-workflow8kzpf/series-workflow8kzpf-build-action-3203642720/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 01:55:14 +0000 UTC FinishedAt: 2026-09-04 01:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 01:55:14 +0000 UTC FinishedAt: 2026-09-04 01:55:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 01:55:14 +0000 UTC FinishedAt: 2026-09-04 01:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 01:55:14 +0000 UTC FinishedAt: 2026-09-04 01:55:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8kzpf/series-workflow8kzpf-convert-artifact-1680736509/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 01:55:24 +0000 UTC FinishedAt: 2026-09-04 01:57:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 01:55:24 +0000 UTC FinishedAt: 2026-09-04 01:57:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4ffed7a-3e46-48ed-bd52-9c5f29d98b8e,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-workflow8kzpf/series-workflow8kzpf-build-action-3203642720/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-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 01:57:14 +0000 UTC FinishedAt: 2026-09-04 01:57:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 01:57:14 +0000 UTC FinishedAt: 2026-09-04 01:57:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 01:57:14 +0000 UTC FinishedAt: 2026-09-04 02:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 01:57:14 +0000 UTC FinishedAt: 2026-09-04 02:13:37 +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:*5634053b-ccb9-45b5-b4c7-9ca997cd84dc,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-workflow8kzpf/series-workflow8kzpf-convert-artifact-1680736509/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": "6ea0c22a-8607-461f-92e2-7072447fe728", "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-workflow8kzpf/series-workflow8kzpf-build-action-2897068377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 01:57:14 +0000 UTC FinishedAt: 2026-09-04 02:13:27 +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:*5634053b-ccb9-45b5-b4c7-9ca997cd84dc,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-workflow8kzpf/series-workflow8kzpf-convert-artifact-1680736509/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": "6ea0c22a-8607-461f-92e2-7072447fe728", "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-workflow8kzpf/series-workflow8kzpf-build-action-2897068377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 02:13:37 +0000 UTC FinishedAt: 2026-09-04 02:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 02:13:37 +0000 UTC FinishedAt: 2026-09-04 02:13:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 02:13:37 +0000 UTC FinishedAt: 2026-09-04 02:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 02:13:37 +0000 UTC FinishedAt: 2026-09-04 02:15:26 +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:*6ea0c22a-8607-461f-92e2-7072447fe728,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-workflow8kzpf/series-workflow8kzpf-build-action-2897068377/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-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 05:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 05:18:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*f4ffed7a-3e46-48ed-bd52-9c5f29d98b8e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ea0c22a-8607-461f-92e2-7072447fe728,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-workflow8kzpf/series-workflow8kzpf-build-action-3203642720/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-workflow8kzpf/series-workflow8kzpf-build-action-2897068377/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 02:15:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 02:15:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8kzpf/series-workflow8kzpf-convert-artifact-509789570/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 02:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 02:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 02:15:36 +0000 UTC FinishedAt: 2026-09-04 02:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 02:15:46 +0000 UTC FinishedAt: 2026-09-04 05:18:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8kzpf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iterate_supers_type","cifs_get_dfs_tcon_super"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"eb85469f0dd69ca145d63117450e14c31f67f698","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","CIFS_DFS_UPCALL"],"series_id":"d498d30e-3a53-452b-873f-eb6a3478fd66","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 02:15:46 +0000 UTC FinishedAt: 2026-09-04 05:17:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4ffed7a-3e46-48ed-bd52-9c5f29d98b8e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ea0c22a-8607-461f-92e2-7072447fe728,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-workflow8kzpf/series-workflow8kzpf-build-action-3203642720/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-workflow8kzpf/series-workflow8kzpf-build-action-2897068377/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-workflow8kzpf/series-workflow8kzpf-convert-artifact-509789570/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,}