Name: series-workflowlhf6m Phase: Succeeded StartedAt: 2026-08-31 19:36:20 +0000 UTC FinishedAt: 2026-08-31 23:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[0] Phase: Succeeded StartedAt: 2026-08-31 19:36:20 +0000 UTC FinishedAt: 2026-08-31 20:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 19:36:20 +0000 UTC FinishedAt: 2026-08-31 20:04:33 +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": "b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_direct_IO" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNwbHVzX2RpcmVjdF9JTygpYCBpbiBgZnMvaGZzcGx1cy9pbm9kZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSBleHBhbmRpbmcgdGhlIGZpbGUgdmlhIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCwgZmx1c2hpbmcgZGlydHkgcGFnZWNhY2hlIHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgZGVsZWdhdGluZyB0byBgYmxvY2tkZXZfZGlyZWN0X0lPKClgLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChlLmcuLCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rIGF0dHJpYnV0ZXMpLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlzaXplYCwgYHN0YXJ0X29mZmAsIGBlbmRfb2ZmYCwgYHN0YXJ0X3BhZ2VgLCBgZW5kX3BhZ2VgLCBgcmV0YCkgYXJlIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U7IG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cbjQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIERJTyBvZmZzZXRzLCBwYWdlIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyAoc3VjaCBhcyBgaW5vZGVfZGlvX3dhaXRgKSwgb3IgYnVmZmVyIGJvdW5kcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgaW4gSEZTJiM0MzsgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMmIzQzOyBtb3VudGVkIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDhiYjgxMGQ4YjYwNzdlZWYyYTQ1YTczYWViOGJkZWI0YmRmM2Y5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjAxOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggNjE1M2U1Y2M2ZWI2NS4uN2U2Y2M0ZGRlOWYyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTI1LDkgJiM0MzsxMjUsNDQgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdGxvZmZfdCBpc2l6ZTtcbiBcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuJiM0MztcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiBcdHNzaXplX3QgcmV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbiYjNDM7XHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuJiM0MztcdFx0bG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbiYjNDM7XHRcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuJiM0MztcdFx0ZW5kX29mZiA9IChlbmQgXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1xuJiM0MztcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiBcbiBcdC8qXG5AQCAtMTM1LDggJiM0MzsxNzAsNyBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuLVx0XHRsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXHRcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiYjNDM7XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFxuIFx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbiBcdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgaW4gSEZTJiM0MzsgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMmIzQzOyBtb3VudGVkIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDhiYjgxMGQ4YjYwNzdlZWYyYTQ1YTczYWViOGJkZWI0YmRmM2Y5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIwOjAxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jCmluZGV4IDYxNTNlNWNjNmViNjUuLjdlNmNjNGRkZTlmMjYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lub2RlLmMKQEAgLTEyNSw5ICYjNDM7MTI1LDQ0IEBAIHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKQogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJbG9mZl90IGlzaXplOwogCXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwogCXNzaXplX3QgcmV0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suCiYjNDM7CSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IGlvY2ItJmd0O2tpX3BvcyAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkgewomIzQzOwkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKJiM0MzsJCWxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTsKJiM0MzsKJiM0MzsJCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQomIzQzOwkJICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLgomIzQzOwkJICovCiYjNDM7CQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiYjNDM7CiYjNDM7CQlyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXN0YXJ0X29mZiA9IGlzaXplOwomIzQzOwkJZW5kX29mZiA9IChlbmQgJmd0OyAwKSA/IGVuZCAtIDEgOiBlbmQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzdGFydF9wYWdlID0gc3RhcnRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CQllbmRfcGFnZSA9IGVuZF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsKJiM0MzsJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTsKJiM0MzsJfQomIzQzOwogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwogCiAJLyoKQEAgLTEzNSw4ICYjNDM7MTcwLDcgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4KIAkgKi8KIAlpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyByZXQgJmx0OyAwKSkgewotCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWxvZmZfdCBlbmQgPSBpb2NiLSZndDtraV9wb3MgJiM0MzsgY291bnQ7CiYjNDM7CQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAogCQlpZiAoZW5kICZndDsgaXNpemUpCiAJCQloZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSEZTJiM0MzsgRGlyZWN0IEkvTyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgYGZzL2hmc3BsdXMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaGZzcGx1c19kaXJlY3RfSU9gLiBIbW0sIGl0JiMzOTtzIGFkZGluZyBzb21lIGxvZ2ljIHRvIGhhbmRsZSBkaXJlY3Qgd3JpdGVzIHRoYXQgZXh0ZW5kICpiZXlvbmQqIHRoZSBjdXJyZW50IGVuZC1vZi1maWxlIChFT0YpLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgdHJpY2t5LiBMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBjb21tb24gcmVxdWlyZW1lbnQuCgpGaXJzdCwgYSBjaGVjazogaWYgaXQmIzM5O3MgYSAqd3JpdGUqIG9wZXJhdGlvbiBhbmQgdGhlIHdyaXRlIHBvc2l0aW9uIChgaW9jYi0mZ3Q7a2lfcG9zYCkgZ29lcyBiZXlvbmQgdGhlIGN1cnJlbnQgZmlsZSBzaXplIChgaV9zaXplX3JlYWQoaW5vZGUpYCksIHdlIGVudGVyIHRoaXMgbmV3IGJsb2NrLiBUaGUgbG9naWMgdGhlbiB1c2VzIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCB0byBleHBhbmQgdGhlIGZpbGUuIEJ1dCBiZWZvcmUgdGhhdCwgdGhlcmUgaXMgYW4gYGlub2RlX2Rpb193YWl0KGlub2RlKWAgY2FsbC4gSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hhdCBESU8gaXQgaXMgd2FpdGluZyBmb3IsIGFuZCB3aHkuIEV4cGFuZGluZyB0aGUgZmlsZSBzaXplIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiwgaXQgd3JpdGVzIGJhY2sgdG8gZGlzayB1c2luZyBgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZSgpYCwgZW5zdXJpbmcgdGhlIGV4cGFuZGVkIHBvcnRpb24gaXMgYWN0dWFsbHkgd3JpdHRlbiBvdXQuIFRoZSB1c2Ugb2YgYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKClgIGlzIGNyaXRpY2FsIOKAkyBpdCYjMzk7cyBpbnZhbGlkYXRpbmcgdGhlIHBhZ2VzIHdlJiMzOTt2ZSBqdXN0IGV4dGVuZGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzYWZlZ3VhcmQ7IHByZXZlbnRpbmcgc3RhbGUgZGF0YSBmcm9tIGxpbmdlcmluZyBpbiB0aGUgcGFnZSBjYWNoZS4KCk5vdywgbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGBLY29uZmlnYCBhbmQgc3Vycm91bmRpbmcgY29kZSB1c2luZyBteSB1c3VhbCB0b29sa2l0LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3Zlcmxvb2tlZC4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCB0aGUgYmFzZXMgaGVyZSB3aXRoIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGRpcmVjdCBJL08gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEZTUExVUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xuZnMvaGZzcGx1cy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2hmc3BsdXMvS2NvbmZpZy0xNy1cbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG5mcy9oZnNwbHVzL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvZiBgSEZTUExVU19GU2AuIE5vIHBvaW50IGluIGd1ZXNzaW5nOyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBgZnMvaGZzcGx1cy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpdmVzLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvcHRpb25zLCBvciBoYXJkd2FyZSBzdXBwb3J0IGFyZSBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHBvdGVudGlhbGx5IHNwZWNpZmljIFNDU0kgb3IgU0FUQSBkcml2ZXJzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHRoZSBiZWRyb2NrOyB1bmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyBIRlMmIzQzOyBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBlY29zeXN0ZW0uIE5vIHVzZSBidWlsZGluZyBvbiBzYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBIRlNQTFVTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgTkxTXG4gICA3Olx0XHRzZWxlY3QgTkxTX1VURjhcbiAgIDg6XHRcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuICAxMTpcdFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUyYjNDM7IGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXG4gIDE0Olx0XHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcbiAgMTU6XHRcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxuICAxNjpcdFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDIwOlx0XHRkZXBlbmRzIG9uIEhGU1BMVVNfRlMgXHUwMDI2XHUwMDI2IEtVTklUXG4gIDIxOlx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0ICBUaGlzIGJ1aWxkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0uXG4gIDI0Olx0XG4gIDI1Olx0XHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1Z1xuICAyNjpcdFx0ICBsb2cgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvclxuICAyNzpcdFx0ICBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uXG4gIDI4Olx0XHQgIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZVxuICAzMTpcdFx0ICByZWZlciB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBGaWxlIFN5c3RlbSBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9oZnNwbHVzL2lub2RlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW5vZGUtcmVsYXRlZCBsb2dpYyBmb3IgSEZTJiM0MzssIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGlub2RlIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMuIEkgd2lsbCBjb25jZW50cmF0ZSBvbiB0aGUgY2hhbmdlZCBwb3J0aW9ucyBhbmQgbG9vayBmb3Igd2hhdCBzeW1ib2xzIHdlcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGUgcmVsZXZhbnQgYXJlYXMuIEdldHRpbmcgYSBnb29kIGdyYXNwIG9uIHRoZSBjaGFuZ2VkIHN5bWJvbHMgaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDExMTpcdFx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZub2RlLVx1MDAzZXJlZmNudCkpIHtcbiAxMTI6XHRcdFx0XHRcdHJlcyA9IGZhbHNlO1xuIDExMzpcdFx0XHRcdFx0YnJlYWs7XG4gMTE0Olx0XHRcdFx0fVxuIDExNTpcdFx0XHRcdGhmc19ibm9kZV91bmhhc2gobm9kZSk7XG4gMTE2Olx0XHRcdFx0aGZzX2Jub2RlX2ZyZWUobm9kZSk7XG4gMTE3Olx0XHRcdH0gd2hpbGUgKC0taSBcdTAwMjZcdTAwMjYgbmlkeCBcdTAwM2MgdHJlZS1cdTAwM2Vub2RlX2NvdW50KTtcbiAxMTg6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuIDExOTpcdFx0fVxuIDEyMDpcdFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gMTIxOlx0fVxuIDEyMjpcdFxuIDEyMzpcdHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIDEyNDpcdHtcbiAxMjU6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIDEyNjpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiAxMjc6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gMTI4Olx0XHRsb2ZmX3QgaXNpemU7XG4gMTI5Olx0XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiAxMzA6XHRcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiAxMzE6XHRcdHNzaXplX3QgcmV0O1xuIDEzMjpcdFxuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXG4gMTM1Olx0XHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4gMTM2Olx0XHQgKi9cbiAxMzc6XHRcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuIDEzODpcdFx0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuIDEzOTpcdFx0XHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHQvKlxuIDE0NDpcdFx0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbiAxNDU6XHRcdFx0ICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIDE0ODpcdFxuIDE0OTpcdFx0XHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuIDE1MDpcdFx0XHRpZiAocmV0KVxuIDE1MTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTUyOlx0XG4gMTUzOlx0XHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuIDE1NDpcdFx0XHRlbmRfb2ZmID0gKGVuZCBcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4gMTU3Olx0XHRcdGlmIChyZXQpXG4gMTU4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNTk6XHRcbiAxNjA6XHRcdFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiAxNjE6XHRcdFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDE2MjpcdFxuIDE2MzpcdFx0XHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XG4gMTY0Olx0XHR9XG4gMTY1Olx0XG4gMTY2Olx0XHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiAxNjc6XHRcbiAxNjg6XHRcdC8qXG4gMTY5Olx0XHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcbiAxNzA6XHRcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4gMTcxOlx0XHQgKi9cbiAxNzI6XHRcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuIDE3MzpcdFx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiAxNzQ6XHRcbiAxNzU6XHRcdFx0aWYgKGVuZCBcdTAwM2UgaXNpemUpXG4gMTc2Olx0XHRcdFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcbiAxNzc6XHRcdH1cbiAxNzg6XHRcbiAxNzk6XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0fVxuIDE4MTpcdFxuIDE4MjpcdHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDE4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIDE4NDpcdHtcbiAxODU6XHRcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuIDE4NjpcdH1cbiAxODc6XHRcbiAxODg6XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiAxODk6XHRcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEhGUyYjNDM7IERpcmVjdCBJL08gVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2Agc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBoZnNwbHVzX2RpcmVjdF9JT2AgY29tZXMgaW50byBwbGF5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGl0cyBpbnRlcmFjdGlvbnMsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJlY3QgSS9PIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSBmb3IgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIGJ5cGFzc2luZyB0aGUgcGFnZSBjYWNoZSwgYW5kIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGFyb3VuZCBkYXRhIGNvbnNpc3RlbmN5LiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgbGFyZ2VyIGZpbGUgc3lzdGVtIGNvbnRleHQgdG8gc2VlIGhvdyBkYXRhIGlzIHJlYWQvd3JpdHRlbiB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYWxsIHRoZSByZWxldmFudCBvcGVyYXRpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgaXMgaW1wbGVtZW50ZWQgYmVjYXVzZSBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgZGlyZWN0IEkvTyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jPTYyPXN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0xMjItXG5mcy9oZnNwbHVzL2lub2RlLmM6MTIzOnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTEyNC17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTIwMD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMjA2LVx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG5mcy9oZnNwbHVzL2lub2RlLmM6MjA3Olx0LmRpcmVjdF9JT1x0PSBoZnNwbHVzX2RpcmVjdF9JTyxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMDgtXHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX3dyaXRlcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhGUyYjNDM7IERpcmVjdCBJL08gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGhmc3BsdXNfZGlyZWN0X0lPYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCB3aXRoaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhhdCBmaWxlLCBidXQgaXQmIzM5O3MgYWxzbyBhc3NpZ25lZCB0byBgaGZzcGx1c19hb3BzLmRpcmVjdF9JT2AuIEhtbSwgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbiBleHBvcnRlZCwgb3IgYXQgbGVhc3QsIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBwbGF5cyBhIHJvbGUgaW4gdGhpcyBhcmVhLiBJIG5lZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKTGV0JiMzOTtzIGNsYXJpZnkgd2hhdCYjMzk7cyBhdmFpbGFibGUgdG8gbWU6IGBoZnNwbHVzX2RpcmVjdF9JT2AgaXMgZGVmaW5pdGVseSBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHNldHRpbmcgdXAgdGhlIGBoZnNwbHVzX2FvcHNgIHN0cnVjdCBvciBmaWxlIG9wZXJhdGlvbnMgb24gaW5vZGVzIGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgdG8gYGZzL2hmc3BsdXMvaW5vZGUuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc3BsdXNfYW9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9idHJlZS5jPTEzMz1zdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTI1MC0gZnJlZV9pbm9kZTpcbmZzL2hmc3BsdXMvYnRyZWUuYzoyNTE6XHR0cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbmZzL2hmc3BsdXMvYnRyZWUuYy0yNTItXHRpcHV0KHRyZWUtXHUwMDNlaW5vZGUpO1xuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTQzOD12b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00NDAtLyogaW5vZGUuYyAqL1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6NDQxOmV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcztcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQ0Mi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTE4OD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMTk5LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjIwMDpjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMDEtXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ0Nj1zdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00ODctXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDg4Olx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL2lub2RlLmMtNDg5LVx0XHRoaXAtXHUwMDNlY2x1bXBfYmxvY2tzID0gc2JpLVx1MDAzZWRhdGFfY2x1bXBfYmxvY2tzO1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00OTMtXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDk0Olx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL2lub2RlLmMtNDk1LVx0XHRoaXAtXHUwMDNlY2x1bXBfYmxvY2tzID0gMTtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9NTY2PWludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjI1LVx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XG5mcy9oZnNwbHVzL2lub2RlLmM6NjI2Olx0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbmZzL2hmc3BsdXMvaW5vZGUuYy02MjctXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTYyOS1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjYzMDpcdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL2lub2RlLmMtNjMxLVx0XHR9IGVsc2Uge1xuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz0yOD1zdGF0aWMgaW50IGhmc3BsdXNfc3lzdGVtX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtNDItXHRcdGhmc3BsdXNfaW5vZGVfcmVhZF9mb3JrKGlub2RlLCBcdTAwMjZ2aGRyLVx1MDAzZWFsbG9jX2ZpbGUpO1xuZnMvaGZzcGx1cy9zdXBlci5jOjQzOlx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL3N1cGVyLmMtNDQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgSEZTJiM0MzsgUmVndWxhciBGaWxlIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGZvY3VzaW5nIG9uIEhGUyYjNDM7IGFuZCBzcGVjaWZpY2FsbHkgd2FudCB0byBtYXAgb3V0IHRoZSBjb21tb24gZmlsZSBvcGVyYXRpb25zIGVtcGxveWVkIHdoZW4gZGVhbGluZyB3aXRoIHJlZ3VsYXIgZmlsZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBiYXNpY3M7IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZWZmaWNpZW50KiBhbmQgKmlkaW9zeW5jcmF0aWMqIHdheXMgSEZTJiM0MzsgaGFuZGxlcyB0aGVzZSBmaWxlcyB1bmRlciB0aGUgaG9vZC4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBhIGdlbmVyYWwgbGlzdDsgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgcmVjb25zdHJ1Y3QgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhdCBwbGF5LgoKU28sIEkmIzM5O20gY29uc2lkZXJpbmc6IHdoYXQgb3BlcmF0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGhlYXZpbHkgb3B0aW1pemVkIGR1ZSB0byBmcmVxdWVudCB1c2U/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIEItdHJlZSBzdHJ1Y3R1cmUgb24gdGhlc2Ugb3BlcmF0aW9ucz8gSG93IGRvZXMgdGhlIGV4dGVudC1iYXNlZCBhbGxvY2F0aW9uIHdvcmsgaW4gcHJhY3RpY2U/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB3b25kZXJpbmc6CgoqICAgKipGaWxlIENyZWF0aW9uOioqIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiBhbGxvY2F0aW5nIGJsb2NrcyBpbiB0aGUgY2F0YWxvZyBCLXRyZWUsIHRoZSBhbGxvY2F0aW9uIGZpbGUsIGFuZCBhbnkgbWV0YWRhdGEgYXR0cmlidXRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHRoZSByb2xlIG9mIHRoZSBhbGxvY2F0aW9uIGJpdG1hcC4KKiAgICoqRmlsZSBPcGVuaW5nOioqIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFjY2Vzc2VkIGR1cmluZyBhbiBgb3BlbigpYCBjYWxsPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjYXRhbG9nIHRyZWUgbG9va3VwLCB2b2x1bWUgaGVhZGVyIGFjY2Vzc2VzIChpZiBhbnkpLCBhbmQgcG9zc2libGUgY2FjaGluZyBzdHJhdGVnaWVzIGF0IHBsYXkuCiogICAqKkZpbGUgUmVhZGluZy9Xcml0aW5nOioqIEhvdyBkb2VzIEhGUyYjNDM7IGhhbmRsZSBleHRlbnQtYmFzZWQgYWxsb2NhdGlvbiBkdXJpbmcgc2VxdWVudGlhbCBJL08gdmVyc3VzIHJhbmRvbSBhY2Nlc3M/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBibG9jayBtYXBwaW5nIHByb2Nlc3MgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24uIEhvdyBkb2VzIGpvdXJuYWxpbmcgZmFjdG9yIGluIGhlcmU/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiB0aGUgYmxvY2sgc2l6ZSBvbiBwZXJmb3JtYW5jZT8gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBsYXJnZSBmaWxlcyBvciBzcGFyc2UgZmlsZXM/CiogICAqKkZpbGUgVHJ1bmNhdGlvbjoqKiBIb3cgaXMgZmlsZSB0cnVuY2F0aW9uIGhhbmRsZWQ/IERvZXMgaXQgaW52b2x2ZSBjbGVhcmluZyBibG9ja3MgYW5kIHVwZGF0aW5nIHRoZSBhbGxvY2F0aW9uIGJpdG1hcD8gV2hhdCYjMzk7cyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmb3IgZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3k/CiogICAqKk1ldGFkYXRhIFVwZGF0ZXM6KiogVGhpcyBpcyBpbXBvcnRhbnQg4oCTIHNwZWNpZmljYWxseSwgdGhlIGVmZmljaWVudCB3YXkgdGhhdCBhdHRyaWJ1dGVzIGxpa2UgbW9kaWZpY2F0aW9uIHRpbWUsIGZpbGUgc2l6ZSwgcGVybWlzc2lvbnMsIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBtYW5hZ2VkLiBBcmUgdGhlc2UgYXR0cmlidXRlcyBkaXJlY3RseSBzdG9yZWQgaW4gdGhlIGNhdGFsb2cgQi10cmVlLCBvciBhcmUgdGhlcmUgc2VwYXJhdGUgYXR0cmlidXRlIEItdHJlZXM/IEkmIzM5O20gbG9va2luZyBmb3IgZGV0YWlscy4KKiAgICoqRmlsZSBEZWxldGlvbjoqKiBIb3cgYXJlIGZpbGUgZXh0ZW50cyBkZWFsbG9jYXRlZD8gSXMgdGhlIGNhdGFsb2cgZW50cnkgc2ltcGx5IHJlbW92ZWQgYW5kIGJsb2NrcyBtYXJrZWQgYXMgZnJlZSBpbiB0aGUgYWxsb2NhdGlvbiBmaWxlPyBBcmUgdGhlcmUgYW55IGRlZmVycmVkIG9wZXJhdGlvbnMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXM/IFdoYXQgYWJvdXQgaGFyZCBsaW5rcz8KKiAgICoqUmUtZW51bWVyYXRpb246KiogSG93IGFyZSBmaWxlIGFuZCBkaXJlY3RvcnkgZW51bWVyYXRpb25zIGltcGxlbWVudGVkPyBJIGFzc3VtZSB0aGlzIGlzIGEgQi10cmVlIHdhbGssIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGV0YWlscy4KKiAgICoqQ29tcHJlc3Npb246KiogSG93IGlzIGNvbXByZXNzaW9uIGhhbmRsZWQ/IEkgbmVlZCB0byBrbm93IGhvdyBjb21wcmVzc2lvbiBpcyBtYW5hZ2VkIGFuZCB1bm1hbmFnZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGVhY2ggb2YgdGhlc2Ugc2NlbmFyaW9zLCBhbmQgSSYjMzk7bGwgcHJvYmFibHkgcmVmZXIgdG8gc29tZSBIRlMmIzQzOyBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGlmIEkmIzM5O20gZ29pbmcgdG8gcHJvdmlkZSBhY2N1cmF0ZSBhbnN3ZXJzLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNydWNpYWwgY29tcG9uZW50cyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGluIG1hbmFnaW5nIHJlZ3VsYXIgZmlsZXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBleGVyY2lzZSBpbiBtZW1vcnkgcmVjYWxsIGFuZCBjb25jZXB0dWFsIG9yZ2FuaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzcGx1c19maWxlX29wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaW5vZGUuYz00MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00MzItXG5mcy9oZnNwbHVzL2lub2RlLmM6NDMzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuZnMvaGZzcGx1cy9pbm9kZS5jLTQzNC1cdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz00NDY9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNDg2LVx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDg3Olx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmhmc3BsdXNfZmlsZV9vcGVyYXRpb25zO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTQ4OC1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz01NjY9aW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy02MjQtXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjYyNTpcdFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmhmc3BsdXNfZmlsZV9vcGVyYXRpb25zO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTYyNi1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBGaWxlIE9wZXJhdGlvbnMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgaGZzcGx1c19maWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdHMgYXQgYSBsb3cgbGV2ZWwuIFdoYXQgZG9lcyBBcHBsZSYjMzk7cyBIRlMmIzQzOyBpbXBsZW1lbnRhdGlvbiByZWFsbHkgZG8gd2hlbiBoYW5kbGluZyBmaWxlIG9wZXJhdGlvbnM/IEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcmVhZCwgd3JpdGUsIHRydW5jYXRlLCBhbmQgYWxsIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7dmUgYWRkcmVzc2VkIHNvbWUgb2YgdGhlIG1vcmUgc3VidGxlIGNvbXBsZXhpdGllcy4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucz8gRWRnZSBjYXNlcyBoYW5kbGVkIGVsZWdhbnRseT8gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpZGlvc3luY3Jhc2llcy4gSXQmIzM5O3MgSEZTJiM0MzssIGFmdGVyIGFsbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBzdHJ1Y3R1cmUgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdC5maWxlYXR0cl9zZXRcdD0gaGZzcGx1c19maWxlYXR0cl9zZXQsXG4gNDMxOlx0fTtcbiA0MzI6XHRcbiA0MzM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiA0MzQ6XHRcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIDQzNTpcdFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIDQzNjpcdFx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4gNDM3Olx0XHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gNDM4Olx0XHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiA0Mzk6XHRcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiA0NDA6XHRcdC5mc3luY1x0XHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcbiA0NDE6XHRcdC5vcGVuXHRcdD0gaGZzcGx1c19maWxlX29wZW4sXG4gNDQyOlx0XHQucmVsZWFzZVx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcbiA0NDM6XHRcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXG4gNDQ0Olx0fTtcbiA0NDU6XHRcbiA0NDY6XHRzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIDQ0NzpcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIDQ0ODpcdHtcbiA0NDk6XHRcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYSBQb3RlbnRpYWwgSEZTJiM0MzsgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IGRpcmVjdCBJL08gd3JpdGVzIHdvcmsgaW4gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB3aXRoIGBPX0RJUkVDVGAgZW5hYmxlZC4gVGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IHN0YW5kYXJkOiBgZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXJgIGRvd24gdG8gYGhmc3BsdXNfZGlyZWN0X0lPYC4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGlmIGEgd3JpdGUgaGFwcGVucyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSAoRU9GKSwgYW5kIGl0JiMzOTtzIGEgZGlyZWN0IHdyaXRlLCB3ZSBoaXQgYSBzZXF1ZW5jZSB0aGF0IGludm9sdmVzIGBpbm9kZV9kaW9fd2FpdGAsIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAsIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlYCwgYW5kIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuCgpUaGF0IHNlcXVlbmNlIHNjcmVhbXMgcG90ZW50aWFsIHRyb3VibGUuIEl0JiMzOTtzIGluIHRoZSBmaWxlc3lzdGVtIGNvcmUsIHJpZ2h0IHRoZXJlIGluIGBmcy9oZnNwbHVzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHRocm91Z2ggUUVNVSBhbmQgZWFzaWx5IHRlc3RhYmxlIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLiBZb3UganVzdCBuZWVkIHRvIG1vdW50IGFuIEhGUyYjNDM7IGltYWdlIG9yIGxvb3BiYWNrIGRldmljZSwgb3BlbiBhIGZpbGUgd2l0aCBgT19ESVJFQ1RgLCBhbmQgd3JpdGUgcGFzdCBFT0YuIEJhbmchIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhCgpOb3csIGJlZm9yZSBJIGdldCB0b28gZXhjaXRlZCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHdlaXJkIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgY2hlY2sgYGZzL2hmc3BsdXMvS2NvbmZpZ2AuIFJpZ2h0LCBgSEZTUExVU19GU2AgZGVwZW5kcyBvbiBgQkxPQ0tgLCBzbyB0aGF0JiMzOTtzIHRoZSBvbmx5IGltbWVkaWF0ZSBkZXBlbmRlbmN5LiBMZXQgbWUgc2NhbiBgZnMvS2NvbmZpZ2AgYW5kIGBmcy9NYWtlZmlsZWAgbW9yZSBnZW5lcmFsbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYnVpbGQgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBgZnMvaGZzcGx1c2AgaXMgY29tcGlsZWQuIEdvdHRhIGNvdmVyIGFsbCBiYXNlcyBiZWZvcmUgcnVubmluZyB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc3BsdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSVNPOTY2MF9GUylcdCYjNDM7PSBpc29mcy9cbmZzL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IRlNQTFVTX0ZTKVx0JiM0Mzs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTJiM0MztcbmZzL01ha2VmaWxlLTgyLW9iai0kKENPTkZJR19IRlNfRlMpXHRcdCYjNDM7PSBoZnMvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4OTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGZzL2hmc3BsdXMvTWFrZWZpbGVgIGZpbGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgcmVsZXZhbnQgTWFrZWZpbGVzIGhpZGluZyBlbHNld2hlcmUuIFdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhbnl0aGluZyB3aGVuIGRlYWxpbmcgd2l0aCBhIGZpbGVzeXN0ZW0gYXMgY29tcGxleCBhcyBIRlMgUGx1cy4gSSYjMzk7dmUgZ290IHRvIGNvdmVyIGFsbCBteSBiYXNlcy4gU28sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgcGFzcyDigJMgYXJlIHRoZXJlIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZsb2F0aW5nIGFyb3VuZCBpbiBvdGhlciBkaXJlY3Rvcmllcz8gTGV0JiMzOTtzIGNoZWNrLiBUaW1lIHRvIGRvIGEgcXVpY2sgc2FuaXR5IHN3ZWVwIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMjIE1ha2VmaWxlIGZvciB0aGUgbGludXggaGZzcGx1cyBmaWxlc3lzdGVtIHJvdXRpbmVzLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfSEZTUExVU19GUykgJiM0Mzs9IGhmc3BsdXMub1xuICAgNzpcdFxuICAgODpcdGhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG4gICA5Olx0XHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4gIDEwOlx0XHRcdGF0dHJpYnV0ZXMubyB4YXR0ci5vIHhhdHRyX3VzZXIubyB4YXR0cl9zZWN1cml0eS5vIHhhdHRyX3RydXN0ZWQub1xuICAxMTpcdFxuICAxMjpcdCMgS1VuaXQgdGVzdHNcbiAgMTM6XHRvYmotJChDT05GSUdfSEZTUExVU19LVU5JVF9URVNUKSAmIzQzOz0gdW5pY29kZV90ZXN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSEZTJiM0MzsgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIEhGUyYjNDM7IGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQtdGltZSBvcHRpb25zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZyBpbiBgZnMvaGZzcGx1cy9LY29uZmlnYC4gUmlnaHQsIGl0IGBkZXBlbmRzIG9uIEJMT0NLYCwgc2VsZWN0cyBgQlVGRkVSX0hFQURgLCBgTkxTYCwgYE5MU19VVEY4YCwgYW5kIGBMRUdBQ1lfRElSRUNUX0lPYC4gU28sIGBIRlNQTFVTX0ZTYCBpcyB0aGUgY29yZSwgYW5kIGBCTE9DS2AgaXMgYSBwcmVyZXF1aXNpdGUsIGFzIGV4cGVjdGVkLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGltcG9ydGFudCBzeW1ib2xzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zLCBwYXJ0aWN1bGFybHkgdG8gdGhlIGRpcmVjdCBJL08gcGF0aC4gSSBzZWUgdGhhdCBgaGZzcGx1c19kaXJlY3RfSU9gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBoZnNwbHVzX2FvcHNgLgoKSSBzaG91bGQgcHJvYmFibHkgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgYGZzL2hmc3BsdXMvaW5vZGUuY2AgYW5kIHJlbGF0ZWQgZmlsZXMuIEFoLCBiZXNpZGVzIGBoZnNwbHVzX2RpcmVjdF9JT2AsIEkgYWxzbyBoYXZlIGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19uZXdfaW5vZGVgLCBhbmQgYGhmc3BsdXNfY2F0X3JlYWRfaW5vZGVgLiBJIHNob3VsZCBwcm9iYWJseSBsaXN0IG91dCB0aGUgY29udGVudHMgb2YgYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaW5vZGUuYy0yNS1cbmZzL2hmc3BsdXMvaW5vZGUuYzoyNjpzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2hmc3BsdXMvaW5vZGUuYy0yNy17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTMwLVxuZnMvaGZzcGx1cy9pbm9kZS5jOjMxOnN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG5mcy9oZnNwbHVzL2lub2RlLmMtMzIte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00MC1cbmZzL2hmc3BsdXMvaW5vZGUuYzo0MTppbnQgaGZzcGx1c193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2lub2RlLmMtNDItXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBwb3MsXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTU2LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjU3OnN0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTU4LXtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjEtXG5mcy9oZnNwbHVzL2lub2RlLmM6NjI6c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXG5mcy9oZnNwbHVzL2lub2RlLmMtNjMte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0xMjItXG5mcy9oZnNwbHVzL2lub2RlLmM6MTIzOnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTEyNC17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTE4MS1cbmZzL2hmc3BsdXMvaW5vZGUuYzoxODI6c3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9oZnNwbHVzL2lub2RlLmMtMTgzLVx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz0yMTI9Y29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTIxNi1cbmZzL2hmc3BsdXMvaW5vZGUuYzoyMTc6c3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIxOC1cdFx0XHQgICAgIHN0cnVjdCBoZnNwbHVzX3Blcm0gKnBlcm1zLCBpbnQgZGlyKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0yNzAtXG5mcy9oZnNwbHVzL2lub2RlLmM6MjcxOnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9oZnNwbHVzL2lub2RlLmMtMjcyLXtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMjgwLVxuZnMvaGZzcGx1cy9pbm9kZS5jOjI4MTpzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTI4Mi17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTI5OS1cbmZzL2hmc3BsdXMvaW5vZGUuYzozMDA6c3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9oZnNwbHVzL2lub2RlLmMtMzAxLVx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0zMjktXG5mcy9oZnNwbHVzL2lub2RlLmM6MzMwOmludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMzMS1cdFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMzU1LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjM1NjppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5mcy9oZnNwbHVzL2lub2RlLmMtMzU3LVx0XHQgICAgICAgaW50IGRhdGFzeW5jKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz00MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ0NS1cbmZzL2hmc3BsdXMvaW5vZGUuYzo0NDY6c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2hmc3BsdXMvaW5vZGUuYy00NDctXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTUwNC1cbmZzL2hmc3BsdXMvaW5vZGUuYzo1MDU6dm9pZCBoZnNwbHVzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTUwNi17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTUyNi1cbmZzL2hmc3BsdXMvaW5vZGUuYzo1Mjc6dm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcbmZzL2hmc3BsdXMvaW5vZGUuYy01Mjgte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy01NTYtXG5mcy9oZnNwbHVzL2lub2RlLmM6NTU3OnZvaWQgaGZzcGx1c19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9oZnNwbHVzL2lub2RlLmMtNTU4LVx0XHRzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNTY1LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjU2NjppbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG5mcy9oZnNwbHVzL2lub2RlLmMtNTY3LXtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjQ4LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjY0OTppbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmc3BsdXMvaW5vZGUuYy02NTAte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy03NDEtXG5mcy9oZnNwbHVzL2lub2RlLmM6NzQyOmludCBoZnNwbHVzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSlcbmZzL2hmc3BsdXMvaW5vZGUuYy03NDMte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy03NTktXG5mcy9oZnNwbHVzL2lub2RlLmM6NzYwOmludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2hmc3BsdXMvaW5vZGUuYy03NjEtXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyOQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEhGUyYjNDM7IERpcmVjdCBJL08gRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgZGlyZWN0IEkvTyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgSEZTJiM0MzsgZmlsZSBzeXN0ZW0uIExldCBtZSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBjb3JlIGZ1bmN0aW9uIHRhcmdldGVkIGZvciBkaXJlY3QgSS9PIGlzIGBoZnNwbHVzX2RpcmVjdF9JT2AsIGJ1dCB0aGVyZSBhcmUgc2V2ZXJhbCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGFsc28gcmVxdWlyZSBjYXJlZnVsIHNjcnV0aW55IGR1cmluZyB0aGlzIGZ1enppbmcgY2FtcGFpZ246IGBoZnNwbHVzX3dyaXRlX2JlZ2luYCwgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfcmVsZWFzZWAsIGBoZnNwbHVzX25ld19pbm9kZWAsIGBoZnNwbHVzX2NhdF9yZWFkX2lub2RlYCwgYW5kIGBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZWAuIFRoZXNlIG5lZWQgdG8gYmUgaW5jbHVkZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbi4gVGhlIGZ1enppbmcgdmVyZGljdCBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgZGVmaW5lZDsgaXQgKnNob3VsZCogb25seSBjb250YWluIGBoZnNwbHVzX2RpcmVjdF9JT2AuIFRoZSBjcml0aWNhbCBgRW5hYmxlQ29uZmlnc2AgaW5jbHVkZSBgSEZTUExVU19GU2AsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdG8gZW5zdXJlIHRoaXMgYWxsIHdvcmtzLiBUaGlzIG1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB0byBleGVjdXRlIHRoZSB2ZXJkaWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfZGlyZWN0X0lPJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBpbiBIRlMmIzQzOyBmaWxlc3lzdGVtcyBieSBleHBhbmRpbmcgdGhlIGZpbGUsIGZsdXNoaW5nIGRpcnR5IHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgcGVyZm9ybWluZyBibG9ja2Rldl9kaXJlY3RfSU8uIFRoaXMgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIEkvTyBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgdmlhIGRpcmVjdCBJL08gd3JpdGVzIHRvIEhGUyYjNDM7IG1vdW50ZWQgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgaW4gSEZTJiM0MzsgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMmIzQzOyBtb3VudGVkIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSB2aWEgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLCBmbHVzaGluZyBkaXJ0eSBwYWdlY2FjaGUgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIGBibG9ja2Rldl9kaXJlY3RfSU8oKWAuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGUuZy4sIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmsgYXR0cmlidXRlcykuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBUaGUgZXhwYW5zaW9uIGxvZ2ljIHNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgaG9sZXMgY3JlYXRlZCBiZWZvcmUgRU9GIGFyZSB6ZXJvZWQgdmlhIHBhZ2VjYWNoZSBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLlxuNC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gRElPIG9mZnNldHMsIHBhZ2UgcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIChzdWNoIGFzIGBpbm9kZV9kaW9fd2FpdGApLCBvciBidWZmZXIgYm91bmRzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4YmI4MTBkOGI2MDc3ZWVmMmE0NWE3M2FlYjhiZGViNGJkZjNmOWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDowMTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCA2MTUzZTVjYzZlYjY1Li43ZTZjYzRkZGU5ZjI2IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xMjUsOSAmIzQzOzEyNSw0NCBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcikKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItJmd0O2tpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLSZndDtmX21hcHBpbmc7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CWxvZmZfdCBpc2l6ZTsKIAlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKJiM0MzsJbG9mZl90IGVuZCA9IGlvY2ItJmd0O2tpX3BvcyAmIzQzOyBjb3VudDsKIAlzc2l6ZV90IHJldDsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgomIzQzOwkgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7CiYjNDM7CQlsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7CiYjNDM7CiYjNDM7CQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmUKJiM0MzsJCSAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS4KJiM0MzsJCSAqLwomIzQzOwkJaW5vZGVfZGlvX3dhaXQoaW5vZGUpOwomIzQzOwomIzQzOwkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzdGFydF9vZmYgPSBpc2l6ZTsKJiM0MzsJCWVuZF9vZmYgPSAoZW5kICZndDsgMCkgPyBlbmQgLSAxIDogZW5kOwomIzQzOwomIzQzOwkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJc3RhcnRfcGFnZSA9IHN0YXJ0X29mZiAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CiYjNDM7CQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTsKIAogCS8qCkBAIC0xMzUsOCAmIzQzOzE3MCw3IEBAIHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKQogCSAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uCiAJICovCiAJaWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFICZhbXA7JmFtcDsgcmV0ICZsdDsgMCkpIHsKLQkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwomIzQzOwkJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAKIAkJaWYgKGVuZCAmZ3Q7IGlzaXplKQogCQkJaGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgSEZTJiM0MzsgRGlyZWN0IEkvTyBQYXRjaCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlmZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgaGVyZS4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBmcy9oZnNwbHVzL2lub2RlLmNgLCB3aXRoIGEgc3BlY2lmaWMgZm9jdXMgb24gdGhlIGBoZnNwbHVzX2RpcmVjdF9JT2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIEkgbmVlZCB0byBrbm93IHdoeSBzb21lb25lIGlzIGNoYW5naW5nIHRoZSBkaXJlY3QgSS9PIGZvciBIRlMmIzQzOy4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBgaGZzcGx1c19kaXJlY3RfSU9gLiBLbm93aW5nIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCBhbmQgd2h5LiBJJiMzOTtsbCByZWFkIHRocm91Z2ggdGhhdCBhcmVhIGNhcmVmdWxseSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0XHRcdGhmc19ibm9kZV91bmhhc2gobm9kZSk7XG4gMTE2Olx0XHRcdFx0aGZzX2Jub2RlX2ZyZWUobm9kZSk7XG4gMTE3Olx0XHRcdH0gd2hpbGUgKC0taSBcdTAwMjZcdTAwMjYgbmlkeCBcdTAwM2MgdHJlZS1cdTAwM2Vub2RlX2NvdW50KTtcbiAxMTg6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuIDExOTpcdFx0fVxuIDEyMDpcdFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gMTIxOlx0fVxuIDEyMjpcdFxuIDEyMzpcdHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIDEyNDpcdHtcbiAxMjU6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIDEyNjpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiAxMjc6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gMTI4Olx0XHRsb2ZmX3QgaXNpemU7XG4gMTI5Olx0XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiAxMzA6XHRcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiAxMzE6XHRcdHNzaXplX3QgcmV0O1xuIDEzMjpcdFxuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXG4gMTM1Olx0XHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4gMTM2Olx0XHQgKi9cbiAxMzc6XHRcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuIDEzODpcdFx0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuIDEzOTpcdFx0XHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHQvKlxuIDE0NDpcdFx0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbiAxNDU6XHRcdFx0ICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIDE0ODpcdFxuIDE0OTpcdFx0XHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuIDE1MDpcdFx0XHRpZiAocmV0KVxuIDE1MTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTUyOlx0XG4gMTUzOlx0XHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuIDE1NDpcdFx0XHRlbmRfb2ZmID0gKGVuZCBcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4gMTU3Olx0XHRcdGlmIChyZXQpXG4gMTU4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNTk6XHRcbiAxNjA6XHRcdFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiAxNjE6XHRcdFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDE2MjpcdFxuIDE2MzpcdFx0XHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XG4gMTY0Olx0XHR9XG4gMTY1Olx0XG4gMTY2Olx0XHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiAxNjc6XHRcbiAxNjg6XHRcdC8qXG4gMTY5Olx0XHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcbiAxNzA6XHRcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4gMTcxOlx0XHQgKi9cbiAxNzI6XHRcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuIDE3MzpcdFx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiAxNzQ6XHRcbiAxNzU6XHRcdFx0aWYgKGVuZCBcdTAwM2UgaXNpemUpXG4gMTc2Olx0XHRcdFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcbiAxNzc6XHRcdH1cbiAxNzg6XHRcbiAxNzk6XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0fVxuIDE4MTpcdFxuIDE4MjpcdHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDE4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIDE4NDpcdHtcbiAxODU6XHRcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuIDE4NjpcdH1cbiAxODc6XHRcbiAxODg6XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiAxODk6XHRcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhGUyYjNDM7IERpcmVjdCBJL08gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgaGZzcGx1c19kaXJlY3RfSU9gLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgRGlyZWN0IEkvTyB3cml0ZXMgdGhhdCBnbyBiZXlvbmQgdGhlIGN1cnJlbnQgZW5kLW9mLWZpbGUuIFByZXZpb3VzbHksIHdpdGggdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBoYWQgYSBsaW1pdGF0aW9uIG9mIG9ubHkgYWxsb2NhdGluZyBzZXF1ZW50aWFsIGJsb2Nrcywgd2hpY2ggbGVkIHRvIGZhaWx1cmVzIG9yIHByb2JsZW1zIHdoZW4gd3JpdGluZyBwYXN0IEVPRi4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNsZXZlciB3b3JrYXJvdW5kLiBXaGVuIHdlIGhhdmUgYSB3cml0ZSBvcGVyYXRpb24gYW5kIHRoZSB3cml0ZSBwb3NpdGlvbiAoYGlvY2ItJmd0O2tpX3Bvc2ApIGV4dGVuZHMgcGFzdCB0aGUgZmlsZSBzaXplIChgaV9zaXplX3JlYWQoaW5vZGUpYCksIHRoZSBzeXN0ZW0gbm93IHdhaXRzIGZvciBhbnkgZXhpc3RpbmcgRElPIG9wZXJhdGlvbnMgdG8gZmluaXNoIHVzaW5nIGBpbm9kZV9kaW9fd2FpdGAuIFRoZW4sIGl0IGNhbGxzIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAgdG8gZXhwYW5kIHRoZSBmaWxlLCBlZmZlY3RpdmVseSB6ZXJvaW5nIG91dCB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgb2xkIHNpemUgYW5kIHRoZSB3cml0ZSBwb3NpdGlvbiB2aWEgdGhlIHBhZ2UgY2FjaGUuIEFmdGVyIHRoYXQgZXhwYW5zaW9uLCB0aGUgZGlydHkgcGFnZXMgYXJlIGZsdXNoZWQgdXNpbmcgYGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2VgLCBhbmQgdGhlIHBhZ2UgY2FjaGUgaXMgaW52YWxpZGF0ZWQgdXNpbmcgYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYC4gRmluYWxseSwgaXQgcHJvY2VlZHMgd2l0aCB0aGUgYGJsb2NrZGV2X2RpcmVjdF9JT2AgY2FsbC4KClRoaXMgZXhwYW5zaW9uIGxvZ2ljIHNlZW1zIGZhbWlsaWFyLCBhbmQgSSYjMzk7ZCBsaWtlIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiBvdGhlciBmaWxlc3lzdGVtcy4gTGV0IG1lIGNoZWNrIGhvdyBvdGhlciBmaWxlIHN5c3RlbXMgbGlrZSBleHQyLCBvciBldmVuIEZBVCwgYXJlIGhhbmRsaW5nIHNpbWlsYXIgc2NlbmFyaW9zLiBJJiMzOTtsbCBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlYCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hpY2ggZmlsZXN5c3RlbXMgbWlnaHQgdXNlIHRoaXMgZnVuY3Rpb24gb3Igc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHNwYXJzZS1maWxlIGV4cGFuc2lvbiBmb3IgZGlyZWN0IEkvTy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9MjQ2Nz1FWFBPUlRfU1lNQk9MKGJsb2NrX3JlYWRfZnVsbF9mb2xpbyk7XG4tLVxuZnMvYnVmZmVyLmMtMjQ3Mi0gKi9cbmZzL2J1ZmZlci5jOjI0NzM6aW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxuZnMvYnVmZmVyLmMtMjQ3NC17XG4tLVxuZnMvYnVmZmVyLmMtMjQ5NC19XG5mcy9idWZmZXIuYzoyNDk1OkVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpO1xuZnMvYnVmZmVyLmMtMjQ5Ni1cbi0tXG5mcy9mYXQvZmlsZS5jPTIxNz1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy9mYXQvZmlsZS5jLTIyMi1cbmZzL2ZhdC9maWxlLmM6MjIzOlx0ZXJyID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIHNpemUpO1xuZnMvZmF0L2ZpbGUuYy0yMjQtXHRpZiAoZXJyKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz0xMjM9c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTE0NC1cdFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXG5mcy9oZnNwbHVzL2lub2RlLmM6MTQ1Olx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG5mcy9oZnNwbHVzL2lub2RlLmMtMTQ2LVx0XHQgKi9cbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMTQ4LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjE0OTpcdFx0cmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy0xNTAtXHRcdGlmIChyZXQpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTMwMD1zdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMzEzLVx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmZzL2hmc3BsdXMvaW5vZGUuYzozMTQ6XHRcdFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMTUtXHRcdFx0XHRcdFx0XHQgICBhdHRyLVx1MDAzZWlhX3NpemUpO1xuLS1cbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yNzA9aW50IGNvbnRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjcyLVx0XHRcdGdldF9ibG9ja190ICosIGxvZmZfdCAqKTtcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDoyNzM6aW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yNzQtdm9pZCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGZyb20sIHNpemVfdCB0byk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmcy9idWZmZXIuY2AgYW5kIHNwZWNpZmljYWxseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqd2hhdCogaXQgZG9lcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpbGVzeXN0ZW0gYnVmZmVyIGxheWVyLiBJcyB0aGlzIGhhbmRsaW5nIGJsb2NrIGFsbG9jYXRpb24sIHBhZ2UgcGlubmluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2NhbiBvZiBpdHMgcHVycG9zZSB3b3VsZCBiZSBnb29kLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG5hbWUgYW5kIGltcGxlbWVudGF0aW9uIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXQmIzM5O3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzaW1wbGUgY29udGludWF0aW9uIGV4cGFuc2lvbiBmdW5jdGlvbi4gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBjb250aWd1b3VzIGFsbG9jYXRpb24gb3IgbWFwcGluZyBvZiBkYXRhIHdpdGhpbiB0aGUgYnVmZmVyIGNhY2hlLCBsaWtlbHkgaW4gYSBzY2VuYXJpbyB3aGVyZSBhIGJ1ZmZlciBuZWVkcyB0byBiZSBsYXJnZXIgdGhhbiBjdXJyZW50bHkgYWxsb2NhdGVkLiBJJiMzOTttIGFzc3VtaW5nIGl0IG1heSBiZSBhIGZhbGxiYWNrIG1ldGhvZCwgbWF5YmUgd2l0aG91dCBhbGwgdGhlIGJlbGxzIGFuZCB3aGlzdGxlcyBvZiBtb3JlIGFkdmFuY2VkIGV4cGFuc2lvbiBzdHJhdGVnaWVzLiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBob2xkcyB0cnVlLiBUaW1lIHRvIGdldCBteSBleWVzIG9uIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDcwOlx0ICogdHJ1bmNhdGVzLiAgVXNlcyBmaWxlc3lzdGVtIHBhZ2VjYWNoZSB3cml0ZXMgdG8gYWxsb3cgdGhlIGZpbGVzeXN0ZW0gdG9cbjI0NzE6XHQgKiBkZWFsIHdpdGggdGhlIGhvbGUuICBcbjI0NzI6XHQgKi9cbjI0NzM6XHRpbnQgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4yNDc0Olx0e1xuMjQ3NTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4yNDc2Olx0XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphb3BzID0gbWFwcGluZy1cdTAwM2VhX29wcztcbjI0Nzc6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yNDc4Olx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuMjQ3OTpcdFx0aW50IGVycjtcbjI0ODA6XHRcbjI0ODE6XHRcdGVyciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIHNpemUpO1xuMjQ4MjpcdFx0aWYgKGVycilcbjI0ODM6XHRcdFx0Z290byBvdXQ7XG4yNDg0Olx0XG4yNDg1Olx0XHRlcnIgPSBhb3BzLVx1MDAzZXdyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuMjQ4NjpcdFx0aWYgKGVycilcbjI0ODc6XHRcdFx0Z290byBvdXQ7XG4yNDg4Olx0XG4yNDg5Olx0XHRlcnIgPSBhb3BzLVx1MDAzZXdyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLCBmb2xpbywgZnNkYXRhKTtcbjI0OTA6XHRcdEJVR19PTihlcnIgXHUwMDNlIDApO1xuMjQ5MTpcdFxuMjQ5MjpcdG91dDpcbjI0OTM6XHRcdHJldHVybiBlcnI7XG4yNDk0Olx0fVxuMjQ5NTpcdEVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpO1xuMjQ5NjpcdFxuMjQ5NzpcdHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4yNDk4Olx0XHRcdFx0ICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuMjQ5OTpcdFx0XHRcdCAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgKmJ5dGVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM3CgkJCQkJCQlvdXRwdXQ6IDI4MAoJCQkJCQkJdGhvdWdodHM6IDk2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgU2Vzc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTt2ZSBhbmFseXplZCB0aGUgY2hhbmdlcyB0byBgaGZzcGx1c19kaXJlY3RfSU9gIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgLCBmb2N1c2luZyBvbiBLTVNBTiBjcml0ZXJpYS4KCkZpcnN0LCBJIGV4YW1pbmVkIHdoZXRoZXIgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyDigJMgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgc2tiIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyBhcmUgdG91Y2hlZCBoZXJlLiBObyByaXNrIHRoZXJlLgoKTmV4dCwgSSBsb29rZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUga2V5IGxvY2FsIHZhcmlhYmxlcyBsaWtlIGBpc2l6ZWAsIGBzdGFydF9vZmZgLCBgZW5kX29mZmAsIGBzdGFydF9wYWdlYCwgYW5kIGBlbmRfcGFnZWAgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjb2RlIHBhdGggdGhhdCB1c2VzIGBpc2l6ZWAgaXMgYWxzbyBzYWZlLiBObyBpc3N1ZXMgdGhlcmUuCgpUaGlyZCwgSSBjb25zaWRlcmVkIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIHNlZSBub3RoaW5nIGluIHRoZSBwYXRjaCB0aGF0IGludHJvZHVjZXMgb3IgbW9kaWZpZXMgc3VjaCBhIHNpdHVhdGlvbi4KCkZpbmFsbHksIEkgY2hlY2tlZCBmb3IgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGhhbmRsZXMgRGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRi4gVGhlIHBhdGNoICpjb3JyZWN0bHkqIGFkZHJlc3NlcyB0aGlzIGJ5IGNhbGxpbmcgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLSZndDtraV9wb3MpYC4gVGhpcyBmdW5jdGlvbiBpcyBrZXkuIEl0IHV0aWxpemVzIHRoZSBwYWdlIGNhY2hlIGB3cml0ZV9iZWdpbmAgYW5kIGB3cml0ZV9lbmRgIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoYXQgdGhlIGV4dGVuZGVkIHJlZ2lvbiBvZiB0aGUgZmlsZSBpcyB6ZXJvZWQgb3V0IGJlZm9yZSB3cml0aW5nLCBmb2xsb3dlZCBieSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiwgYW5kIGZpbmFsbHkgY2FsbGluZyBgYmxvY2tkZXZfZGlyZWN0X0lPYC4gVGhpcyBpcyAqcHJlY2lzZWx5KiB0aGUgY29ycmVjdCBhcHByb2FjaC4gQW55IHRoZW9yZXRpY2FsIG1lbW9yeSBlcnJvcnMgaW4gRElPLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGJ1ZmZlciBvdmVyZmxvd3MsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4KClRoZXJlIGlzICpubyogY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIGd1aWRlbGluZTogJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7IFRoaXMgYWxzbyBpbmNsdWRlcyBjaGVja2luZyBmb3IgcG90ZW50aWFsIGluZm8tbGVha3MuCgpUaGUgcGF0Y2ggaXRzZWxmIHVwZGF0ZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGJ5IGNhbGxpbmcgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLiBUaGlzIGV4cGFuc2lvbiB1c2VzIHBhZ2VjYWNoZSBgd3JpdGVfYmVnaW5gL2B3cml0ZV9lbmRgIHRvIHplcm8gaG9sZXMgcHJvcGVybHkuCgpJIGFtIGNvbmZpZGVudC4KCioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuKiogSGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGNsZWFybHkgc3RhdGVkOgoKMS4gIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IHN1cHBvcnRzIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgYnkgemVyby1maWxsaW5nIGZpbGUgZXh0ZW5zaW9ucyB2aWEgcGFnZSBjYWNoZSBtZWNoYW5pc21zLgoyLiAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOgogICAgKiAgIE5vIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBpcyBjb3BpZWQgdGhhdCBjb250YWlucyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgogICAgKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzIGFyZSB1c2VkIGluIGJyYW5jaGVzIG9yIGFzIHJlYWRzLgogICAgKiAgIFRoZSBwYXRjaCYjMzk7cyBsb2dpYyBhY3RpdmVseSAqYXZvaWRzKiB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBlbnN1cmluZyB6ZXJvLWZpbGxpbmcuCiAgICAqICAgUG90ZW50aWFsIGlzc3VlcyBpbiBESU8gaGFuZGxpbmcgb3IgZmlsZSBleHRlbnNpb24gKGUuZy4gYnVmZmVyIGFjY2VzcyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNwbHVzX2RpcmVjdF9JTygpYCBpbiBgZnMvaGZzcGx1cy9pbm9kZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSBleHBhbmRpbmcgdGhlIGZpbGUgdmlhIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCwgZmx1c2hpbmcgZGlydHkgcGFnZWNhY2hlIHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgZGVsZWdhdGluZyB0byBgYmxvY2tkZXZfZGlyZWN0X0lPKClgLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChlLmcuLCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rIGF0dHJpYnV0ZXMpLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlzaXplYCwgYHN0YXJ0X29mZmAsIGBlbmRfb2ZmYCwgYHN0YXJ0X3BhZ2VgLCBgZW5kX3BhZ2VgLCBgcmV0YCkgYXJlIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U7IG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cbjQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIERJTyBvZmZzZXRzLCBwYWdlIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyAoc3VjaCBhcyBgaW5vZGVfZGlvX3dhaXRgKSwgb3IgYnVmZmVyIGJvdW5kcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSB2aWEgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLCBmbHVzaGluZyBkaXJ0eSBwYWdlY2FjaGUgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIGBibG9ja2Rldl9kaXJlY3RfSU8oKWAuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGUuZy4sIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmsgYXR0cmlidXRlcykuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBUaGUgZXhwYW5zaW9uIGxvZ2ljIHNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgaG9sZXMgY3JlYXRlZCBiZWZvcmUgRU9GIGFyZSB6ZXJvZWQgdmlhIHBhZ2VjYWNoZSBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLlxuNC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gRElPIG9mZnNldHMsIHBhZ2UgcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIChzdWNoIGFzIGBpbm9kZV9kaW9fd2FpdGApLCBvciBidWZmZXIgYm91bmRzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjEwLjYyNDU2NjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMDA3NzM1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2RpcmVjdF9JT1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSB2aWEgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLCBmbHVzaGluZyBkaXJ0eSBwYWdlY2FjaGUgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIGBibG9ja2Rldl9kaXJlY3RfSU8oKWAuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGUuZy4sIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmsgYXR0cmlidXRlcykuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlzaXplYCwgYHN0YXJ0X29mZmAsIGBlbmRfb2ZmYCwgYHN0YXJ0X3BhZ2VgLCBgZW5kX3BhZ2VgLCBgcmV0YCkgYXJlIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U7IG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjMuIFRoZSBleHBhbnNpb24gbG9naWMgc3BlY2lmaWNhbGx5IGVuc3VyZXMgdGhhdCBob2xlcyBjcmVhdGVkIGJlZm9yZSBFT0YgYXJlIHplcm9lZCB2aWEgcGFnZWNhY2hlIG9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gZXhwb3NpbmcgdW5pbml0aWFsaXplZCBibG9ja3MuXFxuNC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gRElPIG9mZnNldHMsIHBhZ2UgcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIChzdWNoIGFzIGBpbm9kZV9kaW9fd2FpdGApLCBvciBidWZmZXIgYm91bmRzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGluIEhGUysgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMrIG1vdW50ZWQgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjEwLjYyNDU3MzAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTI5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOGJiODEwZDhiNjA3N2VlZjJhNDVhNzNhZWI4YmRlYjRiZGYzZjlhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjAxOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbmluZGV4IDYxNTNlNWNjNmViNjUuLjdlNmNjNGRkZTlmMjYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXFxuQEAgLTEyNSw5ICsxMjUsNDQgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRsb2ZmX3QgaXNpemU7XFxuIFxcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbitcXHRsb2ZmX3QgZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgY291bnQ7XFxuIFxcdHNzaXplX3QgcmV0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cXG4rXFx0ICogRm9yIGRpcmVjdCB3cml0ZXMgYmV5b25kIEVPRiwgZXhwYW5kIHRoZSBmaWxlIGZpcnN0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbitcXHRcXHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xcbitcXHRcXHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XFxuK1xcbitcXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxcbitcXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuK1xcbitcXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHN0YXJ0X29mZiA9IGlzaXplO1xcbitcXHRcXHRlbmRfb2ZmID0gKGVuZCBcXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcXG4rXFxuK1xcdFxcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0XFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xcbiBcXG4gXFx0LypcXG5AQCAtMTM1LDggKzE3MCw3IEBAIHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbiBcXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IHJldCBcXHUwMDNjIDApKSB7XFxuLVxcdFxcdGxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFx0XFx0bG9mZl90IGVuZCA9IGlvY2ItXFx1MDAzZWtpX3BvcyArIGNvdW50O1xcbitcXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4gXFxuIFxcdFxcdGlmIChlbmQgXFx1MDAzZSBpc2l6ZSlcXG4gXFx0XFx0XFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDE6MTEuMDgwOTE0NTMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDc5ODAzNzYxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfZGlyZWN0X0lPXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGluIEhGUysgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMrIG1vdW50ZWQgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ4YmI4MTBkOGI2MDc3ZWVmMmE0NWE3M2FlYjhiZGViNGJkZjNmOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDowMTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggNjE1M2U1Y2M2ZWI2NS4uN2U2Y2M0ZGRlOWYyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTI1LDkgKzEyNSw0NCBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4rXHRsb2ZmX3QgaXNpemU7XG4gXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuIFx0c3NpemVfdCByZXQ7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbitcdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbitcdCAqL1xuK1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4rXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbitcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuK1x0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4rXHRcdCAqL1xuK1x0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4rXG4rXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4rXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4rXG4rXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXG4rXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbitcdH1cbitcbiBcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuIFxuIFx0LypcbkBAIC0xMzUsOCArMTcwLDcgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IHJldCBcdTAwM2MgMCkpIHtcbi1cdFx0bG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVx0XHRsb2ZmX3QgZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgKyBjb3VudDtcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4gXG4gXHRcdGlmIChlbmQgXHUwMDNlIGlzaXplKVxuIFx0XHRcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMToxMS4wODA5MTY3MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzM5NDM3NzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhGUysgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBmcy9oZnNwbHVzL2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGhmc3BsdXNfZGlyZWN0X0lPYC4gSG1tLCBpdCdzIGFkZGluZyBzb21lIGxvZ2ljIHRvIGhhbmRsZSBkaXJlY3Qgd3JpdGVzIHRoYXQgZXh0ZW5kICpiZXlvbmQqIHRoZSBjdXJyZW50IGVuZC1vZi1maWxlIChFT0YpLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSB0cmlja3kuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGNvbW1vbiByZXF1aXJlbWVudC5cblxuRmlyc3QsIGEgY2hlY2s6IGlmIGl0J3MgYSAqd3JpdGUqIG9wZXJhdGlvbiBhbmQgdGhlIHdyaXRlIHBvc2l0aW9uIChgaW9jYi1cdTAwM2VraV9wb3NgKSBnb2VzIGJleW9uZCB0aGUgY3VycmVudCBmaWxlIHNpemUgKGBpX3NpemVfcmVhZChpbm9kZSlgKSwgd2UgZW50ZXIgdGhpcyBuZXcgYmxvY2suIFRoZSBsb2dpYyB0aGVuIHVzZXMgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgIHRvIGV4cGFuZCB0aGUgZmlsZS4gQnV0IGJlZm9yZSB0aGF0LCB0aGVyZSBpcyBhbiBgaW5vZGVfZGlvX3dhaXQoaW5vZGUpYCBjYWxsLiBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB3aGF0IERJTyBpdCBpcyB3YWl0aW5nIGZvciwgYW5kIHdoeS4gRXhwYW5kaW5nIHRoZSBmaWxlIHNpemUgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGVuLCBpdCB3cml0ZXMgYmFjayB0byBkaXNrIHVzaW5nIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKClgLCBlbnN1cmluZyB0aGUgZXhwYW5kZWQgcG9ydGlvbiBpcyBhY3R1YWxseSB3cml0dGVuIG91dC4gVGhlIHVzZSBvZiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAgaXMgY3JpdGljYWwg4oCTIGl0J3MgaW52YWxpZGF0aW5nIHRoZSBwYWdlcyB3ZSd2ZSBqdXN0IGV4dGVuZGVkLiBUaGF0J3MgYSBnb29kIHNhZmVndWFyZDsgcHJldmVudGluZyBzdGFsZSBkYXRhIGZyb20gbGluZ2VyaW5nIGluIHRoZSBwYWdlIGNhY2hlLlxuXG5Ob3csIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGBLY29uZmlnYCBhbmQgc3Vycm91bmRpbmcgY29kZSB1c2luZyBteSB1c3VhbCB0b29sa2l0LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3Zlcmxvb2tlZC4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCB0aGUgYmFzZXMgaGVyZSB3aXRoIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGRpcmVjdCBJL08gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjI0LjQ3NTI5NjcxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ4NDcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXFxuZnMvaGZzcGx1cy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTKyBmaWxlc3lzdGVtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjI0LjUxOTc4Nzk3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzQxMTkzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvZiBgSEZTUExVU19GU2AuIE5vIHBvaW50IGluIGd1ZXNzaW5nOyBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3MgcHVsbCB1cCB0aGUgYGZzL2hmc3BsdXMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpdmVzLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvcHRpb25zLCBvciBoYXJkd2FyZSBzdXBwb3J0IGFyZSBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyB0aGUgSEZTKyBmaWxlc3lzdGVtIGRyaXZlci4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIGJsb2NrIGRldmljZSBzdXBwb3J0LCBwb3RlbnRpYWxseSBzcGVjaWZpYyBTQ1NJIG9yIFNBVEEgZHJpdmVycywgYW5kIG1heWJlIGV2ZW4gc29tZSBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB0aGUgYmVkcm9jazsgdW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgSEZTKyBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBlY29zeXN0ZW0uIE5vIHVzZSBidWlsZGluZyBvbiBzYW5kLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMToyNi45NTM5MDk5NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnNwbHVzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBIRlNQTFVTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA3OlxcdFxcdHNlbGVjdCBOTFNfVVRGOFxcbiAgIDg6XFx0XFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XFxuICAxMTpcXHRcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBUaGlzIGZpbGUgc3lzdGVtIGlzIG9mdGVuIGNhbGxlZCBIRlMrIGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXFxuICAxNDpcXHRcXHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcXG4gIDE1OlxcdFxcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxcbiAgMTY6XFx0XFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBIRlMrIGZpbGVzeXN0ZW1cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcXHUwMDI2XFx1MDAyNiBLVU5JVFxcbiAgMjE6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgVGhpcyBidWlsZHMgS1VuaXQgdGVzdHMgZm9yIHRoZSBIRlMrIGZpbGVzeXN0ZW0uXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgS1VuaXQgdGVzdHMgcnVuIGR1cmluZyBib290IGFuZCBvdXRwdXQgdGhlIHJlc3VsdHMgdG8gdGhlIGRlYnVnXFxuICAyNjpcXHRcXHQgIGxvZyBpbiBUQVAgZm9ybWF0IChodHRwczovL3Rlc3Rhbnl0aGluZy5vcmcvKS4gT25seSB1c2VmdWwgZm9yXFxuICAyNzpcXHRcXHQgIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90IGZvciBpbmNsdXNpb25cXG4gIDI4OlxcdFxcdCAgaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2VcXG4gIDMxOlxcdFxcdCAgcmVmZXIgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMToyNi45NTM5ODAzNjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0NjMzNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgRmlsZSBTeXN0ZW0gQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBtb2RpZmljYXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2hmc3BsdXMvaW5vZGUuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW5vZGUtcmVsYXRlZCBsb2dpYyBmb3IgSEZTKywgc28gaXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBpbm9kZSBzdHJ1Y3R1cmVzIGFuZCBvcGVyYXRpb25zLiBJIHdpbGwgY29uY2VudHJhdGUgb24gdGhlIGNoYW5nZWQgcG9ydGlvbnMgYW5kIGxvb2sgZm9yIHdoYXQgc3ltYm9scyB3ZXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhlIHJlbGV2YW50IGFyZWFzLiBHZXR0aW5nIGEgZ29vZCBncmFzcCBvbiB0aGUgY2hhbmdlZCBzeW1ib2xzIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDE6MjkuMDk4NjE1OTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDExMTpcXHRcXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNm5vZGUtXFx1MDAzZXJlZmNudCkpIHtcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdHJlcyA9IGZhbHNlO1xcbiAxMTM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNDpcXHRcXHRcXHRcXHR9XFxuIDExNTpcXHRcXHRcXHRcXHRoZnNfYm5vZGVfdW5oYXNoKG5vZGUpO1xcbiAxMTY6XFx0XFx0XFx0XFx0aGZzX2Jub2RlX2ZyZWUobm9kZSk7XFxuIDExNzpcXHRcXHRcXHR9IHdoaWxlICgtLWkgXFx1MDAyNlxcdTAwMjYgbmlkeCBcXHUwMDNjIHRyZWUtXFx1MDAzZW5vZGVfY291bnQpO1xcbiAxMTg6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRyZWUtXFx1MDAzZWhhc2hfbG9jayk7XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXHRyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTtcXG4gMTIxOlxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuIDEyNDpcXHR7XFxuIDEyNTpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4gMTI3OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbiAxMjg6XFx0XFx0bG9mZl90IGlzaXplO1xcbiAxMjk6XFx0XFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuIDEzMDpcXHRcXHRsb2ZmX3QgZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgY291bnQ7XFxuIDEzMTpcXHRcXHRzc2l6ZV90IHJldDtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0LypcXG4gMTM0OlxcdFxcdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXFxuIDEzNTpcXHRcXHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXFxuIDEzNjpcXHRcXHQgKi9cXG4gMTM3OlxcdFxcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcXHUwMDI2XFx1MDAyNiBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4gMTM4OlxcdFxcdFxcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XFxuIDEzOTpcXHRcXHRcXHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRcXHQvKlxcbiAxNDQ6XFx0XFx0XFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXFxuIDE0NTpcXHRcXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuIDE0NjpcXHRcXHRcXHQgKi9cXG4gMTQ3OlxcdFxcdFxcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcXG4gMTQ4OlxcdFxcbiAxNDk6XFx0XFx0XFx0cmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3Bvcyk7XFxuIDE1MDpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNTE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0XFx0c3RhcnRfb2ZmID0gaXNpemU7XFxuIDE1NDpcXHRcXHRcXHRlbmRfb2ZmID0gKGVuZCBcXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpO1xcbiAxNTc6XFx0XFx0XFx0aWYgKHJldClcXG4gMTU4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdFxcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMTYxOlxcdFxcdFxcdGVuZF9wYWdlID0gZW5kX29mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XFxuIDE2NDpcXHRcXHR9XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHQvKlxcbiAxNjk6XFx0XFx0ICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3XFxuIDE3MDpcXHRcXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxcbiAxNzE6XFx0XFx0ICovXFxuIDE3MjpcXHRcXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXFx1MDAyNlxcdTAwMjYgcmV0IFxcdTAwM2MgMCkpIHtcXG4gMTczOlxcdFxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRcXHRpZiAoZW5kIFxcdTAwM2UgaXNpemUpXFxuIDE3NjpcXHRcXHRcXHRcXHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODA6XFx0fVxcbiAxODE6XFx0XFxuIDE4MjpcXHRzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gMTgzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiAxODQ6XFx0e1xcbiAxODU6XFx0XFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIDE4NjpcXHR9XFxuIDE4NzpcXHRcXG4gMTg4OlxcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbiAxODk6XFx0XFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDE6MjkuMDk4NzI5NDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0MTU3MjE1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBIRlMrIERpcmVjdCBJL08gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgaGZzcGx1c19kaXJlY3RfSU9gIGNvbWVzIGludG8gcGxheS4gSSdtIGZvY3VzaW5nIG9uIGl0cyBpbnRlcmFjdGlvbnMsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJlY3QgSS9PIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCdzIGEga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUgZm9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBieXBhc3NpbmcgdGhlIHBhZ2UgY2FjaGUsIGFuZCBkZWFsaW5nIHdpdGggcG90ZW50aWFsIGNvbXBsZXhpdGllcyBhcm91bmQgZGF0YSBjb25zaXN0ZW5jeS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBjb250ZXh0IHRvIHNlZSBob3cgZGF0YSBpcyByZWFkL3dyaXR0ZW4gdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkaXJlY3RseS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGFsbCB0aGUgcmVsZXZhbnQgb3BlcmF0aW9ucy4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaXMgaW1wbGVtZW50ZWQgYmVjYXVzZSBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBkaXJlY3QgSS9PIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAyOjI2LjUxNDQ1MzYwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NTI0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzcGx1c19kaXJlY3RfSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2lub2RlLmM9NjI9c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMTIyLVxcbmZzL2hmc3BsdXMvaW5vZGUuYzoxMjM6c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTEyNC17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9MjAwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIwNi1cXHQuYm1hcFxcdFxcdD0gaGZzcGx1c19ibWFwLFxcbmZzL2hmc3BsdXMvaW5vZGUuYzoyMDc6XFx0LmRpcmVjdF9JT1xcdD0gaGZzcGx1c19kaXJlY3RfSU8sXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIwOC1cXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjoyNi41Nzg5MTEyMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzODYxNjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSEZTKyBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGhmc3BsdXNfZGlyZWN0X0lPYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCB3aXRoaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AuIFRoYXQgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGF0IGZpbGUsIGJ1dCBpdCdzIGFsc28gYXNzaWduZWQgdG8gYGhmc3BsdXNfYW9wcy5kaXJlY3RfSU9gLiBIbW0sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYW4gZXhwb3J0ZWQsIG9yIGF0IGxlYXN0LCBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgcGxheXMgYSByb2xlIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi5cblxuTGV0J3MgY2xhcmlmeSB3aGF0J3MgYXZhaWxhYmxlIHRvIG1lOiBgaGZzcGx1c19kaXJlY3RfSU9gIGlzIGRlZmluaXRlbHkgc3RhdGljLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBzZXR0aW5nIHVwIHRoZSBgaGZzcGx1c19hb3BzYCBzdHJ1Y3Qgb3IgZmlsZSBvcGVyYXRpb25zIG9uIGlub2RlcyBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayB0byBgZnMvaGZzcGx1cy9pbm9kZS5jYCBhbmQgZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjoyOS40MTc1MzAzNzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjQ1Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc3BsdXNfYW9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYnRyZWUuYz0xMzM9c3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTI1MC0gZnJlZV9pbm9kZTpcXG5mcy9oZnNwbHVzL2J0cmVlLmM6MjUxOlxcdHRyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfYW9wcztcXG5mcy9oZnNwbHVzL2J0cmVlLmMtMjUyLVxcdGlwdXQodHJlZS1cXHUwMDNlaW5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9NDM4PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtNDQwLS8qIGlub2RlLmMgKi9cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDo0NDE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQ0Mi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9MTg4PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTE5OS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MjAwOmNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMDEtXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz00NDY9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00ODctXFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmhmc3BsdXNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo0ODg6XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy00ODktXFx0XFx0aGlwLVxcdTAwM2VjbHVtcF9ibG9ja3MgPSBzYmktXFx1MDAzZWRhdGFfY2x1bXBfYmxvY2tzO1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ5My1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo0OTQ6XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy00OTUtXFx0XFx0aGlwLVxcdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTU2Nj1pbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNjI1LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcXG5mcy9oZnNwbHVzL2lub2RlLmM6NjI2OlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfYW9wcztcXG5mcy9oZnNwbHVzL2lub2RlLmMtNjI3LVxcdFxcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTYyOS1cXHRcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo2MzA6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy02MzEtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz0yOD1zdGF0aWMgaW50IGhmc3BsdXNfc3lzdGVtX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy00Mi1cXHRcXHRoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhpbm9kZSwgXFx1MDAyNnZoZHItXFx1MDAzZWFsbG9jX2ZpbGUpO1xcbmZzL2hmc3BsdXMvc3VwZXIuYzo0MzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTQ0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjoyOS40NzkxODYyMTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYzNDYwMjczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgSEZTKyBSZWd1bGFyIEZpbGUgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gSEZTKyBhbmQgc3BlY2lmaWNhbGx5IHdhbnQgdG8gbWFwIG91dCB0aGUgY29tbW9uIGZpbGUgb3BlcmF0aW9ucyBlbXBsb3llZCB3aGVuIGRlYWxpbmcgd2l0aCByZWd1bGFyIGZpbGVzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gdGhpbmtpbmcgYmV5b25kIHRoZSBiYXNpY3M7IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZWZmaWNpZW50KiBhbmQgKmlkaW9zeW5jcmF0aWMqIHdheXMgSEZTKyBoYW5kbGVzIHRoZXNlIGZpbGVzIHVuZGVyIHRoZSBob29kLiBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgYSBnZW5lcmFsIGxpc3Q7IEknbSB0cnlpbmcgdG8gbWVudGFsbHkgcmVjb25zdHJ1Y3QgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhdCBwbGF5LlxuXG5TbywgSSdtIGNvbnNpZGVyaW5nOiB3aGF0IG9wZXJhdGlvbnMgYXJlIGxpa2VseSB0byBiZSBoZWF2aWx5IG9wdGltaXplZCBkdWUgdG8gZnJlcXVlbnQgdXNlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBCLXRyZWUgc3RydWN0dXJlIG9uIHRoZXNlIG9wZXJhdGlvbnM/IEhvdyBkb2VzIHRoZSBleHRlbnQtYmFzZWQgYWxsb2NhdGlvbiB3b3JrIGluIHByYWN0aWNlPyBTcGVjaWZpY2FsbHksIEknbSB3b25kZXJpbmc6XG5cbiogICAqKkZpbGUgQ3JlYXRpb246KiogVGhlIGludGVycGxheSBiZXR3ZWVuIGFsbG9jYXRpbmcgYmxvY2tzIGluIHRoZSBjYXRhbG9nIEItdHJlZSwgdGhlIGFsbG9jYXRpb24gZmlsZSwgYW5kIGFueSBtZXRhZGF0YSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIHJvbGUgb2YgdGhlIGFsbG9jYXRpb24gYml0bWFwLlxuKiAgICoqRmlsZSBPcGVuaW5nOioqIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFjY2Vzc2VkIGR1cmluZyBhbiBgb3BlbigpYCBjYWxsPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhdGFsb2cgdHJlZSBsb29rdXAsIHZvbHVtZSBoZWFkZXIgYWNjZXNzZXMgKGlmIGFueSksIGFuZCBwb3NzaWJsZSBjYWNoaW5nIHN0cmF0ZWdpZXMgYXQgcGxheS5cbiogICAqKkZpbGUgUmVhZGluZy9Xcml0aW5nOioqIEhvdyBkb2VzIEhGUysgaGFuZGxlIGV4dGVudC1iYXNlZCBhbGxvY2F0aW9uIGR1cmluZyBzZXF1ZW50aWFsIEkvTyB2ZXJzdXMgcmFuZG9tIGFjY2Vzcz8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGJsb2NrIG1hcHBpbmcgcHJvY2VzcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbi4gSG93IGRvZXMgam91cm5hbGluZyBmYWN0b3IgaW4gaGVyZT8gV2hhdCdzIHRoZSBpbXBhY3Qgb2YgdGhlIGJsb2NrIHNpemUgb24gcGVyZm9ybWFuY2U/IEFyZSB0aGVyZSBhbnkgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgbGFyZ2UgZmlsZXMgb3Igc3BhcnNlIGZpbGVzP1xuKiAgICoqRmlsZSBUcnVuY2F0aW9uOioqIEhvdyBpcyBmaWxlIHRydW5jYXRpb24gaGFuZGxlZD8gRG9lcyBpdCBpbnZvbHZlIGNsZWFyaW5nIGJsb2NrcyBhbmQgdXBkYXRpbmcgdGhlIGFsbG9jYXRpb24gYml0bWFwPyBXaGF0J3MgdGhlIG92ZXJoZWFkIGludm9sdmVkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZm9yIGZpbGUgc3lzdGVtIGNvbnNpc3RlbmN5P1xuKiAgICoqTWV0YWRhdGEgVXBkYXRlczoqKiBUaGlzIGlzIGltcG9ydGFudCDigJMgc3BlY2lmaWNhbGx5LCB0aGUgZWZmaWNpZW50IHdheSB0aGF0IGF0dHJpYnV0ZXMgbGlrZSBtb2RpZmljYXRpb24gdGltZSwgZmlsZSBzaXplLCBwZXJtaXNzaW9ucywgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG1hbmFnZWQuIEFyZSB0aGVzZSBhdHRyaWJ1dGVzIGRpcmVjdGx5IHN0b3JlZCBpbiB0aGUgY2F0YWxvZyBCLXRyZWUsIG9yIGFyZSB0aGVyZSBzZXBhcmF0ZSBhdHRyaWJ1dGUgQi10cmVlcz8gSSdtIGxvb2tpbmcgZm9yIGRldGFpbHMuXG4qICAgKipGaWxlIERlbGV0aW9uOioqIEhvdyBhcmUgZmlsZSBleHRlbnRzIGRlYWxsb2NhdGVkPyBJcyB0aGUgY2F0YWxvZyBlbnRyeSBzaW1wbHkgcmVtb3ZlZCBhbmQgYmxvY2tzIG1hcmtlZCBhcyBmcmVlIGluIHRoZSBhbGxvY2F0aW9uIGZpbGU/IEFyZSB0aGVyZSBhbnkgZGVmZXJyZWQgb3BlcmF0aW9ucyBvciBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtcz8gV2hhdCBhYm91dCBoYXJkIGxpbmtzP1xuKiAgICoqUmUtZW51bWVyYXRpb246KiogSG93IGFyZSBmaWxlIGFuZCBkaXJlY3RvcnkgZW51bWVyYXRpb25zIGltcGxlbWVudGVkPyBJIGFzc3VtZSB0aGlzIGlzIGEgQi10cmVlIHdhbGssIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGV0YWlscy5cbiogICAqKkNvbXByZXNzaW9uOioqIEhvdyBpcyBjb21wcmVzc2lvbiBoYW5kbGVkPyBJIG5lZWQgdG8ga25vdyBob3cgY29tcHJlc3Npb24gaXMgbWFuYWdlZCBhbmQgdW5tYW5hZ2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggZWFjaCBvZiB0aGVzZSBzY2VuYXJpb3MsIGFuZCBJJ2xsIHByb2JhYmx5IHJlZmVyIHRvIHNvbWUgSEZTKyBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGlmIEknbSBnb2luZyB0byBwcm92aWRlIGFjY3VyYXRlIGFuc3dlcnMuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgY3J1Y2lhbCBjb21wb25lbnRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgaW4gbWFuYWdpbmcgcmVndWxhciBmaWxlcy4gVGhpcyBzaG91bGQgYmUgYSBnb29kIGV4ZXJjaXNlIGluIG1lbW9yeSByZWNhbGwgYW5kIGNvbmNlcHR1YWwgb3JnYW5pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDI6MzUuMTEzNzkzMjIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU4MTI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvaW5vZGUuYz00MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQzMi1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NDMzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xcbmZzL2hmc3BsdXMvaW5vZGUuYy00MzQtXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz00NDY9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00ODYtXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ4NzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ4OC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9NTY2PWludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy02MjQtXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjYyNTpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTYyNi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAyOjM1LjE4MDM3ODg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODg4NTAyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIEZpbGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgaGZzcGx1c19maWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdHMgYXQgYSBsb3cgbGV2ZWwuIFdoYXQgZG9lcyBBcHBsZSdzIEhGUysgaW1wbGVtZW50YXRpb24gcmVhbGx5IGRvIHdoZW4gaGFuZGxpbmcgZmlsZSBvcGVyYXRpb25zPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgcmVhZCwgd3JpdGUsIHRydW5jYXRlLCBhbmQgYWxsIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGFkZHJlc3NlZCBzb21lIG9mIHRoZSBtb3JlIHN1YnRsZSBjb21wbGV4aXRpZXMuIEFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnM/IEVkZ2UgY2FzZXMgaGFuZGxlZCBlbGVnYW50bHk/IEFuZCBvZiBjb3Vyc2UsIEknbSBleHBlY3Rpbmcgc29tZSBpZGlvc3luY3Jhc2llcy4gSXQncyBIRlMrLCBhZnRlciBhbGwuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBzdHJ1Y3R1cmUgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjo1NC4wNjg4ODQ1ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaGZzcGx1cy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHRcXHQuZmlsZWF0dHJfc2V0XFx0PSBoZnNwbHVzX2ZpbGVhdHRyX3NldCxcXG4gNDMxOlxcdH07XFxuIDQzMjpcXHRcXG4gNDMzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xcbiA0MzQ6XFx0XFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gNDM1OlxcdFxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuIDQzNjpcXHRcXHQud3JpdGVfaXRlclxcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXFxuIDQzNzpcXHRcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbiA0Mzg6XFx0XFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiA0Mzk6XFx0XFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gNDQwOlxcdFxcdC5mc3luY1xcdFxcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxcbiA0NDE6XFx0XFx0Lm9wZW5cXHRcXHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxcbiA0NDI6XFx0XFx0LnJlbGVhc2VcXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxcbiA0NDM6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcXG4gNDQ0OlxcdH07XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXFxuIDQ0NzpcXHRcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIDQ0ODpcXHR7XFxuIDQ0OTpcXHRcXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDI6NTQuMDY4OTY0OTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzQ2NTExNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYSBQb3RlbnRpYWwgSEZTKyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IGRpcmVjdCBJL08gd3JpdGVzIHdvcmsgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGggYE9fRElSRUNUYCBlbmFibGVkLiBUaGUgY2FsbCBjaGFpbiBpcyBwcmV0dHkgc3RhbmRhcmQ6IGBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcmAgZG93biB0byBgaGZzcGx1c19kaXJlY3RfSU9gLiBOb3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBpZiBhIHdyaXRlIGhhcHBlbnMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgKEVPRiksIGFuZCBpdCdzIGEgZGlyZWN0IHdyaXRlLCB3ZSBoaXQgYSBzZXF1ZW5jZSB0aGF0IGludm9sdmVzIGBpbm9kZV9kaW9fd2FpdGAsIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAsIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlYCwgYW5kIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuXG5cblRoYXQgc2VxdWVuY2Ugc2NyZWFtcyBwb3RlbnRpYWwgdHJvdWJsZS4gSXQncyBpbiB0aGUgZmlsZXN5c3RlbSBjb3JlLCByaWdodCB0aGVyZSBpbiBgZnMvaGZzcGx1c2AsIHdoaWNoIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB0aHJvdWdoIFFFTVUgYW5kIGVhc2lseSB0ZXN0YWJsZSB3aXRoIHNvbWV0aGluZyBsaWtlIFN5emthbGxlci4gWW91IGp1c3QgbmVlZCB0byBtb3VudCBhbiBIRlMrIGltYWdlIG9yIGxvb3BiYWNrIGRldmljZSwgb3BlbiBhIGZpbGUgd2l0aCBgT19ESVJFQ1RgLCBhbmQgd3JpdGUgcGFzdCBFT0YuIEJhbmchIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHdlaXJkIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSdsbCBjaGVjayBgZnMvaGZzcGx1cy9LY29uZmlnYC4gUmlnaHQsIGBIRlNQTFVTX0ZTYCBkZXBlbmRzIG9uIGBCTE9DS2AsIHNvIHRoYXQncyB0aGUgb25seSBpbW1lZGlhdGUgZGVwZW5kZW5jeS4gTGV0IG1lIHNjYW4gYGZzL0tjb25maWdgIGFuZCBgZnMvTWFrZWZpbGVgIG1vcmUgZ2VuZXJhbGx5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGJ1aWxkIGZsYWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgYGZzL2hmc3BsdXNgIGlzIGNvbXBpbGVkLiBHb3R0YSBjb3ZlciBhbGwgYmFzZXMgYmVmb3JlIHJ1bm5pbmcgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MTcuODE1NDgwNTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzEyMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc3BsdXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpXFx0Kz0gaXNvZnMvXFxuZnMvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpXFx0Kz0gaGZzcGx1cy8gIyBCZWZvcmUgaGZzIHRvIGZpbmQgd3JhcHBlZCBIRlMrXFxuZnMvTWFrZWZpbGUtODItb2JqLSQoQ09ORklHX0hGU19GUylcXHRcXHQrPSBoZnMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAzOjE3Ljg4MzE5Nzk4N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzcwODQwNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGZzL2hmc3BsdXMvTWFrZWZpbGVgIGZpbGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlcyBvciByZWxldmFudCBNYWtlZmlsZXMgaGlkaW5nIGVsc2V3aGVyZS4gV2UgY2FuJ3QgYWZmb3JkIHRvIG1pc3MgYW55dGhpbmcgd2hlbiBkZWFsaW5nIHdpdGggYSBmaWxlc3lzdGVtIGFzIGNvbXBsZXggYXMgSEZTIFBsdXMuIEkndmUgZ290IHRvIGNvdmVyIGFsbCBteSBiYXNlcy4gU28sIGxldCdzIHRha2UgYSBxdWljayBwYXNzIOKAkyBhcmUgdGhlcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZmxvYXRpbmcgYXJvdW5kIGluIG90aGVyIGRpcmVjdG9yaWVzPyBMZXQncyBjaGVjay4gVGltZSB0byBkbyBhIHF1aWNrIHNhbml0eSBzd2VlcCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODk4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MjIuMjU0MDQxMDc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGhmc3BsdXMgZmlsZXN5c3RlbSByb3V0aW5lcy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpICs9IGhmc3BsdXMub1xcbiAgIDc6XFx0XFxuICAgODpcXHRoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBpb2N0bC5vIGV4dGVudHMubyBjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0IyBLVW5pdCB0ZXN0c1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX0hGU1BMVVNfS1VOSVRfVEVTVCkgKz0gdW5pY29kZV90ZXN0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MjIuMjU0MTM4NzU0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDgxNTg5NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEhGUysgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBIRlMrIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQtdGltZSBvcHRpb25zLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgSEZTUExVU19GU2AgY29uZmlnIGluIGBmcy9oZnNwbHVzL0tjb25maWdgLiBSaWdodCwgaXQgYGRlcGVuZHMgb24gQkxPQ0tgLCBzZWxlY3RzIGBCVUZGRVJfSEVBRGAsIGBOTFNgLCBgTkxTX1VURjhgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBTbywgYEhGU1BMVVNfRlNgIGlzIHRoZSBjb3JlLCBhbmQgYEJMT0NLYCBpcyBhIHByZXJlcXVpc2l0ZSwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGltcG9ydGFudCBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb24gdGhlIG1vZGlmaWNhdGlvbnMsIHBhcnRpY3VsYXJseSB0byB0aGUgZGlyZWN0IEkvTyBwYXRoLiBJIHNlZSB0aGF0IGBoZnNwbHVzX2RpcmVjdF9JT2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBjaGFuZ2VkLiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYGhmc3BsdXNfYW9wc2AuXG5cbkkgc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgYGZzL2hmc3BsdXMvaW5vZGUuY2AgYW5kIHJlbGF0ZWQgZmlsZXMuIEFoLCBiZXNpZGVzIGBoZnNwbHVzX2RpcmVjdF9JT2AsIEkgYWxzbyBoYXZlIGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19uZXdfaW5vZGVgLCBhbmQgYGhmc3BsdXNfY2F0X3JlYWRfaW5vZGVgLiBJIHNob3VsZCBwcm9iYWJseSBsaXN0IG91dCB0aGUgY29udGVudHMgb2YgYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozNS43MzU3MzA2MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjQ2MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2lub2RlLmMtMjUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjI2OnN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yNy17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMzAtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjMxOnN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMyLXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00MC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NDE6aW50IGhmc3BsdXNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2hmc3BsdXMvaW5vZGUuYy00Mi1cXHRcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHBvcyxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01Ni1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NTc6c3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU4LXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy02MS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NjI6c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTYzLXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xMjItXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjEyMzpzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTI0LXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xODEtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjE4MjpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTgzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTIxMj1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMTYtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjIxNzpzdGF0aWMgaW50IGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIxOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBoZnNwbHVzX3Blcm0gKnBlcm1zLCBpbnQgZGlyKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTI3MC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MjcxOnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTI3Mi17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMjgwLVxcbmZzL2hmc3BsdXMvaW5vZGUuYzoyODE6c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9oZnNwbHVzL2lub2RlLmMtMjgyLXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yOTktXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjMwMDpzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzAxLVxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMyOS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MzMwOmludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzEtXFx0XFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zNTUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjM1NjppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTM1Ny1cXHRcXHQgICAgICAgaW50IGRhdGFzeW5jKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTQzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00NDUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ0NjpzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL2hmc3BsdXMvaW5vZGUuYy00NDctXFx0XFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTUwNC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NTA1OnZvaWQgaGZzcGx1c19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnNwbHVzL2lub2RlLmMtNTA2LXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01MjYtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjUyNzp2b2lkIGhmc3BsdXNfaW5vZGVfcmVhZF9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrKVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01Mjgte1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU1Ni1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NTU3OnZvaWQgaGZzcGx1c19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU1OC1cXHRcXHRzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01NjUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjU2NjppbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU2Ny17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNjQ4LVxcbmZzL2hmc3BsdXMvaW5vZGUuYzo2NDk6aW50IGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTY1MC17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNzQxLVxcbmZzL2hmc3BsdXMvaW5vZGUuYzo3NDI6aW50IGhmc3BsdXNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxcbmZzL2hmc3BsdXMvaW5vZGUuYy03NDMte1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTc1OS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NzYwOmludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9oZnNwbHVzL2lub2RlLmMtNzYxLVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MzUuNzk2OTgyNTc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMTkzNDU0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEhGUysgRGlyZWN0IEkvTyBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgZGlyZWN0IEkvTyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgSEZTKyBmaWxlIHN5c3RlbS4gTGV0IG1lIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gVGhlIGNvcmUgZnVuY3Rpb24gdGFyZ2V0ZWQgZm9yIGRpcmVjdCBJL08gaXMgYGhmc3BsdXNfZGlyZWN0X0lPYCwgYnV0IHRoZXJlIGFyZSBzZXZlcmFsIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgYWxzbyByZXF1aXJlIGNhcmVmdWwgc2NydXRpbnkgZHVyaW5nIHRoaXMgZnV6emluZyBjYW1wYWlnbjogYGhmc3BsdXNfd3JpdGVfYmVnaW5gLCBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfZmlsZV9vcGVuYCwgYGhmc3BsdXNfZmlsZV9yZWxlYXNlYCwgYGhmc3BsdXNfbmV3X2lub2RlYCwgYGhmc3BsdXNfY2F0X3JlYWRfaW5vZGVgLCBhbmQgYGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlYC4gVGhlc2UgbmVlZCB0byBiZSBpbmNsdWRlZC5cblxuQWxyaWdodCwgdGltZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24uIFRoZSBmdXp6aW5nIHZlcmRpY3QgaXMgXCJXb3J0aEZ1enppbmdcIiB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ7IGl0ICpzaG91bGQqIG9ubHkgY29udGFpbiBgaGZzcGx1c19kaXJlY3RfSU9gLiBUaGUgY3JpdGljYWwgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGUgYEhGU1BMVVNfRlNgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgdG8gZW5zdXJlIHRoaXMgYWxsIHdvcmtzLiBUaGlzIG1ha2VzIHNlbnNlLlxuXG5GaW5hbGx5LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHRvIGV4ZWN1dGUgdGhlIHZlcmRpY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTI5LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozOC45MTYzMzEwNjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5NTYyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2RpcmVjdF9JT1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBpbiBIRlMrIGZpbGVzeXN0ZW1zIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSwgZmx1c2hpbmcgZGlydHkgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBwZXJmb3JtaW5nIGJsb2NrZGV2X2RpcmVjdF9JTy4gVGhpcyBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gSS9PIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IEkvTyB3cml0ZXMgdG8gSEZTKyBtb3VudGVkIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2RpcmVjdF9JT1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBpbiBIRlMrIGZpbGVzeXN0ZW1zIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSwgZmx1c2hpbmcgZGlydHkgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBwZXJmb3JtaW5nIGJsb2NrZGV2X2RpcmVjdF9JTy4gVGhpcyBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gSS9PIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IEkvTyB3cml0ZXMgdG8gSEZTKyBtb3VudGVkIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozOS4wNjEyOTU2OThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTcwOTkwOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MzkuMDYxOTQ5NzA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI1NzAzMzAwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNwbHVzX2RpcmVjdF9JTygpYCBpbiBgZnMvaGZzcGx1cy9pbm9kZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSBleHBhbmRpbmcgdGhlIGZpbGUgdmlhIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCwgZmx1c2hpbmcgZGlydHkgcGFnZWNhY2hlIHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgZGVsZWdhdGluZyB0byBgYmxvY2tkZXZfZGlyZWN0X0lPKClgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChlLmcuLCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rIGF0dHJpYnV0ZXMpLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpc2l6ZWAsIGBzdGFydF9vZmZgLCBgZW5kX29mZmAsIGBzdGFydF9wYWdlYCwgYGVuZF9wYWdlYCwgYHJldGApIGFyZSBkZXRlcm1pbmlzdGljYWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG4zLiBUaGUgZXhwYW5zaW9uIGxvZ2ljIHNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgaG9sZXMgY3JlYXRlZCBiZWZvcmUgRU9GIGFyZSB6ZXJvZWQgdmlhIHBhZ2VjYWNoZSBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLlxcbjQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIERJTyBvZmZzZXRzLCBwYWdlIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyAoc3VjaCBhcyBgaW5vZGVfZGlvX3dhaXRgKSwgb3IgYnVmZmVyIGJvdW5kcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ4YmI4MTBkOGI2MDc3ZWVmMmE0NWE3M2FlYjhiZGViNGJkZjNmOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDowMTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggNjE1M2U1Y2M2ZWI2NS4uN2U2Y2M0ZGRlOWYyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTI1LDkgKzEyNSw0NCBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4rXHRsb2ZmX3QgaXNpemU7XG4gXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuIFx0c3NpemVfdCByZXQ7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbitcdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbitcdCAqL1xuK1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4rXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbitcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuK1x0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4rXHRcdCAqL1xuK1x0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4rXG4rXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4rXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4rXG4rXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXG4rXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbitcdH1cbitcbiBcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuIFxuIFx0LypcbkBAIC0xMzUsOCArMTcwLDcgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IHJldCBcdTAwM2MgMCkpIHtcbi1cdFx0bG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVx0XHRsb2ZmX3QgZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgKyBjb3VudDtcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4gXG4gXHRcdGlmIChlbmQgXHUwMDNlIGlzaXplKVxuIFx0XHRcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozOS4wNjE5NTI2MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNDEyODk4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIERpcmVjdCBJL08gUGF0Y2gqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlmZi4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjaGFuZ2VkIGhlcmUuIExvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHRhcmdldGluZyBgZnMvaGZzcGx1cy9pbm9kZS5jYCwgd2l0aCBhIHNwZWNpZmljIGZvY3VzIG9uIHRoZSBgaGZzcGx1c19kaXJlY3RfSU9gIGZ1bmN0aW9uLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24sIEkgbmVlZCB0byBrbm93IHdoeSBzb21lb25lIGlzIGNoYW5naW5nIHRoZSBkaXJlY3QgSS9PIGZvciBIRlMrLiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGBoZnNwbHVzX2RpcmVjdF9JT2AuIEtub3dpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCB0byBzZWUgZXhhY3RseSB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgYW5kIHdoeS4gSSdsbCByZWFkIHRocm91Z2ggdGhhdCBhcmVhIGNhcmVmdWxseSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDQ6MDIuNDAzMjQ1Njc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnNwbHVzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdFxcdFxcdGhmc19ibm9kZV91bmhhc2gobm9kZSk7XFxuIDExNjpcXHRcXHRcXHRcXHRoZnNfYm5vZGVfZnJlZShub2RlKTtcXG4gMTE3OlxcdFxcdFxcdH0gd2hpbGUgKC0taSBcXHUwMDI2XFx1MDAyNiBuaWR4IFxcdTAwM2MgdHJlZS1cXHUwMDNlbm9kZV9jb3VudCk7XFxuIDExODpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dHJlZS1cXHUwMDNlaGFzaF9sb2NrKTtcXG4gMTE5OlxcdFxcdH1cXG4gMTIwOlxcdFxcdHJldHVybiByZXMgPyB0cnlfdG9fZnJlZV9idWZmZXJzKGZvbGlvKSA6IGZhbHNlO1xcbiAxMjE6XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4gMTI0OlxcdHtcXG4gMTI1OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4gMTI2OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbiAxMjc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIDEyODpcXHRcXHRsb2ZmX3QgaXNpemU7XFxuIDEyOTpcXHRcXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcXG4gMTMwOlxcdFxcdGxvZmZfdCBlbmQgPSBpb2NiLVxcdTAwM2VraV9wb3MgKyBjb3VudDtcXG4gMTMxOlxcdFxcdHNzaXplX3QgcmV0O1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHQvKlxcbiAxMzQ6XFx0XFx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cXG4gMTM1OlxcdFxcdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cXG4gMTM2OlxcdFxcdCAqL1xcbiAxMzc6XFx0XFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbiAxMzg6XFx0XFx0XFx0bG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjtcXG4gMTM5OlxcdFxcdFxcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdFxcdC8qXFxuIDE0NDpcXHRcXHRcXHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcXG4gMTQ1OlxcdFxcdFxcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cXG4gMTQ2OlxcdFxcdFxcdCAqL1xcbiAxNDc6XFx0XFx0XFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRcXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4gMTUwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDE1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRcXHRzdGFydF9vZmYgPSBpc2l6ZTtcXG4gMTU0OlxcdFxcdFxcdGVuZF9vZmYgPSAoZW5kIFxcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRcXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNTg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0XFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiAxNjE6XFx0XFx0XFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdFxcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcXG4gMTY0OlxcdFxcdH1cXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0cmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKGlvY2IsIGlub2RlLCBpdGVyLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdC8qXFxuIDE2OTpcXHRcXHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcXG4gMTcwOlxcdFxcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXFxuIDE3MTpcXHRcXHQgKi9cXG4gMTcyOlxcdFxcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAzYyAwKSkge1xcbiAxNzM6XFx0XFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdFxcdGlmIChlbmQgXFx1MDAzZSBpc2l6ZSlcXG4gMTc2OlxcdFxcdFxcdFxcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XFxuIDE3NzpcXHRcXHR9XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldHVybiByZXQ7XFxuIDE4MDpcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAxODM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcXG4gMTg2OlxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XFxuIDE4OTpcXHRcXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDowMi40MDMzNzQwMDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU0MzM2MDM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhGUysgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgaGZzcGx1c19kaXJlY3RfSU9gLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgRGlyZWN0IEkvTyB3cml0ZXMgdGhhdCBnbyBiZXlvbmQgdGhlIGN1cnJlbnQgZW5kLW9mLWZpbGUuIFByZXZpb3VzbHksIHdpdGggdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBoYWQgYSBsaW1pdGF0aW9uIG9mIG9ubHkgYWxsb2NhdGluZyBzZXF1ZW50aWFsIGJsb2Nrcywgd2hpY2ggbGVkIHRvIGZhaWx1cmVzIG9yIHByb2JsZW1zIHdoZW4gd3JpdGluZyBwYXN0IEVPRi5cblxuVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2xldmVyIHdvcmthcm91bmQuIFdoZW4gd2UgaGF2ZSBhIHdyaXRlIG9wZXJhdGlvbiBhbmQgdGhlIHdyaXRlIHBvc2l0aW9uIChgaW9jYi1cdTAwM2VraV9wb3NgKSBleHRlbmRzIHBhc3QgdGhlIGZpbGUgc2l6ZSAoYGlfc2l6ZV9yZWFkKGlub2RlKWApLCB0aGUgc3lzdGVtIG5vdyB3YWl0cyBmb3IgYW55IGV4aXN0aW5nIERJTyBvcGVyYXRpb25zIHRvIGZpbmlzaCB1c2luZyBgaW5vZGVfZGlvX3dhaXRgLiBUaGVuLCBpdCBjYWxscyBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGVgIHRvIGV4cGFuZCB0aGUgZmlsZSwgZWZmZWN0aXZlbHkgemVyb2luZyBvdXQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIG9sZCBzaXplIGFuZCB0aGUgd3JpdGUgcG9zaXRpb24gdmlhIHRoZSBwYWdlIGNhY2hlLiBBZnRlciB0aGF0IGV4cGFuc2lvbiwgdGhlIGRpcnR5IHBhZ2VzIGFyZSBmbHVzaGVkIHVzaW5nIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlYCwgYW5kIHRoZSBwYWdlIGNhY2hlIGlzIGludmFsaWRhdGVkIHVzaW5nIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuIEZpbmFsbHksIGl0IHByb2NlZWRzIHdpdGggdGhlIGBibG9ja2Rldl9kaXJlY3RfSU9gIGNhbGwuXG5cblRoaXMgZXhwYW5zaW9uIGxvZ2ljIHNlZW1zIGZhbWlsaWFyLCBhbmQgSSdkIGxpa2UgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQgaW4gb3RoZXIgZmlsZXN5c3RlbXMuIExldCBtZSBjaGVjayBob3cgb3RoZXIgZmlsZSBzeXN0ZW1zIGxpa2UgZXh0Miwgb3IgZXZlbiBGQVQsIGFyZSBoYW5kbGluZyBzaW1pbGFyIHNjZW5hcmlvcy4gSSdsbCBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlYCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hpY2ggZmlsZXN5c3RlbXMgbWlnaHQgdXNlIHRoaXMgZnVuY3Rpb24gb3Igc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHNwYXJzZS1maWxlIGV4cGFuc2lvbiBmb3IgZGlyZWN0IEkvTy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjA0OjA3Ljk0NjczOTMyNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MDE0ODM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idWZmZXIuYz0yNDY3PUVYUE9SVF9TWU1CT0woYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTI0NzItICovXFxuZnMvYnVmZmVyLmM6MjQ3MzppbnQgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuZnMvYnVmZmVyLmMtMjQ3NC17XFxuLS1cXG5mcy9idWZmZXIuYy0yNDk0LX1cXG5mcy9idWZmZXIuYzoyNDk1OkVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpO1xcbmZzL2J1ZmZlci5jLTI0OTYtXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTIxNz1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjIyLVxcbmZzL2ZhdC9maWxlLmM6MjIzOlxcdGVyciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBzaXplKTtcXG5mcy9mYXQvZmlsZS5jLTIyNC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTEyMz1zdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xNDQtXFx0XFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjE0NTpcXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTE0Ni1cXHRcXHQgKi9cXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xNDgtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjE0OTpcXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTUwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9MzAwPXN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMxMy1cXHRcXHRpZiAoYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG5mcy9oZnNwbHVzL2lub2RlLmM6MzE0OlxcdFxcdFxcdGVycm9yID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yNzA9aW50IGNvbnRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yNzItXFx0XFx0XFx0Z2V0X2Jsb2NrX3QgKiwgbG9mZl90ICopO1xcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDoyNzM6aW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjc0LXZvaWQgYmxvY2tfY29tbWl0X3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBmcm9tLCBzaXplX3QgdG8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDoxMC4xOTY4OTUyMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1NDA1OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnMvYnVmZmVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKndoYXQqIGl0IGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBmaWxlc3lzdGVtIGJ1ZmZlciBsYXllci4gSXMgdGhpcyBoYW5kbGluZyBibG9jayBhbGxvY2F0aW9uLCBwYWdlIHBpbm5pbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNjYW4gb2YgaXRzIHB1cnBvc2Ugd291bGQgYmUgZ29vZC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG5hbWUgYW5kIGltcGxlbWVudGF0aW9uIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXQncyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNpbXBsZSBjb250aW51YXRpb24gZXhwYW5zaW9uIGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gY29udGlndW91cyBhbGxvY2F0aW9uIG9yIG1hcHBpbmcgb2YgZGF0YSB3aXRoaW4gdGhlIGJ1ZmZlciBjYWNoZSwgbGlrZWx5IGluIGEgc2NlbmFyaW8gd2hlcmUgYSBidWZmZXIgbmVlZHMgdG8gYmUgbGFyZ2VyIHRoYW4gY3VycmVudGx5IGFsbG9jYXRlZC4gSSdtIGFzc3VtaW5nIGl0IG1heSBiZSBhIGZhbGxiYWNrIG1ldGhvZCwgbWF5YmUgd2l0aG91dCBhbGwgdGhlIGJlbGxzIGFuZCB3aGlzdGxlcyBvZiBtb3JlIGFkdmFuY2VkIGV4cGFuc2lvbiBzdHJhdGVnaWVzLiBMZXQncyBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGhvbGRzIHRydWUuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDoxMi4yNjIzMDM1MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2J1ZmZlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NzA6XFx0ICogdHJ1bmNhdGVzLiAgVXNlcyBmaWxlc3lzdGVtIHBhZ2VjYWNoZSB3cml0ZXMgdG8gYWxsb3cgdGhlIGZpbGVzeXN0ZW0gdG9cXG4yNDcxOlxcdCAqIGRlYWwgd2l0aCB0aGUgaG9sZS4gIFxcbjI0NzI6XFx0ICovXFxuMjQ3MzpcXHRpbnQgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuMjQ3NDpcXHR7XFxuMjQ3NTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuMjQ3NjpcXHRcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphb3BzID0gbWFwcGluZy1cXHUwMDNlYV9vcHM7XFxuMjQ3NzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI0Nzg6XFx0XFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcXG4yNDc5OlxcdFxcdGludCBlcnI7XFxuMjQ4MDpcXHRcXG4yNDgxOlxcdFxcdGVyciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIHNpemUpO1xcbjI0ODI6XFx0XFx0aWYgKGVycilcXG4yNDgzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0ODQ6XFx0XFxuMjQ4NTpcXHRcXHRlcnIgPSBhb3BzLVxcdTAwM2V3cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCBcXHUwMDI2Zm9saW8sIFxcdTAwMjZmc2RhdGEpO1xcbjI0ODY6XFx0XFx0aWYgKGVycilcXG4yNDg3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRlcnIgPSBhb3BzLVxcdTAwM2V3cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCwgZm9saW8sIGZzZGF0YSk7XFxuMjQ5MDpcXHRcXHRCVUdfT04oZXJyIFxcdTAwM2UgMCk7XFxuMjQ5MTpcXHRcXG4yNDkyOlxcdG91dDpcXG4yNDkzOlxcdFxcdHJldHVybiBlcnI7XFxuMjQ5NDpcXHR9XFxuMjQ5NTpcXHRFWFBPUlRfU1lNQk9MKGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKTtcXG4yNDk2OlxcdFxcbjI0OTc6XFx0c3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4yNDk4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4yNDk5OlxcdFxcdFxcdFxcdCAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgKmJ5dGVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDoxMi4yNjI1MDA4NTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM2OTczOTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgU2Vzc2lvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSd2ZSBhbmFseXplZCB0aGUgY2hhbmdlcyB0byBgaGZzcGx1c19kaXJlY3RfSU9gIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgLCBmb2N1c2luZyBvbiBLTVNBTiBjcml0ZXJpYS5cblxuRmlyc3QsIEkgZXhhbWluZWQgd2hldGhlciBhbnkga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIOKAkyBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGFyZSB0b3VjaGVkIGhlcmUuIE5vIHJpc2sgdGhlcmUuXG5cbk5leHQsIEkgbG9va2VkIGZvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGtleSBsb2NhbCB2YXJpYWJsZXMgbGlrZSBgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGFuZCBgZW5kX3BhZ2VgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY29kZSBwYXRoIHRoYXQgdXNlcyBgaXNpemVgIGlzIGFsc28gc2FmZS4gTm8gaXNzdWVzIHRoZXJlLlxuXG5UaGlyZCwgSSBjb25zaWRlcmVkIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIHNlZSBub3RoaW5nIGluIHRoZSBwYXRjaCB0aGF0IGludHJvZHVjZXMgb3IgbW9kaWZpZXMgc3VjaCBhIHNpdHVhdGlvbi5cblxuRmluYWxseSwgSSBjaGVja2VkIGZvciBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaGFuZGxlcyBEaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GLiBUaGUgcGF0Y2ggKmNvcnJlY3RseSogYWRkcmVzc2VzIHRoaXMgYnkgY2FsbGluZyBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKWAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCB1dGlsaXplcyB0aGUgcGFnZSBjYWNoZSBgd3JpdGVfYmVnaW5gIGFuZCBgd3JpdGVfZW5kYCBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBleHRlbmRlZCByZWdpb24gb2YgdGhlIGZpbGUgaXMgemVyb2VkIG91dCBiZWZvcmUgd3JpdGluZywgZm9sbG93ZWQgYnkgcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24sIGFuZCBmaW5hbGx5IGNhbGxpbmcgYGJsb2NrZGV2X2RpcmVjdF9JT2AuIFRoaXMgaXMgKnByZWNpc2VseSogdGhlIGNvcnJlY3QgYXBwcm9hY2guIEFueSB0aGVvcmV0aWNhbCBtZW1vcnkgZXJyb3JzIGluIERJTywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBidWZmZXIgb3ZlcmZsb3dzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cblRoZXJlIGlzICpubyogY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBLTVNBTiBndWlkZWxpbmU6IFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBUaGlzIGFsc28gaW5jbHVkZXMgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHVwZGF0ZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGJ5IGNhbGxpbmcgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLiBUaGlzIGV4cGFuc2lvbiB1c2VzIHBhZ2VjYWNoZSBgd3JpdGVfYmVnaW5gL2B3cml0ZV9lbmRgIHRvIHplcm8gaG9sZXMgcHJvcGVybHkuXG5cbkkgYW0gY29uZmlkZW50LlxuXG4qKlRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLioqIEhlcmUncyBteSByZWFzb25pbmcsIGNsZWFybHkgc3RhdGVkOlxuXG4xLiAgVGhlIHBhdGNoIG5vdyBjb3JyZWN0bHkgc3VwcG9ydHMgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSB6ZXJvLWZpbGxpbmcgZmlsZSBleHRlbnNpb25zIHZpYSBwYWdlIGNhY2hlIG1lY2hhbmlzbXMuXG4yLiAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuICAgICogICBObyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgaXMgY29waWVkIHRoYXQgY29udGFpbnMgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiAgICAqICAgTm8gdW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYnJhbmNoZXMgb3IgYXMgcmVhZHMuXG4gICAgKiAgIFRoZSBwYXRjaCdzIGxvZ2ljIGFjdGl2ZWx5ICphdm9pZHMqIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm8tbGVha3MsIGVuc3VyaW5nIHplcm8tZmlsbGluZy5cbiAgICAqICAgUG90ZW50aWFsIGlzc3VlcyBpbiBESU8gaGFuZGxpbmcgb3IgZmlsZSBleHRlbnNpb24gKGUuZy4gYnVmZmVyIGFjY2VzcyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTM3LCJPdXRwdXRUb2tlbnMiOjI4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjA0OjIxLjYzMjI0NDgzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzcGx1c19kaXJlY3RfSU8oKWAgaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gcHJvcGVybHkgaGFuZGxlIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgYnkgZXhwYW5kaW5nIHRoZSBmaWxlIHZpYSBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKWAsIGZsdXNoaW5nIGRpcnR5IHBhZ2VjYWNoZSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIGRlbGVnYXRpbmcgdG8gYGJsb2NrZGV2X2RpcmVjdF9JTygpYC5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29waWVzIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoZS5nLiwgYGNvcHlfdG9fdXNlcmAsIGlvY3RscywgbmV0bGluayBhdHRyaWJ1dGVzKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cXG40LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBESU8gb2Zmc2V0cywgcGFnZSByYW5nZSBjYWxjdWxhdGlvbnMsIGxvY2tpbmcgKHN1Y2ggYXMgYGlub2RlX2Rpb193YWl0YCksIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzcGx1c19kaXJlY3RfSU8oKWAgaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gcHJvcGVybHkgaGFuZGxlIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgYnkgZXhwYW5kaW5nIHRoZSBmaWxlIHZpYSBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKWAsIGZsdXNoaW5nIGRpcnR5IHBhZ2VjYWNoZSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIGRlbGVnYXRpbmcgdG8gYGJsb2NrZGV2X2RpcmVjdF9JTygpYC5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29waWVzIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoZS5nLiwgYGNvcHlfdG9fdXNlcmAsIGlvY3RscywgbmV0bGluayBhdHRyaWJ1dGVzKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cXG40LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBESU8gb2Zmc2V0cywgcGFnZSByYW5nZSBjYWxjdWxhdGlvbnMsIGxvY2tpbmcgKHN1Y2ggYXMgYGlub2RlX2Rpb193YWl0YCksIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlhf6m[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 19:36:20 +0000 UTC FinishedAt: 2026-08-31 20:04:23 +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": "b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HFSPLUS_FS" ], "series_id": "8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "hfsplus_direct_IO" ], "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNwbHVzX2RpcmVjdF9JTygpYCBpbiBgZnMvaGZzcGx1cy9pbm9kZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSBleHBhbmRpbmcgdGhlIGZpbGUgdmlhIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCwgZmx1c2hpbmcgZGlydHkgcGFnZWNhY2hlIHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgZGVsZWdhdGluZyB0byBgYmxvY2tkZXZfZGlyZWN0X0lPKClgLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChlLmcuLCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rIGF0dHJpYnV0ZXMpLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlzaXplYCwgYHN0YXJ0X29mZmAsIGBlbmRfb2ZmYCwgYHN0YXJ0X3BhZ2VgLCBgZW5kX3BhZ2VgLCBgcmV0YCkgYXJlIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U7IG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cbjQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIERJTyBvZmZzZXRzLCBwYWdlIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyAoc3VjaCBhcyBgaW5vZGVfZGlvX3dhaXRgKSwgb3IgYnVmZmVyIGJvdW5kcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgaW4gSEZTJiM0MzsgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMmIzQzOyBtb3VudGVkIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDhiYjgxMGQ4YjYwNzdlZWYyYTQ1YTczYWViOGJkZWI0YmRmM2Y5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjAxOjA5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggNjE1M2U1Y2M2ZWI2NS4uN2U2Y2M0ZGRlOWYyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTI1LDkgJiM0MzsxMjUsNDQgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXHUwMDNla2lfZmlscDtcbiBcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuJiM0MztcdGxvZmZfdCBpc2l6ZTtcbiBcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuJiM0MztcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiBcdHNzaXplX3QgcmV0O1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbiYjNDM7XHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4mIzQzO1x0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuJiM0MztcdFx0bG9mZl90IHN0YXJ0X3BhZ2UsIGVuZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbiYjNDM7XHRcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuJiM0MztcdFx0ZW5kX29mZiA9IChlbmQgXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1x0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4mIzQzO1xuJiM0MztcdFx0aW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UobWFwcGluZywgc3RhcnRfcGFnZSwgZW5kX3BhZ2UpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiBcbiBcdC8qXG5AQCAtMTM1LDggJiM0MzsxNzAsNyBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4gXHQgKi9cbiBcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuLVx0XHRsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4tXHRcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiYjNDM7XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIFxuIFx0XHRpZiAoZW5kIFx1MDAzZSBpc2l6ZSlcbiBcdFx0XHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgaW4gSEZTJiM0MzsgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMmIzQzOyBtb3VudGVkIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDhiYjgxMGQ4YjYwNzdlZWYyYTQ1YTczYWViOGJkZWI0YmRmM2Y5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDIwOjAxOjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9pbm9kZS5jIGIvZnMvaGZzcGx1cy9pbm9kZS5jCmluZGV4IDYxNTNlNWNjNmViNjUuLjdlNmNjNGRkZTlmMjYgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9oZnNwbHVzL2lub2RlLmMKQEAgLTEyNSw5ICYjNDM7MTI1LDQ0IEBAIHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKQogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0mZ3Q7a2lfZmlscDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtJmd0O2ZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0mZ3Q7aG9zdDsKJiM0MzsJbG9mZl90IGlzaXplOwogCXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwogCXNzaXplX3QgcmV0OwogCiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suCiYjNDM7CSAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC4KJiM0MzsJICovCiYjNDM7CWlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSAmYW1wOyZhbXA7IGlvY2ItJmd0O2tpX3BvcyAmZ3Q7IGlfc2l6ZV9yZWFkKGlub2RlKSkgewomIzQzOwkJbG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjsKJiM0MzsJCWxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTsKJiM0MzsKJiM0MzsJCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZQomIzQzOwkJICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLgomIzQzOwkJICovCiYjNDM7CQlpbm9kZV9kaW9fd2FpdChpbm9kZSk7CiYjNDM7CiYjNDM7CQlyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi0mZ3Q7a2lfcG9zKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXN0YXJ0X29mZiA9IGlzaXplOwomIzQzOwkJZW5kX29mZiA9IChlbmQgJmd0OyAwKSA/IGVuZCAtIDEgOiBlbmQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzdGFydF9wYWdlID0gc3RhcnRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CQllbmRfcGFnZSA9IGVuZF9vZmYgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsKJiM0MzsJCWludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTsKJiM0MzsJfQomIzQzOwogCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spOwogCiAJLyoKQEAgLTEzNSw4ICYjNDM7MTcwLDcgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpCiAJICogYmxvY2tzIG91dHNpZGUgaV9zaXplLiBUcmltIHRoZXNlIG9mZiBhZ2Fpbi4KIAkgKi8KIAlpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyByZXQgJmx0OyAwKSkgewotCQlsb2ZmX3QgaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JCWxvZmZfdCBlbmQgPSBpb2NiLSZndDtraV9wb3MgJiM0MzsgY291bnQ7CiYjNDM7CQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAogCQlpZiAoZW5kICZndDsgaXNpemUpCiAJCQloZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjM3CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSEZTJiM0MzsgRGlyZWN0IEkvTyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyB0YXJnZXRpbmcgYGZzL2hmc3BsdXMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBgaGZzcGx1c19kaXJlY3RfSU9gLiBIbW0sIGl0JiMzOTtzIGFkZGluZyBzb21lIGxvZ2ljIHRvIGhhbmRsZSBkaXJlY3Qgd3JpdGVzIHRoYXQgZXh0ZW5kICpiZXlvbmQqIHRoZSBjdXJyZW50IGVuZC1vZi1maWxlIChFT0YpLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgdHJpY2t5LiBMb29raW5nIGF0IHRoZSBjb2RlIHNuaXBwZXQsIGl0IHNlZW1zIHRvIGJlIGFkZHJlc3NpbmcgYSBjb21tb24gcmVxdWlyZW1lbnQuCgpGaXJzdCwgYSBjaGVjazogaWYgaXQmIzM5O3MgYSAqd3JpdGUqIG9wZXJhdGlvbiBhbmQgdGhlIHdyaXRlIHBvc2l0aW9uIChgaW9jYi0mZ3Q7a2lfcG9zYCkgZ29lcyBiZXlvbmQgdGhlIGN1cnJlbnQgZmlsZSBzaXplIChgaV9zaXplX3JlYWQoaW5vZGUpYCksIHdlIGVudGVyIHRoaXMgbmV3IGJsb2NrLiBUaGUgbG9naWMgdGhlbiB1c2VzIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCB0byBleHBhbmQgdGhlIGZpbGUuIEJ1dCBiZWZvcmUgdGhhdCwgdGhlcmUgaXMgYW4gYGlub2RlX2Rpb193YWl0KGlub2RlKWAgY2FsbC4gSSB3aWxsIGhhdmUgdG8gaW52ZXN0aWdhdGUgd2hhdCBESU8gaXQgaXMgd2FpdGluZyBmb3IsIGFuZCB3aHkuIEV4cGFuZGluZyB0aGUgZmlsZSBzaXplIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlbiwgaXQgd3JpdGVzIGJhY2sgdG8gZGlzayB1c2luZyBgZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZSgpYCwgZW5zdXJpbmcgdGhlIGV4cGFuZGVkIHBvcnRpb24gaXMgYWN0dWFsbHkgd3JpdHRlbiBvdXQuIFRoZSB1c2Ugb2YgYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKClgIGlzIGNyaXRpY2FsIOKAkyBpdCYjMzk7cyBpbnZhbGlkYXRpbmcgdGhlIHBhZ2VzIHdlJiMzOTt2ZSBqdXN0IGV4dGVuZGVkLiBUaGF0JiMzOTtzIGEgZ29vZCBzYWZlZ3VhcmQ7IHByZXZlbnRpbmcgc3RhbGUgZGF0YSBmcm9tIGxpbmdlcmluZyBpbiB0aGUgcGFnZSBjYWNoZS4KCk5vdywgbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGBLY29uZmlnYCBhbmQgc3Vycm91bmRpbmcgY29kZSB1c2luZyBteSB1c3VhbCB0b29sa2l0LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3Zlcmxvb2tlZC4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCB0aGUgYmFzZXMgaGVyZSB3aXRoIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGRpcmVjdCBJL08gcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSEZTUExVUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9oZnNwbHVzL0tjb25maWc6Mjpjb25maWcgSEZTUExVU19GU1xuZnMvaGZzcGx1cy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2hmc3BsdXMvS2NvbmZpZy0xNy1cbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG5mcy9oZnNwbHVzL0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUxOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvZiBgSEZTUExVU19GU2AuIE5vIHBvaW50IGluIGd1ZXNzaW5nOyBJJiMzOTttIGdvaW5nIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIExldCYjMzk7cyBwdWxsIHVwIHRoZSBgZnMvaGZzcGx1cy9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpdmVzLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvcHRpb25zLCBvciBoYXJkd2FyZSBzdXBwb3J0IGFyZSBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBkcml2ZXIuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBkZXBlbmRlbmNpZXMgb24gdGhpbmdzIGxpa2UgYmxvY2sgZGV2aWNlIHN1cHBvcnQsIHBvdGVudGlhbGx5IHNwZWNpZmljIFNDU0kgb3IgU0FUQSBkcml2ZXJzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGNyeXB0b2dyYXBoaWMgcHJpbWl0aXZlcyBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzIHRoZSBiZWRyb2NrOyB1bmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyBIRlMmIzQzOyBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBlY29zeXN0ZW0uIE5vIHVzZSBidWlsZGluZyBvbiBzYW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBIRlNQTFVTX0ZTXG4gICAzOlx0XHR0cmlzdGF0ZSBcJiMzNDtBcHBsZSBFeHRlbmRlZCBIRlMgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuICAgNTpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA2Olx0XHRzZWxlY3QgTkxTXG4gICA3Olx0XHRzZWxlY3QgTkxTX1VURjhcbiAgIDg6XHRcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIG1vdW50IGV4dGVuZGVkIGZvcm1hdFxuICAxMTpcdFx0ICBNYWNpbnRvc2gtZm9ybWF0dGVkIGhhcmQgZHJpdmUgcGFydGl0aW9ucyB3aXRoIGZ1bGwgcmVhZC13cml0ZSBhY2Nlc3MuXG4gIDEyOlx0XG4gIDEzOlx0XHQgIFRoaXMgZmlsZSBzeXN0ZW0gaXMgb2Z0ZW4gY2FsbGVkIEhGUyYjNDM7IGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXG4gIDE0Olx0XHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcbiAgMTU6XHRcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxuICAxNjpcdFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRjb25maWcgSEZTUExVU19LVU5JVF9URVNUXG4gIDE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtLVW5pdCB0ZXN0cyBmb3IgSEZTJiM0MzsgZmlsZXN5c3RlbVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDIwOlx0XHRkZXBlbmRzIG9uIEhGU1BMVVNfRlMgXHUwMDI2XHUwMDI2IEtVTklUXG4gIDIxOlx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAyMjpcdFx0aGVscFxuICAyMzpcdFx0ICBUaGlzIGJ1aWxkcyBLVW5pdCB0ZXN0cyBmb3IgdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0uXG4gIDI0Olx0XG4gIDI1Olx0XHQgIEtVbml0IHRlc3RzIHJ1biBkdXJpbmcgYm9vdCBhbmQgb3V0cHV0IHRoZSByZXN1bHRzIHRvIHRoZSBkZWJ1Z1xuICAyNjpcdFx0ICBsb2cgaW4gVEFQIGZvcm1hdCAoaHR0cHM6Ly90ZXN0YW55dGhpbmcub3JnLykuIE9ubHkgdXNlZnVsIGZvclxuICAyNzpcdFx0ICBrZXJuZWwgZGV2cyBydW5uaW5nIEtVbml0IHRlc3QgaGFybmVzcyBhbmQgYXJlIG5vdCBmb3IgaW5jbHVzaW9uXG4gIDI4Olx0XHQgIGludG8gYSBwcm9kdWN0aW9uIGJ1aWxkLlxuICAyOTpcdFxuICAzMDpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsIHBsZWFzZVxuICAzMTpcdFx0ICByZWZlciB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bWVudGF0aW9uL2Rldi10b29scy9rdW5pdC8uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBGaWxlIFN5c3RlbSBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgbW9kaWZpY2F0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9oZnNwbHVzL2lub2RlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW5vZGUtcmVsYXRlZCBsb2dpYyBmb3IgSEZTJiM0MzssIHNvIGl0JiMzOTtzIGEgbG9naWNhbCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGlub2RlIHN0cnVjdHVyZXMgYW5kIG9wZXJhdGlvbnMuIEkgd2lsbCBjb25jZW50cmF0ZSBvbiB0aGUgY2hhbmdlZCBwb3J0aW9ucyBhbmQgbG9vayBmb3Igd2hhdCBzeW1ib2xzIHdlcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBpbiB0aGUgcmVsZXZhbnQgYXJlYXMuIEdldHRpbmcgYSBnb29kIGdyYXNwIG9uIHRoZSBjaGFuZ2VkIHN5bWJvbHMgaXMga2V5IHRvIGNvbXByZWhlbmRpbmcgdGhlIG92ZXJhbGwgaW1wYWN0IG9mIHRoZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMTA6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDExMTpcdFx0XHRcdGlmIChhdG9taWNfcmVhZChcdTAwMjZub2RlLVx1MDAzZXJlZmNudCkpIHtcbiAxMTI6XHRcdFx0XHRcdHJlcyA9IGZhbHNlO1xuIDExMzpcdFx0XHRcdFx0YnJlYWs7XG4gMTE0Olx0XHRcdFx0fVxuIDExNTpcdFx0XHRcdGhmc19ibm9kZV91bmhhc2gobm9kZSk7XG4gMTE2Olx0XHRcdFx0aGZzX2Jub2RlX2ZyZWUobm9kZSk7XG4gMTE3Olx0XHRcdH0gd2hpbGUgKC0taSBcdTAwMjZcdTAwMjYgbmlkeCBcdTAwM2MgdHJlZS1cdTAwM2Vub2RlX2NvdW50KTtcbiAxMTg6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuIDExOTpcdFx0fVxuIDEyMDpcdFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gMTIxOlx0fVxuIDEyMjpcdFxuIDEyMzpcdHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIDEyNDpcdHtcbiAxMjU6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIDEyNjpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiAxMjc6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gMTI4Olx0XHRsb2ZmX3QgaXNpemU7XG4gMTI5Olx0XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiAxMzA6XHRcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiAxMzE6XHRcdHNzaXplX3QgcmV0O1xuIDEzMjpcdFxuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXG4gMTM1Olx0XHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4gMTM2Olx0XHQgKi9cbiAxMzc6XHRcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuIDEzODpcdFx0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuIDEzOTpcdFx0XHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHQvKlxuIDE0NDpcdFx0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbiAxNDU6XHRcdFx0ICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIDE0ODpcdFxuIDE0OTpcdFx0XHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuIDE1MDpcdFx0XHRpZiAocmV0KVxuIDE1MTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTUyOlx0XG4gMTUzOlx0XHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuIDE1NDpcdFx0XHRlbmRfb2ZmID0gKGVuZCBcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4gMTU3Olx0XHRcdGlmIChyZXQpXG4gMTU4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNTk6XHRcbiAxNjA6XHRcdFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiAxNjE6XHRcdFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDE2MjpcdFxuIDE2MzpcdFx0XHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XG4gMTY0Olx0XHR9XG4gMTY1Olx0XG4gMTY2Olx0XHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiAxNjc6XHRcbiAxNjg6XHRcdC8qXG4gMTY5Olx0XHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcbiAxNzA6XHRcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4gMTcxOlx0XHQgKi9cbiAxNzI6XHRcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuIDE3MzpcdFx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiAxNzQ6XHRcbiAxNzU6XHRcdFx0aWYgKGVuZCBcdTAwM2UgaXNpemUpXG4gMTc2Olx0XHRcdFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcbiAxNzc6XHRcdH1cbiAxNzg6XHRcbiAxNzk6XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0fVxuIDE4MTpcdFxuIDE4MjpcdHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDE4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIDE4NDpcdHtcbiAxODU6XHRcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuIDE4NjpcdH1cbiAxODc6XHRcbiAxODg6XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiAxODk6XHRcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjU5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIEhGUyYjNDM7IERpcmVjdCBJL08gVXNhZ2UqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGUgYGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc2Agc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGBoZnNwbHVzX2RpcmVjdF9JT2AgY29tZXMgaW50byBwbGF5LiBJJiMzOTttIGZvY3VzaW5nIG9uIGl0cyBpbnRlcmFjdGlvbnMsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJlY3QgSS9PIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUgSEZTJiM0MzsgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbi4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gdG8gZXhhbWluZSBmb3IgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMsIGJ5cGFzc2luZyB0aGUgcGFnZSBjYWNoZSwgYW5kIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgY29tcGxleGl0aWVzIGFyb3VuZCBkYXRhIGNvbnNpc3RlbmN5LiBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgbGFyZ2VyIGZpbGUgc3lzdGVtIGNvbnRleHQgdG8gc2VlIGhvdyBkYXRhIGlzIHJlYWQvd3JpdHRlbiB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRpcmVjdGx5LiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgYWxsIHRoZSByZWxldmFudCBvcGVyYXRpb25zLiBJJiMzOTtsbCBmb2N1cyBvbiBob3cgaXQgaXMgaW1wbGVtZW50ZWQgYmVjYXVzZSBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aGUgZGlyZWN0IEkvTyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jPTYyPXN0YXRpYyBib29sIGhmc3BsdXNfcmVsZWFzZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBtYXNrKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0xMjItXG5mcy9oZnNwbHVzL2lub2RlLmM6MTIzOnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTEyNC17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTIwMD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMjA2LVx0LmJtYXBcdFx0PSBoZnNwbHVzX2JtYXAsXG5mcy9oZnNwbHVzL2lub2RlLmM6MjA3Olx0LmRpcmVjdF9JT1x0PSBoZnNwbHVzX2RpcmVjdF9JTyxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMDgtXHQud3JpdGVwYWdlc1x0PSBoZnNwbHVzX3dyaXRlcGFnZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzkKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEhGUyYjNDM7IERpcmVjdCBJL08gSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gYGhmc3BsdXNfZGlyZWN0X0lPYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCB3aXRoaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AuIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhhdCBmaWxlLCBidXQgaXQmIzM5O3MgYWxzbyBhc3NpZ25lZCB0byBgaGZzcGx1c19hb3BzLmRpcmVjdF9JT2AuIEhtbSwgdGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhbiBleHBvcnRlZCwgb3IgYXQgbGVhc3QsIG5vbi1zdGF0aWMgZnVuY3Rpb24gdGhhdCBwbGF5cyBhIHJvbGUgaW4gdGhpcyBhcmVhLiBJIG5lZWQgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKTGV0JiMzOTtzIGNsYXJpZnkgd2hhdCYjMzk7cyBhdmFpbGFibGUgdG8gbWU6IGBoZnNwbHVzX2RpcmVjdF9JT2AgaXMgZGVmaW5pdGVseSBzdGF0aWMuIFNvLCBJIG5lZWQgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlIHNldHRpbmcgdXAgdGhlIGBoZnNwbHVzX2FvcHNgIHN0cnVjdCBvciBmaWxlIG9wZXJhdGlvbnMgb24gaW5vZGVzIGluIHRoZSBIRlMmIzQzOyBmaWxlc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJhY2sgdG8gYGZzL2hmc3BsdXMvaW5vZGUuY2AgYW5kIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc3BsdXNfYW9wcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9idHJlZS5jPTEzMz1zdHJ1Y3QgaGZzX2J0cmVlICpoZnNfYnRyZWVfb3BlbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgaWQpXG4tLVxuZnMvaGZzcGx1cy9idHJlZS5jLTI1MC0gZnJlZV9pbm9kZTpcbmZzL2hmc3BsdXMvYnRyZWUuYzoyNTE6XHR0cmVlLVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbmZzL2hmc3BsdXMvYnRyZWUuYy0yNTItXHRpcHV0KHRyZWUtXHUwMDNlaW5vZGUpO1xuLS1cbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oPTQzOD12b2lkIGhmc3BsdXNfZmlsZV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi0tXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaC00NDAtLyogaW5vZGUuYyAqL1xuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg6NDQxOmV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcztcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQ0Mi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTE4OD1jb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMTk5LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjIwMDpjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYW9wcyA9IHtcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMDEtXHQuZGlydHlfZm9saW9cdD0gYmxvY2tfZGlydHlfZm9saW8sXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTQ0Nj1zdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00ODctXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDg4Olx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL2lub2RlLmMtNDg5LVx0XHRoaXAtXHUwMDNlY2x1bXBfYmxvY2tzID0gc2JpLVx1MDAzZWRhdGFfY2x1bXBfYmxvY2tzO1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00OTMtXHRcdGlub2RlX25vaGlnaG1lbShpbm9kZSk7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDk0Olx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL2lub2RlLmMtNDk1LVx0XHRoaXAtXHUwMDNlY2x1bXBfYmxvY2tzID0gMTtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmM9NTY2PWludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjI1LVx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XG5mcy9oZnNwbHVzL2lub2RlLmM6NjI2Olx0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmhmc3BsdXNfYW9wcztcbmZzL2hmc3BsdXMvaW5vZGUuYy02MjctXHRcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cdTAwM2VpX21vZGUpKSB7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTYyOS1cdFx0XHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjYzMDpcdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL2lub2RlLmMtNjMxLVx0XHR9IGVsc2Uge1xuLS1cbmZzL2hmc3BsdXMvc3VwZXIuYz0yOD1zdGF0aWMgaW50IGhmc3BsdXNfc3lzdGVtX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9oZnNwbHVzL3N1cGVyLmMtNDItXHRcdGhmc3BsdXNfaW5vZGVfcmVhZF9mb3JrKGlub2RlLCBcdTAwMjZ2aGRyLVx1MDAzZWFsbG9jX2ZpbGUpO1xuZnMvaGZzcGx1cy9zdXBlci5jOjQzOlx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG5mcy9oZnNwbHVzL3N1cGVyLmMtNDQtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDI3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgSEZTJiM0MzsgUmVndWxhciBGaWxlIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGZvY3VzaW5nIG9uIEhGUyYjNDM7IGFuZCBzcGVjaWZpY2FsbHkgd2FudCB0byBtYXAgb3V0IHRoZSBjb21tb24gZmlsZSBvcGVyYXRpb25zIGVtcGxveWVkIHdoZW4gZGVhbGluZyB3aXRoIHJlZ3VsYXIgZmlsZXMuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gdGhpbmtpbmcgYmV5b25kIHRoZSBiYXNpY3M7IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZWZmaWNpZW50KiBhbmQgKmlkaW9zeW5jcmF0aWMqIHdheXMgSEZTJiM0MzsgaGFuZGxlcyB0aGVzZSBmaWxlcyB1bmRlciB0aGUgaG9vZC4gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBhIGdlbmVyYWwgbGlzdDsgSSYjMzk7bSB0cnlpbmcgdG8gbWVudGFsbHkgcmVjb25zdHJ1Y3QgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhdCBwbGF5LgoKU28sIEkmIzM5O20gY29uc2lkZXJpbmc6IHdoYXQgb3BlcmF0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGhlYXZpbHkgb3B0aW1pemVkIGR1ZSB0byBmcmVxdWVudCB1c2U/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIEItdHJlZSBzdHJ1Y3R1cmUgb24gdGhlc2Ugb3BlcmF0aW9ucz8gSG93IGRvZXMgdGhlIGV4dGVudC1iYXNlZCBhbGxvY2F0aW9uIHdvcmsgaW4gcHJhY3RpY2U/IFNwZWNpZmljYWxseSwgSSYjMzk7bSB3b25kZXJpbmc6CgoqICAgKipGaWxlIENyZWF0aW9uOioqIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiBhbGxvY2F0aW5nIGJsb2NrcyBpbiB0aGUgY2F0YWxvZyBCLXRyZWUsIHRoZSBhbGxvY2F0aW9uIGZpbGUsIGFuZCBhbnkgbWV0YWRhdGEgYXR0cmlidXRlcy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9mIHRoZSByb2xlIG9mIHRoZSBhbGxvY2F0aW9uIGJpdG1hcC4KKiAgICoqRmlsZSBPcGVuaW5nOioqIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFjY2Vzc2VkIGR1cmluZyBhbiBgb3BlbigpYCBjYWxsPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjYXRhbG9nIHRyZWUgbG9va3VwLCB2b2x1bWUgaGVhZGVyIGFjY2Vzc2VzIChpZiBhbnkpLCBhbmQgcG9zc2libGUgY2FjaGluZyBzdHJhdGVnaWVzIGF0IHBsYXkuCiogICAqKkZpbGUgUmVhZGluZy9Xcml0aW5nOioqIEhvdyBkb2VzIEhGUyYjNDM7IGhhbmRsZSBleHRlbnQtYmFzZWQgYWxsb2NhdGlvbiBkdXJpbmcgc2VxdWVudGlhbCBJL08gdmVyc3VzIHJhbmRvbSBhY2Nlc3M/IEkgbmVlZCB0byB0aGluayB0aHJvdWdoIHRoZSBibG9jayBtYXBwaW5nIHByb2Nlc3MgYW5kIHRoZSBwb3RlbnRpYWwgZm9yIGZyYWdtZW50YXRpb24uIEhvdyBkb2VzIGpvdXJuYWxpbmcgZmFjdG9yIGluIGhlcmU/IFdoYXQmIzM5O3MgdGhlIGltcGFjdCBvZiB0aGUgYmxvY2sgc2l6ZSBvbiBwZXJmb3JtYW5jZT8gQXJlIHRoZXJlIGFueSBzcGVjaWFsIGNvbnNpZGVyYXRpb25zIGZvciBsYXJnZSBmaWxlcyBvciBzcGFyc2UgZmlsZXM/CiogICAqKkZpbGUgVHJ1bmNhdGlvbjoqKiBIb3cgaXMgZmlsZSB0cnVuY2F0aW9uIGhhbmRsZWQ/IERvZXMgaXQgaW52b2x2ZSBjbGVhcmluZyBibG9ja3MgYW5kIHVwZGF0aW5nIHRoZSBhbGxvY2F0aW9uIGJpdG1hcD8gV2hhdCYjMzk7cyB0aGUgb3ZlcmhlYWQgaW52b2x2ZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBmb3IgZmlsZSBzeXN0ZW0gY29uc2lzdGVuY3k/CiogICAqKk1ldGFkYXRhIFVwZGF0ZXM6KiogVGhpcyBpcyBpbXBvcnRhbnQg4oCTIHNwZWNpZmljYWxseSwgdGhlIGVmZmljaWVudCB3YXkgdGhhdCBhdHRyaWJ1dGVzIGxpa2UgbW9kaWZpY2F0aW9uIHRpbWUsIGZpbGUgc2l6ZSwgcGVybWlzc2lvbnMsIGFuZCBleHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBtYW5hZ2VkLiBBcmUgdGhlc2UgYXR0cmlidXRlcyBkaXJlY3RseSBzdG9yZWQgaW4gdGhlIGNhdGFsb2cgQi10cmVlLCBvciBhcmUgdGhlcmUgc2VwYXJhdGUgYXR0cmlidXRlIEItdHJlZXM/IEkmIzM5O20gbG9va2luZyBmb3IgZGV0YWlscy4KKiAgICoqRmlsZSBEZWxldGlvbjoqKiBIb3cgYXJlIGZpbGUgZXh0ZW50cyBkZWFsbG9jYXRlZD8gSXMgdGhlIGNhdGFsb2cgZW50cnkgc2ltcGx5IHJlbW92ZWQgYW5kIGJsb2NrcyBtYXJrZWQgYXMgZnJlZSBpbiB0aGUgYWxsb2NhdGlvbiBmaWxlPyBBcmUgdGhlcmUgYW55IGRlZmVycmVkIG9wZXJhdGlvbnMgb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG1lY2hhbmlzbXM/IFdoYXQgYWJvdXQgaGFyZCBsaW5rcz8KKiAgICoqUmUtZW51bWVyYXRpb246KiogSG93IGFyZSBmaWxlIGFuZCBkaXJlY3RvcnkgZW51bWVyYXRpb25zIGltcGxlbWVudGVkPyBJIGFzc3VtZSB0aGlzIGlzIGEgQi10cmVlIHdhbGssIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGV0YWlscy4KKiAgICoqQ29tcHJlc3Npb246KiogSG93IGlzIGNvbXByZXNzaW9uIGhhbmRsZWQ/IEkgbmVlZCB0byBrbm93IGhvdyBjb21wcmVzc2lvbiBpcyBtYW5hZ2VkIGFuZCB1bm1hbmFnZWQgYnkgdGhlIGZpbGUgc3lzdGVtLgoKSSYjMzk7bSBtZW50YWxseSBzdGVwcGluZyB0aHJvdWdoIGVhY2ggb2YgdGhlc2Ugc2NlbmFyaW9zLCBhbmQgSSYjMzk7bGwgcHJvYmFibHkgcmVmZXIgdG8gc29tZSBIRlMmIzQzOyBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGlmIEkmIzM5O20gZ29pbmcgdG8gcHJvdmlkZSBhY2N1cmF0ZSBhbnN3ZXJzLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgdGhlIGNydWNpYWwgY29tcG9uZW50cyBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zIGluIG1hbmFnaW5nIHJlZ3VsYXIgZmlsZXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBleGVyY2lzZSBpbiBtZW1vcnkgcmVjYWxsIGFuZCBjb25jZXB0dWFsIG9yZ2FuaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aGZzcGx1c19maWxlX29wZXJhdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9oZnNwbHVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaW5vZGUuYz00MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00MzItXG5mcy9oZnNwbHVzL2lub2RlLmM6NDMzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xuZnMvaGZzcGx1cy9pbm9kZS5jLTQzNC1cdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz00NDY9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNDg2LVx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2aGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7XG5mcy9oZnNwbHVzL2lub2RlLmM6NDg3Olx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmhmc3BsdXNfZmlsZV9vcGVyYXRpb25zO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTQ4OC1cdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzID0gXHUwMDI2aGZzcGx1c19hb3BzO1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz01NjY9aW50IGhmc3BsdXNfY2F0X3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19maW5kX2RhdGEgKmZkKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy02MjQtXHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zO1xuZnMvaGZzcGx1cy9pbm9kZS5jOjYyNTpcdFx0XHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmhmc3BsdXNfZmlsZV9vcGVyYXRpb25zO1xuZnMvaGZzcGx1cy9pbm9kZS5jLTYyNi1cdFx0XHRpbm9kZS1cdTAwM2VpX21hcHBpbmctXHUwMDNlYV9vcHMgPSBcdTAwMjZoZnNwbHVzX2FvcHM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIRlMmIzQzOyBGaWxlIE9wZXJhdGlvbnMqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgaGZzcGx1c19maWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdHMgYXQgYSBsb3cgbGV2ZWwuIFdoYXQgZG9lcyBBcHBsZSYjMzk7cyBIRlMmIzQzOyBpbXBsZW1lbnRhdGlvbiByZWFsbHkgZG8gd2hlbiBoYW5kbGluZyBmaWxlIG9wZXJhdGlvbnM/IEkgd2FudCB0byBzZWUgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgcmVhZCwgd3JpdGUsIHRydW5jYXRlLCBhbmQgYWxsIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiBob3cgdGhleSYjMzk7dmUgYWRkcmVzc2VkIHNvbWUgb2YgdGhlIG1vcmUgc3VidGxlIGNvbXBsZXhpdGllcy4gQXJlIHRoZXJlIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucz8gRWRnZSBjYXNlcyBoYW5kbGVkIGVsZWdhbnRseT8gQW5kIG9mIGNvdXJzZSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpZGlvc3luY3Jhc2llcy4gSXQmIzM5O3MgSEZTJiM0MzssIGFmdGVyIGFsbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBzdHJ1Y3R1cmUgaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdC5maWxlYXR0cl9zZXRcdD0gaGZzcGx1c19maWxlYXR0cl9zZXQsXG4gNDMxOlx0fTtcbiA0MzI6XHRcbiA0MzM6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcbiA0MzQ6XHRcdC5sbHNlZWtcdFx0PSBnZW5lcmljX2ZpbGVfbGxzZWVrLFxuIDQzNTpcdFx0LnJlYWRfaXRlclx0PSBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyLFxuIDQzNjpcdFx0LndyaXRlX2l0ZXJcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXG4gNDM3Olx0XHQubW1hcF9wcmVwYXJlXHQ9IGdlbmVyaWNfZmlsZV9tbWFwX3ByZXBhcmUsXG4gNDM4Olx0XHQuc3BsaWNlX3JlYWRcdD0gZmlsZW1hcF9zcGxpY2VfcmVhZCxcbiA0Mzk6XHRcdC5zcGxpY2Vfd3JpdGVcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcbiA0NDA6XHRcdC5mc3luY1x0XHQ9IGhmc3BsdXNfZmlsZV9mc3luYyxcbiA0NDE6XHRcdC5vcGVuXHRcdD0gaGZzcGx1c19maWxlX29wZW4sXG4gNDQyOlx0XHQucmVsZWFzZVx0PSBoZnNwbHVzX2ZpbGVfcmVsZWFzZSxcbiA0NDM6XHRcdC51bmxvY2tlZF9pb2N0bCA9IGhmc3BsdXNfaW9jdGwsXG4gNDQ0Olx0fTtcbiA0NDU6XHRcbiA0NDY6XHRzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxuIDQ0NzpcdFx0XHRcdFx0dW1vZGVfdCBtb2RlKVxuIDQ0ODpcdHtcbiA0NDk6XHRcdHN0cnVjdCBoZnNwbHVzX3NiX2luZm8gKnNiaSA9IEhGU1BMVVNfU0Ioc2IpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTEyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYSBQb3RlbnRpYWwgSEZTJiM0MzsgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IGRpcmVjdCBJL08gd3JpdGVzIHdvcmsgaW4gdGhlIEhGUyYjNDM7IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSB3aXRoIGBPX0RJUkVDVGAgZW5hYmxlZC4gVGhlIGNhbGwgY2hhaW4gaXMgcHJldHR5IHN0YW5kYXJkOiBgZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXJgIGRvd24gdG8gYGhmc3BsdXNfZGlyZWN0X0lPYC4gTm93LCBoZXJlJiMzOTtzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IGlmIGEgd3JpdGUgaGFwcGVucyBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgZmlsZSAoRU9GKSwgYW5kIGl0JiMzOTtzIGEgZGlyZWN0IHdyaXRlLCB3ZSBoaXQgYSBzZXF1ZW5jZSB0aGF0IGludm9sdmVzIGBpbm9kZV9kaW9fd2FpdGAsIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAsIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlYCwgYW5kIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuCgpUaGF0IHNlcXVlbmNlIHNjcmVhbXMgcG90ZW50aWFsIHRyb3VibGUuIEl0JiMzOTtzIGluIHRoZSBmaWxlc3lzdGVtIGNvcmUsIHJpZ2h0IHRoZXJlIGluIGBmcy9oZnNwbHVzYCwgd2hpY2ggaXMgZGVmaW5pdGVseSBhY2Nlc3NpYmxlIHRocm91Z2ggUUVNVSBhbmQgZWFzaWx5IHRlc3RhYmxlIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyLiBZb3UganVzdCBuZWVkIHRvIG1vdW50IGFuIEhGUyYjNDM7IGltYWdlIG9yIGxvb3BiYWNrIGRldmljZSwgb3BlbiBhIGZpbGUgd2l0aCBgT19ESVJFQ1RgLCBhbmQgd3JpdGUgcGFzdCBFT0YuIEJhbmchIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhCgpOb3csIGJlZm9yZSBJIGdldCB0b28gZXhjaXRlZCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IHdlaXJkIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSYjMzk7bGwgY2hlY2sgYGZzL2hmc3BsdXMvS2NvbmZpZ2AuIFJpZ2h0LCBgSEZTUExVU19GU2AgZGVwZW5kcyBvbiBgQkxPQ0tgLCBzbyB0aGF0JiMzOTtzIHRoZSBvbmx5IGltbWVkaWF0ZSBkZXBlbmRlbmN5LiBMZXQgbWUgc2NhbiBgZnMvS2NvbmZpZ2AgYW5kIGBmcy9NYWtlZmlsZWAgbW9yZSBnZW5lcmFsbHkgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYnVpbGQgZmxhZ3Mgb3IgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBgZnMvaGZzcGx1c2AgaXMgY29tcGlsZWQuIEdvdHRhIGNvdmVyIGFsbCBiYXNlcyBiZWZvcmUgcnVubmluZyB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hmc3BsdXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSVNPOTY2MF9GUylcdCYjNDM7PSBpc29mcy9cbmZzL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IRlNQTFVTX0ZTKVx0JiM0Mzs9IGhmc3BsdXMvICMgQmVmb3JlIGhmcyB0byBmaW5kIHdyYXBwZWQgSEZTJiM0MztcbmZzL01ha2VmaWxlLTgyLW9iai0kKENPTkZJR19IRlNfRlMpXHRcdCYjNDM7PSBoZnMvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4OTgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGZzL2hmc3BsdXMvTWFrZWZpbGVgIGZpbGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMgb3IgcmVsZXZhbnQgTWFrZWZpbGVzIGhpZGluZyBlbHNld2hlcmUuIFdlIGNhbiYjMzk7dCBhZmZvcmQgdG8gbWlzcyBhbnl0aGluZyB3aGVuIGRlYWxpbmcgd2l0aCBhIGZpbGVzeXN0ZW0gYXMgY29tcGxleCBhcyBIRlMgUGx1cy4gSSYjMzk7dmUgZ290IHRvIGNvdmVyIGFsbCBteSBiYXNlcy4gU28sIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgcGFzcyDigJMgYXJlIHRoZXJlIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIGZsb2F0aW5nIGFyb3VuZCBpbiBvdGhlciBkaXJlY3Rvcmllcz8gTGV0JiMzOTtzIGNoZWNrLiBUaW1lIHRvIGRvIGEgcXVpY2sgc2FuaXR5IHN3ZWVwIHRvIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMjIE1ha2VmaWxlIGZvciB0aGUgbGludXggaGZzcGx1cyBmaWxlc3lzdGVtIHJvdXRpbmVzLlxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfSEZTUExVU19GUykgJiM0Mzs9IGhmc3BsdXMub1xuICAgNzpcdFxuICAgODpcdGhmc3BsdXMtb2JqcyA6PSBzdXBlci5vIG9wdGlvbnMubyBpbm9kZS5vIGlvY3RsLm8gZXh0ZW50cy5vIGNhdGFsb2cubyBkaXIubyBidHJlZS5vIFxcXG4gICA5Olx0XHRcdGJub2RlLm8gYnJlYy5vIGJmaW5kLm8gdGFibGVzLm8gdW5pY29kZS5vIHdyYXBwZXIubyBiaXRtYXAubyBwYXJ0X3RibC5vIFxcXG4gIDEwOlx0XHRcdGF0dHJpYnV0ZXMubyB4YXR0ci5vIHhhdHRyX3VzZXIubyB4YXR0cl9zZWN1cml0eS5vIHhhdHRyX3RydXN0ZWQub1xuICAxMTpcdFxuICAxMjpcdCMgS1VuaXQgdGVzdHNcbiAgMTM6XHRvYmotJChDT05GSUdfSEZTUExVU19LVU5JVF9URVNUKSAmIzQzOz0gdW5pY29kZV90ZXN0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMzgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSEZTJiM0MzsgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIEhGUyYjNDM7IGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQtdGltZSBvcHRpb25zLiBJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgYEhGU1BMVVNfRlNgIGNvbmZpZyBpbiBgZnMvaGZzcGx1cy9LY29uZmlnYC4gUmlnaHQsIGl0IGBkZXBlbmRzIG9uIEJMT0NLYCwgc2VsZWN0cyBgQlVGRkVSX0hFQURgLCBgTkxTYCwgYE5MU19VVEY4YCwgYW5kIGBMRUdBQ1lfRElSRUNUX0lPYC4gU28sIGBIRlNQTFVTX0ZTYCBpcyB0aGUgY29yZSwgYW5kIGBCTE9DS2AgaXMgYSBwcmVyZXF1aXNpdGUsIGFzIGV4cGVjdGVkLgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGltcG9ydGFudCBzeW1ib2xzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBtb2RpZmljYXRpb25zLCBwYXJ0aWN1bGFybHkgdG8gdGhlIGRpcmVjdCBJL08gcGF0aC4gSSBzZWUgdGhhdCBgaGZzcGx1c19kaXJlY3RfSU9gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNoYW5nZWQuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgaXQmIzM5O3MgdXNlZCBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBoZnNwbHVzX2FvcHNgLgoKSSBzaG91bGQgcHJvYmFibHkgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgYGZzL2hmc3BsdXMvaW5vZGUuY2AgYW5kIHJlbGF0ZWQgZmlsZXMuIEFoLCBiZXNpZGVzIGBoZnNwbHVzX2RpcmVjdF9JT2AsIEkgYWxzbyBoYXZlIGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19uZXdfaW5vZGVgLCBhbmQgYGhmc3BsdXNfY2F0X3JlYWRfaW5vZGVgLiBJIHNob3VsZCBwcm9iYWJseSBsaXN0IG91dCB0aGUgY29udGVudHMgb2YgYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gYmUgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXS4qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaGZzcGx1cy9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2hmc3BsdXMvaW5vZGUuYy0yNS1cbmZzL2hmc3BsdXMvaW5vZGUuYzoyNjpzdGF0aWMgaW50IGhmc3BsdXNfcmVhZF9mb2xpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbmZzL2hmc3BsdXMvaW5vZGUuYy0yNy17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTMwLVxuZnMvaGZzcGx1cy9pbm9kZS5jOjMxOnN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXG5mcy9oZnNwbHVzL2lub2RlLmMtMzIte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy00MC1cbmZzL2hmc3BsdXMvaW5vZGUuYzo0MTppbnQgaGZzcGx1c193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9oZnNwbHVzL2lub2RlLmMtNDItXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGxvZmZfdCBwb3MsXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTU2LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjU3OnN0YXRpYyBzZWN0b3JfdCBoZnNwbHVzX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTU4LXtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjEtXG5mcy9oZnNwbHVzL2lub2RlLmM6NjI6c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXG5mcy9oZnNwbHVzL2lub2RlLmMtNjMte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0xMjItXG5mcy9oZnNwbHVzL2lub2RlLmM6MTIzOnN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTEyNC17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTE4MS1cbmZzL2hmc3BsdXMvaW5vZGUuYzoxODI6c3RhdGljIGludCBoZnNwbHVzX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG5mcy9oZnNwbHVzL2lub2RlLmMtMTgzLVx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz0yMTI9Y29uc3Qgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zIGhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTIxNi1cbmZzL2hmc3BsdXMvaW5vZGUuYzoyMTc6c3RhdGljIGludCBoZnNwbHVzX2dldF9wZXJtcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIxOC1cdFx0XHQgICAgIHN0cnVjdCBoZnNwbHVzX3Blcm0gKnBlcm1zLCBpbnQgZGlyKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0yNzAtXG5mcy9oZnNwbHVzL2lub2RlLmM6MjcxOnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9oZnNwbHVzL2lub2RlLmMtMjcyLXtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMjgwLVxuZnMvaGZzcGx1cy9pbm9kZS5jOjI4MTpzdGF0aWMgaW50IGhmc3BsdXNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTI4Mi17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTI5OS1cbmZzL2hmc3BsdXMvaW5vZGUuYzozMDA6c3RhdGljIGludCBoZnNwbHVzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9oZnNwbHVzL2lub2RlLmMtMzAxLVx0XHRcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy0zMjktXG5mcy9oZnNwbHVzL2lub2RlLmM6MzMwOmludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMzMS1cdFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMzU1LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjM1NjppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXG5mcy9oZnNwbHVzL2lub2RlLmMtMzU3LVx0XHQgICAgICAgaW50IGRhdGFzeW5jKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz00MzM9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGZzcGx1c19maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ0NS1cbmZzL2hmc3BsdXMvaW5vZGUuYzo0NDY6c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2hmc3BsdXMvaW5vZGUuYy00NDctXHRcdFx0XHR1bW9kZV90IG1vZGUpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTUwNC1cbmZzL2hmc3BsdXMvaW5vZGUuYzo1MDU6dm9pZCBoZnNwbHVzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaGZzcGx1cy9pbm9kZS5jLTUwNi17XG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTUyNi1cbmZzL2hmc3BsdXMvaW5vZGUuYzo1Mjc6dm9pZCBoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcbmZzL2hmc3BsdXMvaW5vZGUuYy01Mjgte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy01NTYtXG5mcy9oZnNwbHVzL2lub2RlLmM6NTU3OnZvaWQgaGZzcGx1c19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9oZnNwbHVzL2lub2RlLmMtNTU4LVx0XHRzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNTY1LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjU2NjppbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXG5mcy9oZnNwbHVzL2lub2RlLmMtNTY3LXtcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtNjQ4LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjY0OTppbnQgaGZzcGx1c19jYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2hmc3BsdXMvaW5vZGUuYy02NTAte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy03NDEtXG5mcy9oZnNwbHVzL2lub2RlLmM6NzQyOmludCBoZnNwbHVzX2ZpbGVhdHRyX2dldChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSlcbmZzL2hmc3BsdXMvaW5vZGUuYy03NDMte1xuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYy03NTktXG5mcy9oZnNwbHVzL2lub2RlLmM6NzYwOmludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2hmc3BsdXMvaW5vZGUuYy03NjEtXHRcdFx0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyOQoJCQkJCQkJb3V0cHV0OiAxMTMKCQkJCQkJCXRob3VnaHRzOiAxNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEhGUyYjNDM7IERpcmVjdCBJL08gRnV6emluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgZGlyZWN0IEkvTyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgSEZTJiM0MzsgZmlsZSBzeXN0ZW0uIExldCBtZSBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBjb3JlIGZ1bmN0aW9uIHRhcmdldGVkIGZvciBkaXJlY3QgSS9PIGlzIGBoZnNwbHVzX2RpcmVjdF9JT2AsIGJ1dCB0aGVyZSBhcmUgc2V2ZXJhbCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0aGF0IGFsc28gcmVxdWlyZSBjYXJlZnVsIHNjcnV0aW55IGR1cmluZyB0aGlzIGZ1enppbmcgY2FtcGFpZ246IGBoZnNwbHVzX3dyaXRlX2JlZ2luYCwgYGhmc3BsdXNfZmlsZV9mc3luY2AsIGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfcmVsZWFzZWAsIGBoZnNwbHVzX25ld19pbm9kZWAsIGBoZnNwbHVzX2NhdF9yZWFkX2lub2RlYCwgYW5kIGBoZnNwbHVzX2NhdF93cml0ZV9pbm9kZWAuIFRoZXNlIG5lZWQgdG8gYmUgaW5jbHVkZWQuCgpBbHJpZ2h0LCB0aW1lIHRvIHZlcmlmeSB0aGUgY29uZmlndXJhdGlvbi4gVGhlIGZ1enppbmcgdmVyZGljdCBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHdoaWNoIG1ha2VzIHNlbnNlLiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGNsZWFybHkgZGVmaW5lZDsgaXQgKnNob3VsZCogb25seSBjb250YWluIGBoZnNwbHVzX2RpcmVjdF9JT2AuIFRoZSBjcml0aWNhbCBgRW5hYmxlQ29uZmlnc2AgaW5jbHVkZSBgSEZTUExVU19GU2AsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdG8gZW5zdXJlIHRoaXMgYWxsIHdvcmtzLiBUaGlzIG1ha2VzIHNlbnNlLgoKRmluYWxseSwgSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB0byBleGVjdXRlIHRoZSB2ZXJkaWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SEZTUExVU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hmc3BsdXNfZGlyZWN0X0lPJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBpbiBIRlMmIzQzOyBmaWxlc3lzdGVtcyBieSBleHBhbmRpbmcgdGhlIGZpbGUsIGZsdXNoaW5nIGRpcnR5IHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgcGVyZm9ybWluZyBibG9ja2Rldl9kaXJlY3RfSU8uIFRoaXMgbW9kaWZpZXMgY29yZSBmaWxlc3lzdGVtIEkvTyBsb2dpYyBhbmQgY2FuIGJlIHJlYWNoZWQgdmlhIGRpcmVjdCBJL08gd3JpdGVzIHRvIEhGUyYjNDM7IG1vdW50ZWQgZmlsZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hGU1BMVVNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoZnNwbHVzX2RpcmVjdF9JTyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgaW4gSEZTJiM0MzsgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMmIzQzOyBtb3VudGVkIGZpbGVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSB2aWEgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLCBmbHVzaGluZyBkaXJ0eSBwYWdlY2FjaGUgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIGBibG9ja2Rldl9kaXJlY3RfSU8oKWAuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGUuZy4sIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmsgYXR0cmlidXRlcykuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBUaGUgZXhwYW5zaW9uIGxvZ2ljIHNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgaG9sZXMgY3JlYXRlZCBiZWZvcmUgRU9GIGFyZSB6ZXJvZWQgdmlhIHBhZ2VjYWNoZSBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLlxuNC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gRElPIG9mZnNldHMsIHBhZ2UgcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIChzdWNoIGFzIGBpbm9kZV9kaW9fd2FpdGApLCBvciBidWZmZXIgYm91bmRzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ4YmI4MTBkOGI2MDc3ZWVmMmE0NWE3M2FlYjhiZGViNGJkZjNmOWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDowMTowOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCA2MTUzZTVjYzZlYjY1Li43ZTZjYzRkZGU5ZjI2IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0xMjUsOSAmIzQzOzEyNSw0NCBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcikKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItJmd0O2tpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLSZndDtmX21hcHBpbmc7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctJmd0O2hvc3Q7CiYjNDM7CWxvZmZfdCBpc2l6ZTsKIAlzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTsKJiM0MzsJbG9mZl90IGVuZCA9IGlvY2ItJmd0O2tpX3BvcyAmIzQzOyBjb3VudDsKIAlzc2l6ZV90IHJldDsKIAomIzQzOwkvKgomIzQzOwkgKiBUaGUgaGZzcGx1c19nZXRfYmxvY2soKSBvbmx5IGFsbG93cyBjcmVhdGluZyB0aGUgbmV4dCBzZXF1ZW50aWFsIGJsb2NrLgomIzQzOwkgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgJmFtcDsmYW1wOyBpb2NiLSZndDtraV9wb3MgJmd0OyBpX3NpemVfcmVhZChpbm9kZSkpIHsKJiM0MzsJCWxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7CiYjNDM7CQlsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7CiYjNDM7CiYjNDM7CQlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmUKJiM0MzsJCSAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS4KJiM0MzsJCSAqLwomIzQzOwkJaW5vZGVfZGlvX3dhaXQoaW5vZGUpOwomIzQzOwomIzQzOwkJcmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItJmd0O2tpX3Bvcyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlzdGFydF9vZmYgPSBpc2l6ZTsKJiM0MzsJCWVuZF9vZmYgPSAoZW5kICZndDsgMCkgPyBlbmQgLSAxIDogZW5kOwomIzQzOwomIzQzOwkJcmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJc3RhcnRfcGFnZSA9IHN0YXJ0X29mZiAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwkJZW5kX3BhZ2UgPSBlbmRfb2ZmICZndDsmZ3Q7IFBBR0VfU0hJRlQ7CiYjNDM7CiYjNDM7CQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTsKIAogCS8qCkBAIC0xMzUsOCAmIzQzOzE3MCw3IEBAIHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKQogCSAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uCiAJICovCiAJaWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFICZhbXA7JmFtcDsgcmV0ICZsdDsgMCkpIHsKLQkJbG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCQlsb2ZmX3QgZW5kID0gaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50OwomIzQzOwkJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CiAKIAkJaWYgKGVuZCAmZ3Q7IGlzaXplKQogCQkJaGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MzQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgSEZTJiM0MzsgRGlyZWN0IEkvTyBQYXRjaCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlmZi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgaGVyZS4gTG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBmcy9oZnNwbHVzL2lub2RlLmNgLCB3aXRoIGEgc3BlY2lmaWMgZm9jdXMgb24gdGhlIGBoZnNwbHVzX2RpcmVjdF9JT2AgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24sIEkgbmVlZCB0byBrbm93IHdoeSBzb21lb25lIGlzIGNoYW5naW5nIHRoZSBkaXJlY3QgSS9PIGZvciBIRlMmIzQzOy4gTGV0IG1lIHB1bGwgdXAgdGhhdCBmaWxlIGFuZCB6ZXJvIGluIG9uIHRoZSBhcmVhIGFyb3VuZCBgaGZzcGx1c19kaXJlY3RfSU9gLiBLbm93aW5nIHRoZSBjb250ZXh0IGFyb3VuZCB0aGF0IGZ1bmN0aW9uIGlzIGNydWNpYWwgdG8gc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBiZWluZyBtb2RpZmllZCBhbmQgd2h5LiBJJiMzOTtsbCByZWFkIHRocm91Z2ggdGhhdCBhcmVhIGNhcmVmdWxseSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9oZnNwbHVzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDExNTpcdFx0XHRcdGhmc19ibm9kZV91bmhhc2gobm9kZSk7XG4gMTE2Olx0XHRcdFx0aGZzX2Jub2RlX2ZyZWUobm9kZSk7XG4gMTE3Olx0XHRcdH0gd2hpbGUgKC0taSBcdTAwMjZcdTAwMjYgbmlkeCBcdTAwM2MgdHJlZS1cdTAwM2Vub2RlX2NvdW50KTtcbiAxMTg6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2dHJlZS1cdTAwM2VoYXNoX2xvY2spO1xuIDExOTpcdFx0fVxuIDEyMDpcdFx0cmV0dXJuIHJlcyA/IHRyeV90b19mcmVlX2J1ZmZlcnMoZm9saW8pIDogZmFsc2U7XG4gMTIxOlx0fVxuIDEyMjpcdFxuIDEyMzpcdHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxuIDEyNDpcdHtcbiAxMjU6XHRcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIDEyNjpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiAxMjc6XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4gMTI4Olx0XHRsb2ZmX3QgaXNpemU7XG4gMTI5Olx0XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiAxMzA6XHRcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyAmIzQzOyBjb3VudDtcbiAxMzE6XHRcdHNzaXplX3QgcmV0O1xuIDEzMjpcdFxuIDEzMzpcdFx0LypcbiAxMzQ6XHRcdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXG4gMTM1Olx0XHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXG4gMTM2Olx0XHQgKi9cbiAxMzc6XHRcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgaW9jYi1cdTAwM2VraV9wb3MgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xuIDEzODpcdFx0XHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xuIDEzOTpcdFx0XHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XG4gMTQwOlx0XG4gMTQxOlx0XHRcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuIDE0MjpcdFxuIDE0MzpcdFx0XHQvKlxuIDE0NDpcdFx0XHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcbiAxNDU6XHRcdFx0ICogY2FsbGluZyBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpLlxuIDE0NjpcdFx0XHQgKi9cbiAxNDc6XHRcdFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xuIDE0ODpcdFxuIDE0OTpcdFx0XHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cdTAwM2VraV9wb3MpO1xuIDE1MDpcdFx0XHRpZiAocmV0KVxuIDE1MTpcdFx0XHRcdHJldHVybiByZXQ7XG4gMTUyOlx0XG4gMTUzOlx0XHRcdHN0YXJ0X29mZiA9IGlzaXplO1xuIDE1NDpcdFx0XHRlbmRfb2ZmID0gKGVuZCBcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xuIDE1NTpcdFxuIDE1NjpcdFx0XHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XG4gMTU3Olx0XHRcdGlmIChyZXQpXG4gMTU4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAxNTk6XHRcbiAxNjA6XHRcdFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiAxNjE6XHRcdFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIDE2MjpcdFxuIDE2MzpcdFx0XHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XG4gMTY0Olx0XHR9XG4gMTY1Olx0XG4gMTY2Olx0XHRyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8oaW9jYiwgaW5vZGUsIGl0ZXIsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcbiAxNjc6XHRcbiAxNjg6XHRcdC8qXG4gMTY5Olx0XHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcbiAxNzA6XHRcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXG4gMTcxOlx0XHQgKi9cbiAxNzI6XHRcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyAwKSkge1xuIDE3MzpcdFx0XHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiAxNzQ6XHRcbiAxNzU6XHRcdFx0aWYgKGVuZCBcdTAwM2UgaXNpemUpXG4gMTc2Olx0XHRcdFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcbiAxNzc6XHRcdH1cbiAxNzg6XHRcbiAxNzk6XHRcdHJldHVybiByZXQ7XG4gMTgwOlx0fVxuIDE4MTpcdFxuIDE4MjpcdHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuIDE4MzpcdFx0XHRcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxuIDE4NDpcdHtcbiAxODU6XHRcdHJldHVybiBtcGFnZV93cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYywgaGZzcGx1c19nZXRfYmxvY2spO1xuIDE4NjpcdH1cbiAxODc6XHRcbiAxODg6XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGhmc3BsdXNfYnRyZWVfYW9wcyA9IHtcbiAxODk6XHRcdC5kaXJ0eV9mb2xpb1x0PSBibG9ja19kaXJ0eV9mb2xpbyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhGUyYjNDM7IERpcmVjdCBJL08gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgaGZzcGx1c19kaXJlY3RfSU9gLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgRGlyZWN0IEkvTyB3cml0ZXMgdGhhdCBnbyBiZXlvbmQgdGhlIGN1cnJlbnQgZW5kLW9mLWZpbGUuIFByZXZpb3VzbHksIHdpdGggdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBoYWQgYSBsaW1pdGF0aW9uIG9mIG9ubHkgYWxsb2NhdGluZyBzZXF1ZW50aWFsIGJsb2Nrcywgd2hpY2ggbGVkIHRvIGZhaWx1cmVzIG9yIHByb2JsZW1zIHdoZW4gd3JpdGluZyBwYXN0IEVPRi4KClRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNsZXZlciB3b3JrYXJvdW5kLiBXaGVuIHdlIGhhdmUgYSB3cml0ZSBvcGVyYXRpb24gYW5kIHRoZSB3cml0ZSBwb3NpdGlvbiAoYGlvY2ItJmd0O2tpX3Bvc2ApIGV4dGVuZHMgcGFzdCB0aGUgZmlsZSBzaXplIChgaV9zaXplX3JlYWQoaW5vZGUpYCksIHRoZSBzeXN0ZW0gbm93IHdhaXRzIGZvciBhbnkgZXhpc3RpbmcgRElPIG9wZXJhdGlvbnMgdG8gZmluaXNoIHVzaW5nIGBpbm9kZV9kaW9fd2FpdGAuIFRoZW4sIGl0IGNhbGxzIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAgdG8gZXhwYW5kIHRoZSBmaWxlLCBlZmZlY3RpdmVseSB6ZXJvaW5nIG91dCB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgb2xkIHNpemUgYW5kIHRoZSB3cml0ZSBwb3NpdGlvbiB2aWEgdGhlIHBhZ2UgY2FjaGUuIEFmdGVyIHRoYXQgZXhwYW5zaW9uLCB0aGUgZGlydHkgcGFnZXMgYXJlIGZsdXNoZWQgdXNpbmcgYGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2VgLCBhbmQgdGhlIHBhZ2UgY2FjaGUgaXMgaW52YWxpZGF0ZWQgdXNpbmcgYGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlYC4gRmluYWxseSwgaXQgcHJvY2VlZHMgd2l0aCB0aGUgYGJsb2NrZGV2X2RpcmVjdF9JT2AgY2FsbC4KClRoaXMgZXhwYW5zaW9uIGxvZ2ljIHNlZW1zIGZhbWlsaWFyLCBhbmQgSSYjMzk7ZCBsaWtlIHRvIHNlZSBob3cgaXQmIzM5O3MgaGFuZGxlZCBpbiBvdGhlciBmaWxlc3lzdGVtcy4gTGV0IG1lIGNoZWNrIGhvdyBvdGhlciBmaWxlIHN5c3RlbXMgbGlrZSBleHQyLCBvciBldmVuIEZBVCwgYXJlIGhhbmRsaW5nIHNpbWlsYXIgc2NlbmFyaW9zLiBJJiMzOTtsbCBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlYCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hpY2ggZmlsZXN5c3RlbXMgbWlnaHQgdXNlIHRoaXMgZnVuY3Rpb24gb3Igc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHNwYXJzZS1maWxlIGV4cGFuc2lvbiBmb3IgZGlyZWN0IEkvTy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYnVmZmVyLmM9MjQ2Nz1FWFBPUlRfU1lNQk9MKGJsb2NrX3JlYWRfZnVsbF9mb2xpbyk7XG4tLVxuZnMvYnVmZmVyLmMtMjQ3Mi0gKi9cbmZzL2J1ZmZlci5jOjI0NzM6aW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKVxuZnMvYnVmZmVyLmMtMjQ3NC17XG4tLVxuZnMvYnVmZmVyLmMtMjQ5NC19XG5mcy9idWZmZXIuYzoyNDk1OkVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpO1xuZnMvYnVmZmVyLmMtMjQ5Ni1cbi0tXG5mcy9mYXQvZmlsZS5jPTIxNz1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcbi0tXG5mcy9mYXQvZmlsZS5jLTIyMi1cbmZzL2ZhdC9maWxlLmM6MjIzOlx0ZXJyID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIHNpemUpO1xuZnMvZmF0L2ZpbGUuYy0yMjQtXHRpZiAoZXJyKVxuLS1cbmZzL2hmc3BsdXMvaW5vZGUuYz0xMjM9c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jLTE0NC1cdFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXG5mcy9oZnNwbHVzL2lub2RlLmM6MTQ1Olx0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG5mcy9oZnNwbHVzL2lub2RlLmMtMTQ2LVx0XHQgKi9cbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMTQ4LVxuZnMvaGZzcGx1cy9pbm9kZS5jOjE0OTpcdFx0cmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKTtcbmZzL2hmc3BsdXMvaW5vZGUuYy0xNTAtXHRcdGlmIChyZXQpXG4tLVxuZnMvaGZzcGx1cy9pbm9kZS5jPTMwMD1zdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9oZnNwbHVzL2lub2RlLmMtMzEzLVx0XHRpZiAoYXR0ci1cdTAwM2VpYV9zaXplIFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NpemUpIHtcbmZzL2hmc3BsdXMvaW5vZGUuYzozMTQ6XHRcdFx0ZXJyb3IgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMTUtXHRcdFx0XHRcdFx0XHQgICBhdHRyLVx1MDAzZWlhX3NpemUpO1xuLS1cbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yNzA9aW50IGNvbnRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjcyLVx0XHRcdGdldF9ibG9ja190ICosIGxvZmZfdCAqKTtcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDoyNzM6aW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yNzQtdm9pZCBibG9ja19jb21taXRfd3JpdGUoc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IGZyb20sIHNpemVfdCB0byk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MDkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBmcy9idWZmZXIuY2AgYW5kIHNwZWNpZmljYWxseSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiAqd2hhdCogaXQgZG9lcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpbGVzeXN0ZW0gYnVmZmVyIGxheWVyLiBJcyB0aGlzIGhhbmRsaW5nIGJsb2NrIGFsbG9jYXRpb24sIHBhZ2UgcGlubmluZywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IEEgcXVpY2sgc2NhbiBvZiBpdHMgcHVycG9zZSB3b3VsZCBiZSBnb29kLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG5hbWUgYW5kIGltcGxlbWVudGF0aW9uIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXQmIzM5O3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzaW1wbGUgY29udGludWF0aW9uIGV4cGFuc2lvbiBmdW5jdGlvbi4gSSBhbnRpY2lwYXRlIGl0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBjb250aWd1b3VzIGFsbG9jYXRpb24gb3IgbWFwcGluZyBvZiBkYXRhIHdpdGhpbiB0aGUgYnVmZmVyIGNhY2hlLCBsaWtlbHkgaW4gYSBzY2VuYXJpbyB3aGVyZSBhIGJ1ZmZlciBuZWVkcyB0byBiZSBsYXJnZXIgdGhhbiBjdXJyZW50bHkgYWxsb2NhdGVkLiBJJiMzOTttIGFzc3VtaW5nIGl0IG1heSBiZSBhIGZhbGxiYWNrIG1ldGhvZCwgbWF5YmUgd2l0aG91dCBhbGwgdGhlIGJlbGxzIGFuZCB3aGlzdGxlcyBvZiBtb3JlIGFkdmFuY2VkIGV4cGFuc2lvbiBzdHJhdGVnaWVzLiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBob2xkcyB0cnVlLiBUaW1lIHRvIGdldCBteSBleWVzIG9uIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2J1ZmZlci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDcwOlx0ICogdHJ1bmNhdGVzLiAgVXNlcyBmaWxlc3lzdGVtIHBhZ2VjYWNoZSB3cml0ZXMgdG8gYWxsb3cgdGhlIGZpbGVzeXN0ZW0gdG9cbjI0NzE6XHQgKiBkZWFsIHdpdGggdGhlIGhvbGUuICBcbjI0NzI6XHQgKi9cbjI0NzM6XHRpbnQgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXG4yNDc0Olx0e1xuMjQ3NTpcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4yNDc2Olx0XHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphb3BzID0gbWFwcGluZy1cdTAwM2VhX29wcztcbjI0Nzc6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4yNDc4Olx0XHR2b2lkICpmc2RhdGEgPSBOVUxMO1xuMjQ3OTpcdFx0aW50IGVycjtcbjI0ODA6XHRcbjI0ODE6XHRcdGVyciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIHNpemUpO1xuMjQ4MjpcdFx0aWYgKGVycilcbjI0ODM6XHRcdFx0Z290byBvdXQ7XG4yNDg0Olx0XG4yNDg1Olx0XHRlcnIgPSBhb3BzLVx1MDAzZXdyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHNpemUsIDAsIFx1MDAyNmZvbGlvLCBcdTAwMjZmc2RhdGEpO1xuMjQ4NjpcdFx0aWYgKGVycilcbjI0ODc6XHRcdFx0Z290byBvdXQ7XG4yNDg4Olx0XG4yNDg5Olx0XHRlcnIgPSBhb3BzLVx1MDAzZXdyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCAwLCBmb2xpbywgZnNkYXRhKTtcbjI0OTA6XHRcdEJVR19PTihlcnIgXHUwMDNlIDApO1xuMjQ5MTpcdFxuMjQ5MjpcdG91dDpcbjI0OTM6XHRcdHJldHVybiBlcnI7XG4yNDk0Olx0fVxuMjQ5NTpcdEVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpO1xuMjQ5NjpcdFxuMjQ5NzpcdHN0YXRpYyBpbnQgY29udF9leHBhbmRfemVybyhjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG4yNDk4Olx0XHRcdFx0ICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuMjQ5OTpcdFx0XHRcdCAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgKmJ5dGVzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTM3CgkJCQkJCQlvdXRwdXQ6IDI4MAoJCQkJCQkJdGhvdWdodHM6IDk2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgU2Vzc2lvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTt2ZSBhbmFseXplZCB0aGUgY2hhbmdlcyB0byBgaGZzcGx1c19kaXJlY3RfSU9gIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgLCBmb2N1c2luZyBvbiBLTVNBTiBjcml0ZXJpYS4KCkZpcnN0LCBJIGV4YW1pbmVkIHdoZXRoZXIgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBleHBvc2VkIHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcyDigJMgbm8gYGNvcHlfdG9fdXNlcmAsIGBwdXRfdXNlcmAsIG5ldGxpbmsgc2tiIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycyBhcmUgdG91Y2hlZCBoZXJlLiBObyByaXNrIHRoZXJlLgoKTmV4dCwgSSBsb29rZWQgZm9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBUaGUga2V5IGxvY2FsIHZhcmlhYmxlcyBsaWtlIGBpc2l6ZWAsIGBzdGFydF9vZmZgLCBgZW5kX29mZmAsIGBzdGFydF9wYWdlYCwgYW5kIGBlbmRfcGFnZWAgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UuIFRoZSBjb2RlIHBhdGggdGhhdCB1c2VzIGBpc2l6ZWAgaXMgYWxzbyBzYWZlLiBObyBpc3N1ZXMgdGhlcmUuCgpUaGlyZCwgSSBjb25zaWRlcmVkIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIHNlZSBub3RoaW5nIGluIHRoZSBwYXRjaCB0aGF0IGludHJvZHVjZXMgb3IgbW9kaWZpZXMgc3VjaCBhIHNpdHVhdGlvbi4KCkZpbmFsbHksIEkgY2hlY2tlZCBmb3IgYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IG1pZ2h0IGV4cG9zZSB1bmluaXRpYWxpemVkIGJ5dGVzLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGhhbmRsZXMgRGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRi4gVGhlIHBhdGNoICpjb3JyZWN0bHkqIGFkZHJlc3NlcyB0aGlzIGJ5IGNhbGxpbmcgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLSZndDtraV9wb3MpYC4gVGhpcyBmdW5jdGlvbiBpcyBrZXkuIEl0IHV0aWxpemVzIHRoZSBwYWdlIGNhY2hlIGB3cml0ZV9iZWdpbmAgYW5kIGB3cml0ZV9lbmRgIG9wZXJhdGlvbnMgdG8gZW5zdXJlIHRoYXQgdGhlIGV4dGVuZGVkIHJlZ2lvbiBvZiB0aGUgZmlsZSBpcyB6ZXJvZWQgb3V0IGJlZm9yZSB3cml0aW5nLCBmb2xsb3dlZCBieSBwYWdlIGNhY2hlIGludmFsaWRhdGlvbiwgYW5kIGZpbmFsbHkgY2FsbGluZyBgYmxvY2tkZXZfZGlyZWN0X0lPYC4gVGhpcyBpcyAqcHJlY2lzZWx5KiB0aGUgY29ycmVjdCBhcHByb2FjaC4gQW55IHRoZW9yZXRpY2FsIG1lbW9yeSBlcnJvcnMgaW4gRElPLCBzdWNoIGFzIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIGJ1ZmZlciBvdmVyZmxvd3MsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTi4KClRoZXJlIGlzICpubyogY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgdGhlIEtNU0FOIGd1aWRlbGluZTogJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7IFRoaXMgYWxzbyBpbmNsdWRlcyBjaGVja2luZyBmb3IgcG90ZW50aWFsIGluZm8tbGVha3MuCgpUaGUgcGF0Y2ggaXRzZWxmIHVwZGF0ZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGJ5IGNhbGxpbmcgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLiBUaGlzIGV4cGFuc2lvbiB1c2VzIHBhZ2VjYWNoZSBgd3JpdGVfYmVnaW5gL2B3cml0ZV9lbmRgIHRvIHplcm8gaG9sZXMgcHJvcGVybHkuCgpJIGFtIGNvbmZpZGVudC4KCioqVGhlcmVmb3JlLCBOZWVkc0tNU0FOID0gZmFsc2UuKiogSGVyZSYjMzk7cyBteSByZWFzb25pbmcsIGNsZWFybHkgc3RhdGVkOgoKMS4gIFRoZSBwYXRjaCBub3cgY29ycmVjdGx5IHN1cHBvcnRzIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgYnkgemVyby1maWxsaW5nIGZpbGUgZXh0ZW5zaW9ucyB2aWEgcGFnZSBjYWNoZSBtZWNoYW5pc21zLgoyLiAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOgogICAgKiAgIE5vIGtlcm5lbC10by11c2Vyc3BhY2UgZGF0YSBpcyBjb3BpZWQgdGhhdCBjb250YWlucyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgogICAgKiAgIE5vIHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGVzIGFyZSB1c2VkIGluIGJyYW5jaGVzIG9yIGFzIHJlYWRzLgogICAgKiAgIFRoZSBwYXRjaCYjMzk7cyBsb2dpYyBhY3RpdmVseSAqYXZvaWRzKiB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLCBlbnN1cmluZyB6ZXJvLWZpbGxpbmcuCiAgICAqICAgUG90ZW50aWFsIGlzc3VlcyBpbiBESU8gaGFuZGxpbmcgb3IgZmlsZSBleHRlbnNpb24gKGUuZy4gYnVmZmVyIGFjY2VzcyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNwbHVzX2RpcmVjdF9JTygpYCBpbiBgZnMvaGZzcGx1cy9pbm9kZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSBleHBhbmRpbmcgdGhlIGZpbGUgdmlhIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCwgZmx1c2hpbmcgZGlydHkgcGFnZWNhY2hlIHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgZGVsZWdhdGluZyB0byBgYmxvY2tkZXZfZGlyZWN0X0lPKClgLlxuXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChlLmcuLCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rIGF0dHJpYnV0ZXMpLlxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlzaXplYCwgYHN0YXJ0X29mZmAsIGBlbmRfb2ZmYCwgYHN0YXJ0X3BhZ2VgLCBgZW5kX3BhZ2VgLCBgcmV0YCkgYXJlIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U7IG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cbjQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIERJTyBvZmZzZXRzLCBwYWdlIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyAoc3VjaCBhcyBgaW5vZGVfZGlvX3dhaXRgKSwgb3IgYnVmZmVyIGJvdW5kcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSB2aWEgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLCBmbHVzaGluZyBkaXJ0eSBwYWdlY2FjaGUgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIGBibG9ja2Rldl9kaXJlY3RfSU8oKWAuXG5cbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGUuZy4sIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmsgYXR0cmlidXRlcykuXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXG4zLiBUaGUgZXhwYW5zaW9uIGxvZ2ljIHNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgaG9sZXMgY3JlYXRlZCBiZWZvcmUgRU9GIGFyZSB6ZXJvZWQgdmlhIHBhZ2VjYWNoZSBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLlxuNC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gRElPIG9mZnNldHMsIHBhZ2UgcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIChzdWNoIGFzIGBpbm9kZV9kaW9fd2FpdGApLCBvciBidWZmZXIgYm91bmRzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjEwLjYyNDU2NjMzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxMDA3NzM1NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2RpcmVjdF9JT1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgIHRvIHByb3Blcmx5IGhhbmRsZSBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSB2aWEgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLCBmbHVzaGluZyBkaXJ0eSBwYWdlY2FjaGUgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBkZWxlZ2F0aW5nIHRvIGBibG9ja2Rldl9kaXJlY3RfSU8oKWAuXFxuXFxuS01TQU4gaXMgbm90IG5lZWRlZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrczogVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IGNvcGllcyBvZiBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UgKGUuZy4sIGBjb3B5X3RvX3VzZXJgLCBpb2N0bHMsIG5ldGxpbmsgYXR0cmlidXRlcykuXFxuMi4gQWxsIGxvY2FsIHZhcmlhYmxlcyAoYGlzaXplYCwgYHN0YXJ0X29mZmAsIGBlbmRfb2ZmYCwgYHN0YXJ0X3BhZ2VgLCBgZW5kX3BhZ2VgLCBgcmV0YCkgYXJlIGRldGVybWluaXN0aWNhbGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2U7IG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCBkYXRhLlxcbjMuIFRoZSBleHBhbnNpb24gbG9naWMgc3BlY2lmaWNhbGx5IGVuc3VyZXMgdGhhdCBob2xlcyBjcmVhdGVkIGJlZm9yZSBFT0YgYXJlIHplcm9lZCB2aWEgcGFnZWNhY2hlIG9wZXJhdGlvbnMgcmF0aGVyIHRoYW4gZXhwb3NpbmcgdW5pbml0aWFsaXplZCBibG9ja3MuXFxuNC4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gRElPIG9mZnNldHMsIHBhZ2UgcmFuZ2UgY2FsY3VsYXRpb25zLCBsb2NraW5nIChzdWNoIGFzIGBpbm9kZV9kaW9fd2FpdGApLCBvciBidWZmZXIgYm91bmRzIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGluIEhGUysgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMrIG1vdW50ZWQgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjEwLjYyNDU3MzAyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTU0MTI5NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkOGJiODEwZDhiNjA3N2VlZjJhNDVhNzNhZWI4YmRlYjRiZGYzZjlhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjAxOjA5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xcbmluZGV4IDYxNTNlNWNjNmViNjUuLjdlNmNjNGRkZTlmMjYgMTAwNjQ0XFxuLS0tIGEvZnMvaGZzcGx1cy9pbm9kZS5jXFxuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXFxuQEAgLTEyNSw5ICsxMjUsNDQgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4gXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbitcXHRsb2ZmX3QgaXNpemU7XFxuIFxcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbitcXHRsb2ZmX3QgZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgY291bnQ7XFxuIFxcdHNzaXplX3QgcmV0O1xcbiBcXG4rXFx0LypcXG4rXFx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cXG4rXFx0ICogRm9yIGRpcmVjdCB3cml0ZXMgYmV5b25kIEVPRiwgZXhwYW5kIHRoZSBmaWxlIGZpcnN0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbitcXHRcXHRsb2ZmX3Qgc3RhcnRfb2ZmLCBlbmRfb2ZmO1xcbitcXHRcXHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XFxuK1xcbitcXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxcbitcXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XFxuK1xcbitcXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHN0YXJ0X29mZiA9IGlzaXplO1xcbitcXHRcXHRlbmRfb2ZmID0gKGVuZCBcXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcXG4rXFxuK1xcdFxcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0XFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xcbiBcXG4gXFx0LypcXG5AQCAtMTM1LDggKzE3MCw3IEBAIHN0YXRpYyBzc2l6ZV90IGhmc3BsdXNfZGlyZWN0X0lPKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyKVxcbiBcXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxcbiBcXHQgKi9cXG4gXFx0aWYgKHVubGlrZWx5KGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IHJldCBcXHUwMDNjIDApKSB7XFxuLVxcdFxcdGxvZmZfdCBpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4tXFx0XFx0bG9mZl90IGVuZCA9IGlvY2ItXFx1MDAzZWtpX3BvcyArIGNvdW50O1xcbitcXHRcXHRpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcXG4gXFxuIFxcdFxcdGlmIChlbmQgXFx1MDAzZSBpc2l6ZSlcXG4gXFx0XFx0XFx0aGZzcGx1c193cml0ZV9mYWlsZWQobWFwcGluZywgZW5kKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDE6MTEuMDgwOTE0NTMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNDc5ODAzNzYxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSEZTUExVU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhmc3BsdXNfZGlyZWN0X0lPXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBkaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GIGluIEhGUysgZmlsZXN5c3RlbXMgYnkgZXhwYW5kaW5nIHRoZSBmaWxlLCBmbHVzaGluZyBkaXJ0eSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIHBlcmZvcm1pbmcgYmxvY2tkZXZfZGlyZWN0X0lPLiBUaGlzIG1vZGlmaWVzIGNvcmUgZmlsZXN5c3RlbSBJL08gbG9naWMgYW5kIGNhbiBiZSByZWFjaGVkIHZpYSBkaXJlY3QgSS9PIHdyaXRlcyB0byBIRlMrIG1vdW50ZWQgZmlsZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ4YmI4MTBkOGI2MDc3ZWVmMmE0NWE3M2FlYjhiZGViNGJkZjNmOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDowMTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggNjE1M2U1Y2M2ZWI2NS4uN2U2Y2M0ZGRlOWYyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTI1LDkgKzEyNSw0NCBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4rXHRsb2ZmX3QgaXNpemU7XG4gXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuIFx0c3NpemVfdCByZXQ7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbitcdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbitcdCAqL1xuK1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4rXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbitcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuK1x0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4rXHRcdCAqL1xuK1x0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4rXG4rXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4rXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4rXG4rXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXG4rXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbitcdH1cbitcbiBcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuIFxuIFx0LypcbkBAIC0xMzUsOCArMTcwLDcgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IHJldCBcdTAwM2MgMCkpIHtcbi1cdFx0bG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVx0XHRsb2ZmX3QgZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgKyBjb3VudDtcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4gXG4gXHRcdGlmIChlbmQgXHUwMDNlIGlzaXplKVxuIFx0XHRcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMToxMS4wODA5MTY3MzFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzM5NDM3NzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhGUysgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgcGF0Y2ggaXMgdGFyZ2V0aW5nIGBmcy9oZnNwbHVzL2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gYGhmc3BsdXNfZGlyZWN0X0lPYC4gSG1tLCBpdCdzIGFkZGluZyBzb21lIGxvZ2ljIHRvIGhhbmRsZSBkaXJlY3Qgd3JpdGVzIHRoYXQgZXh0ZW5kICpiZXlvbmQqIHRoZSBjdXJyZW50IGVuZC1vZi1maWxlIChFT0YpLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSB0cmlja3kuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQgc2VlbXMgdG8gYmUgYWRkcmVzc2luZyBhIGNvbW1vbiByZXF1aXJlbWVudC5cblxuRmlyc3QsIGEgY2hlY2s6IGlmIGl0J3MgYSAqd3JpdGUqIG9wZXJhdGlvbiBhbmQgdGhlIHdyaXRlIHBvc2l0aW9uIChgaW9jYi1cdTAwM2VraV9wb3NgKSBnb2VzIGJleW9uZCB0aGUgY3VycmVudCBmaWxlIHNpemUgKGBpX3NpemVfcmVhZChpbm9kZSlgKSwgd2UgZW50ZXIgdGhpcyBuZXcgYmxvY2suIFRoZSBsb2dpYyB0aGVuIHVzZXMgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgIHRvIGV4cGFuZCB0aGUgZmlsZS4gQnV0IGJlZm9yZSB0aGF0LCB0aGVyZSBpcyBhbiBgaW5vZGVfZGlvX3dhaXQoaW5vZGUpYCBjYWxsLiBJIHdpbGwgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB3aGF0IERJTyBpdCBpcyB3YWl0aW5nIGZvciwgYW5kIHdoeS4gRXhwYW5kaW5nIHRoZSBmaWxlIHNpemUgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGVuLCBpdCB3cml0ZXMgYmFjayB0byBkaXNrIHVzaW5nIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKClgLCBlbnN1cmluZyB0aGUgZXhwYW5kZWQgcG9ydGlvbiBpcyBhY3R1YWxseSB3cml0dGVuIG91dC4gVGhlIHVzZSBvZiBgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczJfcmFuZ2UoKWAgaXMgY3JpdGljYWwg4oCTIGl0J3MgaW52YWxpZGF0aW5nIHRoZSBwYWdlcyB3ZSd2ZSBqdXN0IGV4dGVuZGVkLiBUaGF0J3MgYSBnb29kIHNhZmVndWFyZDsgcHJldmVudGluZyBzdGFsZSBkYXRhIGZyb20gbGluZ2VyaW5nIGluIHRoZSBwYWdlIGNhY2hlLlxuXG5Ob3csIGxldCdzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIGBLY29uZmlnYCBhbmQgc3Vycm91bmRpbmcgY29kZSB1c2luZyBteSB1c3VhbCB0b29sa2l0LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkgaGFzIGFueSBuZXcgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuIEkgYWxzbyB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGVkZ2UgY2FzZXMgdGhhdCBtaWdodCBoYXZlIGJlZW4gb3Zlcmxvb2tlZC4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIGFsbCB0aGUgYmFzZXMgaGVyZSB3aXRoIHRoZXNlIGNoYW5nZXMgdG8gdGhlIGRpcmVjdCBJL08gcGF0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjI0LjQ3NTI5NjcxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ4NDcxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEZTUExVU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoyOmNvbmZpZyBIRlNQTFVTX0ZTXFxuZnMvaGZzcGx1cy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE3LVxcbmZzL2hmc3BsdXMvS2NvbmZpZzoxODpjb25maWcgSEZTUExVU19LVU5JVF9URVNUXFxuZnMvaGZzcGx1cy9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJLVW5pdCB0ZXN0cyBmb3IgSEZTKyBmaWxlc3lzdGVtXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAxOjI0LjUxOTc4Nzk3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MzQxMTkzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBvZiBgSEZTUExVU19GU2AuIE5vIHBvaW50IGluIGd1ZXNzaW5nOyBJJ20gZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gTGV0J3MgcHVsbCB1cCB0aGUgYGZzL2hmc3BsdXMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHdoZXJlIHRoZSByZWFsIHN0b3J5IGxpdmVzLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIga2VybmVsIGZlYXR1cmVzLCBvcHRpb25zLCBvciBoYXJkd2FyZSBzdXBwb3J0IGFyZSBwcmVyZXF1aXNpdGVzIGZvciBlbmFibGluZyB0aGUgSEZTKyBmaWxlc3lzdGVtIGRyaXZlci4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoaW5ncyBsaWtlIGJsb2NrIGRldmljZSBzdXBwb3J0LCBwb3RlbnRpYWxseSBzcGVjaWZpYyBTQ1NJIG9yIFNBVEEgZHJpdmVycywgYW5kIG1heWJlIGV2ZW4gc29tZSBjcnlwdG9ncmFwaGljIHByaW1pdGl2ZXMgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcyB0aGUgYmVkcm9jazsgdW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgSEZTKyBpbnRlZ3JhdGVzIHdpdGhpbiB0aGUgbGFyZ2VyIGtlcm5lbCBlY29zeXN0ZW0uIE5vIHVzZSBidWlsZGluZyBvbiBzYW5kLiBMZXQncyBzZWUgd2hhdCB3ZSd2ZSBnb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMToyNi45NTM5MDk5NjVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnNwbHVzL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBIRlNQTFVTX0ZTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiQXBwbGUgRXh0ZW5kZWQgSEZTIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA3OlxcdFxcdHNlbGVjdCBOTFNfVVRGOFxcbiAgIDg6XFx0XFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cXG4gICA5OlxcdFxcdGhlbHBcXG4gIDEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gbW91bnQgZXh0ZW5kZWQgZm9ybWF0XFxuICAxMTpcXHRcXHQgIE1hY2ludG9zaC1mb3JtYXR0ZWQgaGFyZCBkcml2ZSBwYXJ0aXRpb25zIHdpdGggZnVsbCByZWFkLXdyaXRlIGFjY2Vzcy5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBUaGlzIGZpbGUgc3lzdGVtIGlzIG9mdGVuIGNhbGxlZCBIRlMrIGFuZCB3YXMgaW50cm9kdWNlZCB3aXRoXFxuICAxNDpcXHRcXHQgIE1hY09TIDguIEl0IGluY2x1ZGVzIGFsbCBNYWMgc3BlY2lmaWMgZmlsZXN5c3RlbSBkYXRhIHN1Y2ggYXNcXG4gIDE1OlxcdFxcdCAgZGF0YSBmb3JrcyBhbmQgY3JlYXRvciBjb2RlcywgYnV0IGl0IGFsc28gaGFzIHNldmVyYWwgVU5JWFxcbiAgMTY6XFx0XFx0ICBzdHlsZSBmZWF0dXJlcyBzdWNoIGFzIGZpbGUgb3duZXJzaGlwIGFuZCBwZXJtaXNzaW9ucy5cXG4gIDE3OlxcdFxcbiAgMTg6XFx0Y29uZmlnIEhGU1BMVVNfS1VOSVRfVEVTVFxcbiAgMTk6XFx0XFx0dHJpc3RhdGUgXFxcIktVbml0IHRlc3RzIGZvciBIRlMrIGZpbGVzeXN0ZW1cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDIwOlxcdFxcdGRlcGVuZHMgb24gSEZTUExVU19GUyBcXHUwMDI2XFx1MDAyNiBLVU5JVFxcbiAgMjE6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDIyOlxcdFxcdGhlbHBcXG4gIDIzOlxcdFxcdCAgVGhpcyBidWlsZHMgS1VuaXQgdGVzdHMgZm9yIHRoZSBIRlMrIGZpbGVzeXN0ZW0uXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgS1VuaXQgdGVzdHMgcnVuIGR1cmluZyBib290IGFuZCBvdXRwdXQgdGhlIHJlc3VsdHMgdG8gdGhlIGRlYnVnXFxuICAyNjpcXHRcXHQgIGxvZyBpbiBUQVAgZm9ybWF0IChodHRwczovL3Rlc3Rhbnl0aGluZy5vcmcvKS4gT25seSB1c2VmdWwgZm9yXFxuICAyNzpcXHRcXHQgIGtlcm5lbCBkZXZzIHJ1bm5pbmcgS1VuaXQgdGVzdCBoYXJuZXNzIGFuZCBhcmUgbm90IGZvciBpbmNsdXNpb25cXG4gIDI4OlxcdFxcdCAgaW50byBhIHByb2R1Y3Rpb24gYnVpbGQuXFxuICAyOTpcXHRcXG4gIDMwOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCBwbGVhc2VcXG4gIDMxOlxcdFxcdCAgcmVmZXIgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9kZXYtdG9vbHMva3VuaXQvLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMToyNi45NTM5ODAzNjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0NjMzNjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgRmlsZSBTeXN0ZW0gQ29kZSoqXG5cbk9rYXksIHRpbWUgdG8gZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhpcyBtb2RpZmljYXRpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHplcm8gaW4gb24gYGZzL2hmc3BsdXMvaW5vZGUuY2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGNvcmUgaW5vZGUtcmVsYXRlZCBsb2dpYyBmb3IgSEZTKywgc28gaXQncyBhIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbmdlcyBpbnRlcmFjdCB3aXRoIHRoZSBleGlzdGluZyBpbm9kZSBzdHJ1Y3R1cmVzIGFuZCBvcGVyYXRpb25zLiBJIHdpbGwgY29uY2VudHJhdGUgb24gdGhlIGNoYW5nZWQgcG9ydGlvbnMgYW5kIGxvb2sgZm9yIHdoYXQgc3ltYm9scyB3ZXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaW4gdGhlIHJlbGV2YW50IGFyZWFzLiBHZXR0aW5nIGEgZ29vZCBncmFzcCBvbiB0aGUgY2hhbmdlZCBzeW1ib2xzIGlzIGtleSB0byBjb21wcmVoZW5kaW5nIHRoZSBvdmVyYWxsIGltcGFjdCBvZiB0aGUgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDE6MjkuMDk4NjE1OTY1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEyMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTA6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDExMTpcXHRcXHRcXHRcXHRpZiAoYXRvbWljX3JlYWQoXFx1MDAyNm5vZGUtXFx1MDAzZXJlZmNudCkpIHtcXG4gMTEyOlxcdFxcdFxcdFxcdFxcdHJlcyA9IGZhbHNlO1xcbiAxMTM6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDExNDpcXHRcXHRcXHRcXHR9XFxuIDExNTpcXHRcXHRcXHRcXHRoZnNfYm5vZGVfdW5oYXNoKG5vZGUpO1xcbiAxMTY6XFx0XFx0XFx0XFx0aGZzX2Jub2RlX2ZyZWUobm9kZSk7XFxuIDExNzpcXHRcXHRcXHR9IHdoaWxlICgtLWkgXFx1MDAyNlxcdTAwMjYgbmlkeCBcXHUwMDNjIHRyZWUtXFx1MDAzZW5vZGVfY291bnQpO1xcbiAxMTg6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnRyZWUtXFx1MDAzZWhhc2hfbG9jayk7XFxuIDExOTpcXHRcXHR9XFxuIDEyMDpcXHRcXHRyZXR1cm4gcmVzID8gdHJ5X3RvX2ZyZWVfYnVmZmVycyhmb2xpbykgOiBmYWxzZTtcXG4gMTIxOlxcdH1cXG4gMTIyOlxcdFxcbiAxMjM6XFx0c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuIDEyNDpcXHR7XFxuIDEyNTpcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItXFx1MDAzZWtpX2ZpbHA7XFxuIDEyNjpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtXFx1MDAzZWZfbWFwcGluZztcXG4gMTI3OlxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVxcdTAwM2Vob3N0O1xcbiAxMjg6XFx0XFx0bG9mZl90IGlzaXplO1xcbiAxMjk6XFx0XFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuIDEzMDpcXHRcXHRsb2ZmX3QgZW5kID0gaW9jYi1cXHUwMDNla2lfcG9zICsgY291bnQ7XFxuIDEzMTpcXHRcXHRzc2l6ZV90IHJldDtcXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0LypcXG4gMTM0OlxcdFxcdCAqIFRoZSBoZnNwbHVzX2dldF9ibG9jaygpIG9ubHkgYWxsb3dzIGNyZWF0aW5nIHRoZSBuZXh0IHNlcXVlbnRpYWwgYmxvY2suXFxuIDEzNTpcXHRcXHQgKiBGb3IgZGlyZWN0IHdyaXRlcyBiZXlvbmQgRU9GLCBleHBhbmQgdGhlIGZpbGUgZmlyc3QuXFxuIDEzNjpcXHRcXHQgKi9cXG4gMTM3OlxcdFxcdGlmIChpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcXHUwMDI2XFx1MDAyNiBpb2NiLVxcdTAwM2VraV9wb3MgXFx1MDAzZSBpX3NpemVfcmVhZChpbm9kZSkpIHtcXG4gMTM4OlxcdFxcdFxcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XFxuIDEzOTpcXHRcXHRcXHRsb2ZmX3Qgc3RhcnRfcGFnZSwgZW5kX3BhZ2U7XFxuIDE0MDpcXHRcXG4gMTQxOlxcdFxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRcXHQvKlxcbiAxNDQ6XFx0XFx0XFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXFxuIDE0NTpcXHRcXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuIDE0NjpcXHRcXHRcXHQgKi9cXG4gMTQ3OlxcdFxcdFxcdGlub2RlX2Rpb193YWl0KGlub2RlKTtcXG4gMTQ4OlxcdFxcbiAxNDk6XFx0XFx0XFx0cmV0ID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXFx1MDAzZWtpX3Bvcyk7XFxuIDE1MDpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNTE6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTUyOlxcdFxcbiAxNTM6XFx0XFx0XFx0c3RhcnRfb2ZmID0gaXNpemU7XFxuIDE1NDpcXHRcXHRcXHRlbmRfb2ZmID0gKGVuZCBcXHUwMDNlIDApID8gZW5kIC0gMSA6IGVuZDtcXG4gMTU1OlxcdFxcbiAxNTY6XFx0XFx0XFx0cmV0ID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdF9yYW5nZShtYXBwaW5nLCBzdGFydF9vZmYsIGVuZF9vZmYpO1xcbiAxNTc6XFx0XFx0XFx0aWYgKHJldClcXG4gMTU4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDE1OTpcXHRcXG4gMTYwOlxcdFxcdFxcdHN0YXJ0X3BhZ2UgPSBzdGFydF9vZmYgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gMTYxOlxcdFxcdFxcdGVuZF9wYWdlID0gZW5kX29mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRcXHRpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZShtYXBwaW5nLCBzdGFydF9wYWdlLCBlbmRfcGFnZSk7XFxuIDE2NDpcXHRcXHR9XFxuIDE2NTpcXHRcXG4gMTY2OlxcdFxcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xcbiAxNjc6XFx0XFxuIDE2ODpcXHRcXHQvKlxcbiAxNjk6XFx0XFx0ICogSW4gY2FzZSBvZiBlcnJvciBleHRlbmRpbmcgd3JpdGUgbWF5IGhhdmUgaW5zdGFudGlhdGVkIGEgZmV3XFxuIDE3MDpcXHRcXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxcbiAxNzE6XFx0XFx0ICovXFxuIDE3MjpcXHRcXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXFx1MDAyNlxcdTAwMjYgcmV0IFxcdTAwM2MgMCkpIHtcXG4gMTczOlxcdFxcdFxcdGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiAxNzQ6XFx0XFxuIDE3NTpcXHRcXHRcXHRpZiAoZW5kIFxcdTAwM2UgaXNpemUpXFxuIDE3NjpcXHRcXHRcXHRcXHRoZnNwbHVzX3dyaXRlX2ZhaWxlZChtYXBwaW5nLCBlbmQpO1xcbiAxNzc6XFx0XFx0fVxcbiAxNzg6XFx0XFxuIDE3OTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAxODA6XFx0fVxcbiAxODE6XFx0XFxuIDE4MjpcXHRzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4gMTgzOlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbiAxODQ6XFx0e1xcbiAxODU6XFx0XFx0cmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIDE4NjpcXHR9XFxuIDE4NzpcXHRcXG4gMTg4OlxcdGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbiAxODk6XFx0XFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDE6MjkuMDk4NzI5NDk1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTc0MTU3MjE1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBIRlMrIERpcmVjdCBJL08gVXNhZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhlIGBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSBgaGZzcGx1c19kaXJlY3RfSU9gIGNvbWVzIGludG8gcGxheS4gSSdtIGZvY3VzaW5nIG9uIGl0cyBpbnRlcmFjdGlvbnMsIGJlY2F1c2UgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkaXJlY3QgSS9PIHBhdGggaXMgaGFuZGxlZCBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBJdCdzIGEga2V5IGZ1bmN0aW9uIHRvIGV4YW1pbmUgZm9yIHBlcmZvcm1hbmNlIGNvbnNpZGVyYXRpb25zLCBieXBhc3NpbmcgdGhlIHBhZ2UgY2FjaGUsIGFuZCBkZWFsaW5nIHdpdGggcG90ZW50aWFsIGNvbXBsZXhpdGllcyBhcm91bmQgZGF0YSBjb25zaXN0ZW5jeS4gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGxhcmdlciBmaWxlIHN5c3RlbSBjb250ZXh0IHRvIHNlZSBob3cgZGF0YSBpcyByZWFkL3dyaXR0ZW4gdG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBkaXJlY3RseS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGFsbCB0aGUgcmVsZXZhbnQgb3BlcmF0aW9ucy4gSSdsbCBmb2N1cyBvbiBob3cgaXQgaXMgaW1wbGVtZW50ZWQgYmVjYXVzZSBJJ20gbG9va2luZyBmb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzIGluIHRoZSBkaXJlY3QgSS9PIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAyOjI2LjUxNDQ1MzYwNFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ0NTI0NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGZzcGx1c19kaXJlY3RfSU9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaGZzcGx1c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2lub2RlLmM9NjI9c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMTIyLVxcbmZzL2hmc3BsdXMvaW5vZGUuYzoxMjM6c3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTEyNC17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9MjAwPWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIwNi1cXHQuYm1hcFxcdFxcdD0gaGZzcGx1c19ibWFwLFxcbmZzL2hmc3BsdXMvaW5vZGUuYzoyMDc6XFx0LmRpcmVjdF9JT1xcdD0gaGZzcGx1c19kaXJlY3RfSU8sXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIwOC1cXHQud3JpdGVwYWdlc1xcdD0gaGZzcGx1c193cml0ZXBhZ2VzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjoyNi41Nzg5MTEyMzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzODYxNjE0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSEZTKyBEaXJlY3QgSS9PIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gYGhmc3BsdXNfZGlyZWN0X0lPYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgZGVmaW5lZCB3aXRoaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AuIFRoYXQgbWVhbnMgaXQncyBpbnRlcm5hbCB0byB0aGF0IGZpbGUsIGJ1dCBpdCdzIGFsc28gYXNzaWduZWQgdG8gYGhmc3BsdXNfYW9wcy5kaXJlY3RfSU9gLiBIbW0sIHRoZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYW4gZXhwb3J0ZWQsIG9yIGF0IGxlYXN0LCBub24tc3RhdGljIGZ1bmN0aW9uIHRoYXQgcGxheXMgYSByb2xlIGluIHRoaXMgYXJlYS4gSSBuZWVkIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucyB0byBmb2N1cyBvbi5cblxuTGV0J3MgY2xhcmlmeSB3aGF0J3MgYXZhaWxhYmxlIHRvIG1lOiBgaGZzcGx1c19kaXJlY3RfSU9gIGlzIGRlZmluaXRlbHkgc3RhdGljLiBTbywgSSBuZWVkIHRvIGxvb2sgZm9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBzZXR0aW5nIHVwIHRoZSBgaGZzcGx1c19hb3BzYCBzdHJ1Y3Qgb3IgZmlsZSBvcGVyYXRpb25zIG9uIGlub2RlcyBpbiB0aGUgSEZTKyBmaWxlc3lzdGVtLiBJJ2xsIG5lZWQgdG8gZ28gYmFjayB0byBgZnMvaGZzcGx1cy9pbm9kZS5jYCBhbmQgZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBhcmUgY2FsbGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjEzOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjoyOS40MTc1MzAzNzJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjQ1Nzc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc3BsdXNfYW9wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvYnRyZWUuYz0xMzM9c3RydWN0IGhmc19idHJlZSAqaGZzX2J0cmVlX29wZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGlkKVxcbi0tXFxuZnMvaGZzcGx1cy9idHJlZS5jLTI1MC0gZnJlZV9pbm9kZTpcXG5mcy9oZnNwbHVzL2J0cmVlLmM6MjUxOlxcdHRyZWUtXFx1MDAzZWlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfYW9wcztcXG5mcy9oZnNwbHVzL2J0cmVlLmMtMjUyLVxcdGlwdXQodHJlZS1cXHUwMDNlaW5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmg9NDM4PXZvaWQgaGZzcGx1c19maWxlX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgtNDQwLS8qIGlub2RlLmMgKi9cXG5mcy9oZnNwbHVzL2hmc3BsdXNfZnMuaDo0NDE6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaGZzcGx1c19mcy5oLTQ0Mi1leHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHM7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9MTg4PWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19idHJlZV9hb3BzID0ge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTE5OS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MjAwOmNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgaGZzcGx1c19hb3BzID0ge1xcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMDEtXFx0LmRpcnR5X2ZvbGlvXFx0PSBibG9ja19kaXJ0eV9mb2xpbyxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz00NDY9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00ODctXFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmhmc3BsdXNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo0ODg6XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy00ODktXFx0XFx0aGlwLVxcdTAwM2VjbHVtcF9ibG9ja3MgPSBzYmktXFx1MDAzZWRhdGFfY2x1bXBfYmxvY2tzO1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ5My1cXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo0OTQ6XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy00OTUtXFx0XFx0aGlwLVxcdTAwM2VjbHVtcF9ibG9ja3MgPSAxO1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTU2Nj1pbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNjI1LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucztcXG5mcy9oZnNwbHVzL2lub2RlLmM6NjI2OlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzID0gXFx1MDAyNmhmc3BsdXNfYW9wcztcXG5mcy9oZnNwbHVzL2lub2RlLmMtNjI3LVxcdFxcdH0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSkge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTYyOS1cXHRcXHRcXHRpbm9kZV9ub2hpZ2htZW0oaW5vZGUpO1xcbmZzL2hmc3BsdXMvaW5vZGUuYzo2MzA6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlYV9vcHMgPSBcXHUwMDI2aGZzcGx1c19hb3BzO1xcbmZzL2hmc3BsdXMvaW5vZGUuYy02MzEtXFx0XFx0fSBlbHNlIHtcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYz0yOD1zdGF0aWMgaW50IGhmc3BsdXNfc3lzdGVtX3JlYWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2hmc3BsdXMvc3VwZXIuYy00Mi1cXHRcXHRoZnNwbHVzX2lub2RlX3JlYWRfZm9yayhpbm9kZSwgXFx1MDAyNnZoZHItXFx1MDAzZWFsbG9jX2ZpbGUpO1xcbmZzL2hmc3BsdXMvc3VwZXIuYzo0MzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuZnMvaGZzcGx1cy9zdXBlci5jLTQ0LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjoyOS40NzkxODYyMTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYzNDYwMjczNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgSEZTKyBSZWd1bGFyIEZpbGUgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgb24gSEZTKyBhbmQgc3BlY2lmaWNhbGx5IHdhbnQgdG8gbWFwIG91dCB0aGUgY29tbW9uIGZpbGUgb3BlcmF0aW9ucyBlbXBsb3llZCB3aGVuIGRlYWxpbmcgd2l0aCByZWd1bGFyIGZpbGVzLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gdGhpbmtpbmcgYmV5b25kIHRoZSBiYXNpY3M7IEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqZWZmaWNpZW50KiBhbmQgKmlkaW9zeW5jcmF0aWMqIHdheXMgSEZTKyBoYW5kbGVzIHRoZXNlIGZpbGVzIHVuZGVyIHRoZSBob29kLiBJJ20gbm90IGp1c3QgbG9va2luZyBmb3IgYSBnZW5lcmFsIGxpc3Q7IEknbSB0cnlpbmcgdG8gbWVudGFsbHkgcmVjb25zdHJ1Y3QgdGhlIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhbmQgYWxnb3JpdGhtcyBhdCBwbGF5LlxuXG5TbywgSSdtIGNvbnNpZGVyaW5nOiB3aGF0IG9wZXJhdGlvbnMgYXJlIGxpa2VseSB0byBiZSBoZWF2aWx5IG9wdGltaXplZCBkdWUgdG8gZnJlcXVlbnQgdXNlPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBCLXRyZWUgc3RydWN0dXJlIG9uIHRoZXNlIG9wZXJhdGlvbnM/IEhvdyBkb2VzIHRoZSBleHRlbnQtYmFzZWQgYWxsb2NhdGlvbiB3b3JrIGluIHByYWN0aWNlPyBTcGVjaWZpY2FsbHksIEknbSB3b25kZXJpbmc6XG5cbiogICAqKkZpbGUgQ3JlYXRpb246KiogVGhlIGludGVycGxheSBiZXR3ZWVuIGFsbG9jYXRpbmcgYmxvY2tzIGluIHRoZSBjYXRhbG9nIEItdHJlZSwgdGhlIGFsbG9jYXRpb24gZmlsZSwgYW5kIGFueSBtZXRhZGF0YSBhdHRyaWJ1dGVzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBrbm93bGVkZ2Ugb2YgdGhlIHJvbGUgb2YgdGhlIGFsbG9jYXRpb24gYml0bWFwLlxuKiAgICoqRmlsZSBPcGVuaW5nOioqIFdoYXQgYXJlIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGFjY2Vzc2VkIGR1cmluZyBhbiBgb3BlbigpYCBjYWxsPyBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNhdGFsb2cgdHJlZSBsb29rdXAsIHZvbHVtZSBoZWFkZXIgYWNjZXNzZXMgKGlmIGFueSksIGFuZCBwb3NzaWJsZSBjYWNoaW5nIHN0cmF0ZWdpZXMgYXQgcGxheS5cbiogICAqKkZpbGUgUmVhZGluZy9Xcml0aW5nOioqIEhvdyBkb2VzIEhGUysgaGFuZGxlIGV4dGVudC1iYXNlZCBhbGxvY2F0aW9uIGR1cmluZyBzZXF1ZW50aWFsIEkvTyB2ZXJzdXMgcmFuZG9tIGFjY2Vzcz8gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2ggdGhlIGJsb2NrIG1hcHBpbmcgcHJvY2VzcyBhbmQgdGhlIHBvdGVudGlhbCBmb3IgZnJhZ21lbnRhdGlvbi4gSG93IGRvZXMgam91cm5hbGluZyBmYWN0b3IgaW4gaGVyZT8gV2hhdCdzIHRoZSBpbXBhY3Qgb2YgdGhlIGJsb2NrIHNpemUgb24gcGVyZm9ybWFuY2U/IEFyZSB0aGVyZSBhbnkgc3BlY2lhbCBjb25zaWRlcmF0aW9ucyBmb3IgbGFyZ2UgZmlsZXMgb3Igc3BhcnNlIGZpbGVzP1xuKiAgICoqRmlsZSBUcnVuY2F0aW9uOioqIEhvdyBpcyBmaWxlIHRydW5jYXRpb24gaGFuZGxlZD8gRG9lcyBpdCBpbnZvbHZlIGNsZWFyaW5nIGJsb2NrcyBhbmQgdXBkYXRpbmcgdGhlIGFsbG9jYXRpb24gYml0bWFwPyBXaGF0J3MgdGhlIG92ZXJoZWFkIGludm9sdmVkPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgZm9yIGZpbGUgc3lzdGVtIGNvbnNpc3RlbmN5P1xuKiAgICoqTWV0YWRhdGEgVXBkYXRlczoqKiBUaGlzIGlzIGltcG9ydGFudCDigJMgc3BlY2lmaWNhbGx5LCB0aGUgZWZmaWNpZW50IHdheSB0aGF0IGF0dHJpYnV0ZXMgbGlrZSBtb2RpZmljYXRpb24gdGltZSwgZmlsZSBzaXplLCBwZXJtaXNzaW9ucywgYW5kIGV4dGVuZGVkIGF0dHJpYnV0ZXMgYXJlIG1hbmFnZWQuIEFyZSB0aGVzZSBhdHRyaWJ1dGVzIGRpcmVjdGx5IHN0b3JlZCBpbiB0aGUgY2F0YWxvZyBCLXRyZWUsIG9yIGFyZSB0aGVyZSBzZXBhcmF0ZSBhdHRyaWJ1dGUgQi10cmVlcz8gSSdtIGxvb2tpbmcgZm9yIGRldGFpbHMuXG4qICAgKipGaWxlIERlbGV0aW9uOioqIEhvdyBhcmUgZmlsZSBleHRlbnRzIGRlYWxsb2NhdGVkPyBJcyB0aGUgY2F0YWxvZyBlbnRyeSBzaW1wbHkgcmVtb3ZlZCBhbmQgYmxvY2tzIG1hcmtlZCBhcyBmcmVlIGluIHRoZSBhbGxvY2F0aW9uIGZpbGU/IEFyZSB0aGVyZSBhbnkgZGVmZXJyZWQgb3BlcmF0aW9ucyBvciBnYXJiYWdlIGNvbGxlY3Rpb24gbWVjaGFuaXNtcz8gV2hhdCBhYm91dCBoYXJkIGxpbmtzP1xuKiAgICoqUmUtZW51bWVyYXRpb246KiogSG93IGFyZSBmaWxlIGFuZCBkaXJlY3RvcnkgZW51bWVyYXRpb25zIGltcGxlbWVudGVkPyBJIGFzc3VtZSB0aGlzIGlzIGEgQi10cmVlIHdhbGssIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgZGV0YWlscy5cbiogICAqKkNvbXByZXNzaW9uOioqIEhvdyBpcyBjb21wcmVzc2lvbiBoYW5kbGVkPyBJIG5lZWQgdG8ga25vdyBob3cgY29tcHJlc3Npb24gaXMgbWFuYWdlZCBhbmQgdW5tYW5hZ2VkIGJ5IHRoZSBmaWxlIHN5c3RlbS5cblxuSSdtIG1lbnRhbGx5IHN0ZXBwaW5nIHRocm91Z2ggZWFjaCBvZiB0aGVzZSBzY2VuYXJpb3MsIGFuZCBJJ2xsIHByb2JhYmx5IHJlZmVyIHRvIHNvbWUgSEZTKyBkb2N1bWVudGF0aW9uIGFuZCBjb2RlIGlmIEknbSBnb2luZyB0byBwcm92aWRlIGFjY3VyYXRlIGFuc3dlcnMuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIG1lbnRhbCBtb2RlbCBvZiB0aGUgY3J1Y2lhbCBjb21wb25lbnRzIGFuZCB0aGVpciBpbnRlcmFjdGlvbnMgaW4gbWFuYWdpbmcgcmVndWxhciBmaWxlcy4gVGhpcyBzaG91bGQgYmUgYSBnb29kIGV4ZXJjaXNlIGluIG1lbW9yeSByZWNhbGwgYW5kIGNvbmNlcHR1YWwgb3JnYW5pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDI3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDI6MzUuMTEzNzkzMjIzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjU4MTI3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJoZnNwbHVzX2ZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9oZnNwbHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2hmc3BsdXMvaW5vZGUuYz00MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQzMi1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NDMzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xcbmZzL2hmc3BsdXMvaW5vZGUuYy00MzQtXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYz00NDY9c3RydWN0IGlub2RlICpoZnNwbHVzX25ld19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00ODYtXFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ4NzpcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTQ4OC1cXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9NTY2PWludCBoZnNwbHVzX2NhdF9yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNfZmluZF9kYXRhICpmZClcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy02MjQtXFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jOjYyNTpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2aGZzcGx1c19maWxlX29wZXJhdGlvbnM7XFxuZnMvaGZzcGx1cy9pbm9kZS5jLTYyNi1cXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZoZnNwbHVzX2FvcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAyOjM1LjE4MDM3ODg4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4ODg4NTAyOTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIEZpbGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgaGZzcGx1c19maWxlX29wZXJhdGlvbnNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdHMgYXQgYSBsb3cgbGV2ZWwuIFdoYXQgZG9lcyBBcHBsZSdzIEhGUysgaW1wbGVtZW50YXRpb24gcmVhbGx5IGRvIHdoZW4gaGFuZGxpbmcgZmlsZSBvcGVyYXRpb25zPyBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3ZlIGhhbmRsZWQgcmVhZCwgd3JpdGUsIHRydW5jYXRlLCBhbmQgYWxsIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGFkZHJlc3NlZCBzb21lIG9mIHRoZSBtb3JlIHN1YnRsZSBjb21wbGV4aXRpZXMuIEFyZSB0aGVyZSBhbnkgY2xldmVyIG9wdGltaXphdGlvbnM/IEVkZ2UgY2FzZXMgaGFuZGxlZCBlbGVnYW50bHk/IEFuZCBvZiBjb3Vyc2UsIEknbSBleHBlY3Rpbmcgc29tZSBpZGlvc3luY3Jhc2llcy4gSXQncyBIRlMrLCBhZnRlciBhbGwuIExldCdzIHNlZSB3aGF0IHNlY3JldHMgdGhpcyBzdHJ1Y3R1cmUgaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MTYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMjo1NC4wNjg4ODQ1ODdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaGZzcGx1cy9pbm9kZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHRcXHQuZmlsZWF0dHJfc2V0XFx0PSBoZnNwbHVzX2ZpbGVhdHRyX3NldCxcXG4gNDMxOlxcdH07XFxuIDQzMjpcXHRcXG4gNDMzOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0ge1xcbiA0MzQ6XFx0XFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4gNDM1OlxcdFxcdC5yZWFkX2l0ZXJcXHQ9IGdlbmVyaWNfZmlsZV9yZWFkX2l0ZXIsXFxuIDQzNjpcXHRcXHQud3JpdGVfaXRlclxcdD0gZ2VuZXJpY19maWxlX3dyaXRlX2l0ZXIsXFxuIDQzNzpcXHRcXHQubW1hcF9wcmVwYXJlXFx0PSBnZW5lcmljX2ZpbGVfbW1hcF9wcmVwYXJlLFxcbiA0Mzg6XFx0XFx0LnNwbGljZV9yZWFkXFx0PSBmaWxlbWFwX3NwbGljZV9yZWFkLFxcbiA0Mzk6XFx0XFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG4gNDQwOlxcdFxcdC5mc3luY1xcdFxcdD0gaGZzcGx1c19maWxlX2ZzeW5jLFxcbiA0NDE6XFx0XFx0Lm9wZW5cXHRcXHQ9IGhmc3BsdXNfZmlsZV9vcGVuLFxcbiA0NDI6XFx0XFx0LnJlbGVhc2VcXHQ9IGhmc3BsdXNfZmlsZV9yZWxlYXNlLFxcbiA0NDM6XFx0XFx0LnVubG9ja2VkX2lvY3RsID0gaGZzcGx1c19pb2N0bCxcXG4gNDQ0OlxcdH07XFxuIDQ0NTpcXHRcXG4gNDQ2OlxcdHN0cnVjdCBpbm9kZSAqaGZzcGx1c19uZXdfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICpkaXIsXFxuIDQ0NzpcXHRcXHRcXHRcXHRcXHR1bW9kZV90IG1vZGUpXFxuIDQ0ODpcXHR7XFxuIDQ0OTpcXHRcXHRzdHJ1Y3QgaGZzcGx1c19zYl9pbmZvICpzYmkgPSBIRlNQTFVTX1NCKHNiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDI6NTQuMDY4OTY0OTY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNzQ2NTExNjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYSBQb3RlbnRpYWwgSEZTKyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgaG93IGRpcmVjdCBJL08gd3JpdGVzIHdvcmsgaW4gdGhlIEhGUysgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IHdpdGggYE9fRElSRUNUYCBlbmFibGVkLiBUaGUgY2FsbCBjaGFpbiBpcyBwcmV0dHkgc3RhbmRhcmQ6IGBnZW5lcmljX2ZpbGVfd3JpdGVfaXRlcmAgZG93biB0byBgaGZzcGx1c19kaXJlY3RfSU9gLiBOb3csIGhlcmUncyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiBpZiBhIHdyaXRlIGhhcHBlbnMgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGZpbGUgKEVPRiksIGFuZCBpdCdzIGEgZGlyZWN0IHdyaXRlLCB3ZSBoaXQgYSBzZXF1ZW5jZSB0aGF0IGludm9sdmVzIGBpbm9kZV9kaW9fd2FpdGAsIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAsIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlYCwgYW5kIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuXG5cblRoYXQgc2VxdWVuY2Ugc2NyZWFtcyBwb3RlbnRpYWwgdHJvdWJsZS4gSXQncyBpbiB0aGUgZmlsZXN5c3RlbSBjb3JlLCByaWdodCB0aGVyZSBpbiBgZnMvaGZzcGx1c2AsIHdoaWNoIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSB0aHJvdWdoIFFFTVUgYW5kIGVhc2lseSB0ZXN0YWJsZSB3aXRoIHNvbWV0aGluZyBsaWtlIFN5emthbGxlci4gWW91IGp1c3QgbmVlZCB0byBtb3VudCBhbiBIRlMrIGltYWdlIG9yIGxvb3BiYWNrIGRldmljZSwgb3BlbiBhIGZpbGUgd2l0aCBgT19ESVJFQ1RgLCBhbmQgd3JpdGUgcGFzdCBFT0YuIEJhbmchIFdvcnRoRnV6emluZyBpcyBkZWZpbml0ZWx5IFRydWUhXG5cbk5vdywgYmVmb3JlIEkgZ2V0IHRvbyBleGNpdGVkLCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IHdlaXJkIGRlcGVuZGVuY2llcyBvbiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSdsbCBjaGVjayBgZnMvaGZzcGx1cy9LY29uZmlnYC4gUmlnaHQsIGBIRlNQTFVTX0ZTYCBkZXBlbmRzIG9uIGBCTE9DS2AsIHNvIHRoYXQncyB0aGUgb25seSBpbW1lZGlhdGUgZGVwZW5kZW5jeS4gTGV0IG1lIHNjYW4gYGZzL0tjb25maWdgIGFuZCBgZnMvTWFrZWZpbGVgIG1vcmUgZ2VuZXJhbGx5IHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGJ1aWxkIGZsYWdzIG9yIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBob3cgYGZzL2hmc3BsdXNgIGlzIGNvbXBpbGVkLiBHb3R0YSBjb3ZlciBhbGwgYmFzZXMgYmVmb3JlIHJ1bm5pbmcgd2l0aCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTEyLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MTcuODE1NDgwNTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzEyMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhmc3BsdXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0lTTzk2NjBfRlMpXFx0Kz0gaXNvZnMvXFxuZnMvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpXFx0Kz0gaGZzcGx1cy8gIyBCZWZvcmUgaGZzIHRvIGZpbmQgd3JhcHBlZCBIRlMrXFxuZnMvTWFrZWZpbGUtODItb2JqLSQoQ09ORklHX0hGU19GUylcXHRcXHQrPSBoZnMvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjAzOjE3Ljg4MzE5Nzk4N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzcwODQwNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYGZzL2hmc3BsdXMvTWFrZWZpbGVgIGZpbGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlcyBvciByZWxldmFudCBNYWtlZmlsZXMgaGlkaW5nIGVsc2V3aGVyZS4gV2UgY2FuJ3QgYWZmb3JkIHRvIG1pc3MgYW55dGhpbmcgd2hlbiBkZWFsaW5nIHdpdGggYSBmaWxlc3lzdGVtIGFzIGNvbXBsZXggYXMgSEZTIFBsdXMuIEkndmUgZ290IHRvIGNvdmVyIGFsbCBteSBiYXNlcy4gU28sIGxldCdzIHRha2UgYSBxdWljayBwYXNzIOKAkyBhcmUgdGhlcmUgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgZmxvYXRpbmcgYXJvdW5kIGluIG90aGVyIGRpcmVjdG9yaWVzPyBMZXQncyBjaGVjay4gVGltZSB0byBkbyBhIHF1aWNrIHNhbml0eSBzd2VlcCB0byBlbnN1cmUgSSBoYXZlbid0IG1pc3NlZCBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODk4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MjIuMjU0MDQxMDc0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1MzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2hmc3BsdXMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGhmc3BsdXMgZmlsZXN5c3RlbSByb3V0aW5lcy5cXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0hGU1BMVVNfRlMpICs9IGhmc3BsdXMub1xcbiAgIDc6XFx0XFxuICAgODpcXHRoZnNwbHVzLW9ianMgOj0gc3VwZXIubyBvcHRpb25zLm8gaW5vZGUubyBpb2N0bC5vIGV4dGVudHMubyBjYXRhbG9nLm8gZGlyLm8gYnRyZWUubyBcXFxcXFxuICAgOTpcXHRcXHRcXHRibm9kZS5vIGJyZWMubyBiZmluZC5vIHRhYmxlcy5vIHVuaWNvZGUubyB3cmFwcGVyLm8gYml0bWFwLm8gcGFydF90YmwubyBcXFxcXFxuICAxMDpcXHRcXHRcXHRhdHRyaWJ1dGVzLm8geGF0dHIubyB4YXR0cl91c2VyLm8geGF0dHJfc2VjdXJpdHkubyB4YXR0cl90cnVzdGVkLm9cXG4gIDExOlxcdFxcbiAgMTI6XFx0IyBLVW5pdCB0ZXN0c1xcbiAgMTM6XFx0b2JqLSQoQ09ORklHX0hGU1BMVVNfS1VOSVRfVEVTVCkgKz0gdW5pY29kZV90ZXN0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MjIuMjU0MTM4NzU0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEzNDgxNTg5NDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEhGUysgRmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZSBIRlMrIGZpbGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnVpbGQtdGltZSBvcHRpb25zLiBJJ2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgSEZTUExVU19GU2AgY29uZmlnIGluIGBmcy9oZnNwbHVzL0tjb25maWdgLiBSaWdodCwgaXQgYGRlcGVuZHMgb24gQkxPQ0tgLCBzZWxlY3RzIGBCVUZGRVJfSEVBRGAsIGBOTFNgLCBgTkxTX1VURjhgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBTbywgYEhGU1BMVVNfRlNgIGlzIHRoZSBjb3JlLCBhbmQgYEJMT0NLYCBpcyBhIHByZXJlcXVpc2l0ZSwgYXMgZXhwZWN0ZWQuXG5cbk5vdywgbGV0J3MgZGlnIGludG8gdGhlIGltcG9ydGFudCBzeW1ib2xzLiBJJ20gZm9jdXNpbmcgb24gdGhlIG1vZGlmaWNhdGlvbnMsIHBhcnRpY3VsYXJseSB0byB0aGUgZGlyZWN0IEkvTyBwYXRoLiBJIHNlZSB0aGF0IGBoZnNwbHVzX2RpcmVjdF9JT2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBjaGFuZ2VkLiBFdmVuIHRob3VnaCBpdCdzIHN0YXRpYywgaXQncyB1c2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB3aXRoaW4gYGhmc3BsdXNfYW9wc2AuXG5cbkkgc2hvdWxkIHByb2JhYmx5IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zLiBMZXQgbWUgY2hlY2sgYGZzL2hmc3BsdXMvaW5vZGUuY2AgYW5kIHJlbGF0ZWQgZmlsZXMuIEFoLCBiZXNpZGVzIGBoZnNwbHVzX2RpcmVjdF9JT2AsIEkgYWxzbyBoYXZlIGBoZnNwbHVzX2ZpbGVfb3BlbmAsIGBoZnNwbHVzX2ZpbGVfZnN5bmNgLCBgaGZzcGx1c19uZXdfaW5vZGVgLCBhbmQgYGhmc3BsdXNfY2F0X3JlYWRfaW5vZGVgLiBJIHNob3VsZCBwcm9iYWJseSBsaXN0IG91dCB0aGUgY29udGVudHMgb2YgYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gYmUgY2VydGFpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMzgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozNS43MzU3MzA2MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMjQ2MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5bYS16QS1aX10uKlxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2hmc3BsdXMvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9oZnNwbHVzL2lub2RlLmMtMjUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjI2OnN0YXRpYyBpbnQgaGZzcGx1c19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yNy17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMzAtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjMxOnN0YXRpYyB2b2lkIGhmc3BsdXNfd3JpdGVfZmFpbGVkKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgdG8pXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMyLXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00MC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NDE6aW50IGhmc3BsdXNfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2hmc3BsdXMvaW5vZGUuYy00Mi1cXHRcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgbG9mZl90IHBvcyxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01Ni1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NTc6c3RhdGljIHNlY3Rvcl90IGhmc3BsdXNfYm1hcChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc2VjdG9yX3QgYmxvY2spXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU4LXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy02MS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NjI6c3RhdGljIGJvb2wgaGZzcGx1c19yZWxlYXNlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGdmcF90IG1hc2spXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTYzLXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xMjItXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjEyMzpzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTI0LXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xODEtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjE4MjpzdGF0aWMgaW50IGhmc3BsdXNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTgzLVxcdFxcdFxcdCAgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTIxMj1jb25zdCBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgaGZzcGx1c19kZW50cnlfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yMTYtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjIxNzpzdGF0aWMgaW50IGhmc3BsdXNfZ2V0X3Blcm1zKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTIxOC1cXHRcXHRcXHQgICAgIHN0cnVjdCBoZnNwbHVzX3Blcm0gKnBlcm1zLCBpbnQgZGlyKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTI3MC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MjcxOnN0YXRpYyBpbnQgaGZzcGx1c19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTI3Mi17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtMjgwLVxcbmZzL2hmc3BsdXMvaW5vZGUuYzoyODE6c3RhdGljIGludCBoZnNwbHVzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5mcy9oZnNwbHVzL2lub2RlLmMtMjgyLXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0yOTktXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjMwMDpzdGF0aWMgaW50IGhmc3BsdXNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9oZnNwbHVzL2lub2RlLmMtMzAxLVxcdFxcdFxcdCAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMyOS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6MzMwOmludCBoZnNwbHVzX2dldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLFxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zMzEtXFx0XFx0ICAgIHN0cnVjdCBrc3RhdCAqc3RhdCwgdTMyIHJlcXVlc3RfbWFzayxcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0zNTUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjM1NjppbnQgaGZzcGx1c19maWxlX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgc3RhcnQsIGxvZmZfdCBlbmQsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTM1Ny1cXHRcXHQgICAgICAgaW50IGRhdGFzeW5jKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTQzMz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNwbHVzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy00NDUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjQ0NjpzdHJ1Y3QgaW5vZGUgKmhmc3BsdXNfbmV3X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqZGlyLFxcbmZzL2hmc3BsdXMvaW5vZGUuYy00NDctXFx0XFx0XFx0XFx0dW1vZGVfdCBtb2RlKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTUwNC1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NTA1OnZvaWQgaGZzcGx1c19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9oZnNwbHVzL2lub2RlLmMtNTA2LXtcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01MjYtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjUyNzp2b2lkIGhmc3BsdXNfaW5vZGVfcmVhZF9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBoZnNwbHVzX2ZvcmtfcmF3ICpmb3JrKVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01Mjgte1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU1Ni1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NTU3OnZvaWQgaGZzcGx1c19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU1OC1cXHRcXHRzdHJ1Y3QgaGZzcGx1c19mb3JrX3JhdyAqZm9yaylcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy01NjUtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjU2NjppbnQgaGZzcGx1c19jYXRfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaGZzX2ZpbmRfZGF0YSAqZmQpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTU2Ny17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNjQ4LVxcbmZzL2hmc3BsdXMvaW5vZGUuYzo2NDk6aW50IGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTY1MC17XFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmMtNzQxLVxcbmZzL2hmc3BsdXMvaW5vZGUuYzo3NDI6aW50IGhmc3BsdXNfZmlsZWF0dHJfZ2V0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGZpbGVfa2F0dHIgKmZhKVxcbmZzL2hmc3BsdXMvaW5vZGUuYy03NDMte1xcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTc1OS1cXG5mcy9oZnNwbHVzL2lub2RlLmM6NzYwOmludCBoZnNwbHVzX2ZpbGVhdHRyX3NldChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9oZnNwbHVzL2lub2RlLmMtNzYxLVxcdFxcdFxcdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBmaWxlX2thdHRyICpmYSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MzUuNzk2OTgyNTc1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMTkzNDU0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEhGUysgRGlyZWN0IEkvTyBGdXp6aW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGUgZGlyZWN0IEkvTyBtb2RpZmljYXRpb25zIHdpdGhpbiB0aGUgSEZTKyBmaWxlIHN5c3RlbS4gTGV0IG1lIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZy4gVGhlIGNvcmUgZnVuY3Rpb24gdGFyZ2V0ZWQgZm9yIGRpcmVjdCBJL08gaXMgYGhmc3BsdXNfZGlyZWN0X0lPYCwgYnV0IHRoZXJlIGFyZSBzZXZlcmFsIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgYWxzbyByZXF1aXJlIGNhcmVmdWwgc2NydXRpbnkgZHVyaW5nIHRoaXMgZnV6emluZyBjYW1wYWlnbjogYGhmc3BsdXNfd3JpdGVfYmVnaW5gLCBgaGZzcGx1c19maWxlX2ZzeW5jYCwgYGhmc3BsdXNfZmlsZV9vcGVuYCwgYGhmc3BsdXNfZmlsZV9yZWxlYXNlYCwgYGhmc3BsdXNfbmV3X2lub2RlYCwgYGhmc3BsdXNfY2F0X3JlYWRfaW5vZGVgLCBhbmQgYGhmc3BsdXNfY2F0X3dyaXRlX2lub2RlYC4gVGhlc2UgbmVlZCB0byBiZSBpbmNsdWRlZC5cblxuQWxyaWdodCwgdGltZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24uIFRoZSBmdXp6aW5nIHZlcmRpY3QgaXMgXCJXb3J0aEZ1enppbmdcIiB3aGljaCBtYWtlcyBzZW5zZS4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjbGVhcmx5IGRlZmluZWQ7IGl0ICpzaG91bGQqIG9ubHkgY29udGFpbiBgaGZzcGx1c19kaXJlY3RfSU9gLiBUaGUgY3JpdGljYWwgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGUgYEhGU1BMVVNfRlNgLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSSdkIGV4cGVjdCB0byBzZWUgdG8gZW5zdXJlIHRoaXMgYWxsIHdvcmtzLiBUaGlzIG1ha2VzIHNlbnNlLlxuXG5GaW5hbGx5LCBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHRvIGV4ZWN1dGUgdGhlIHZlcmRpY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTI5LCJPdXRwdXRUb2tlbnMiOjExMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozOC45MTYzMzEwNjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ5NTYyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2RpcmVjdF9JT1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBpbiBIRlMrIGZpbGVzeXN0ZW1zIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSwgZmx1c2hpbmcgZGlydHkgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBwZXJmb3JtaW5nIGJsb2NrZGV2X2RpcmVjdF9JTy4gVGhpcyBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gSS9PIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IEkvTyB3cml0ZXMgdG8gSEZTKyBtb3VudGVkIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhGU1BMVVNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoZnNwbHVzX2RpcmVjdF9JT1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBpbiBIRlMrIGZpbGVzeXN0ZW1zIGJ5IGV4cGFuZGluZyB0aGUgZmlsZSwgZmx1c2hpbmcgZGlydHkgcGFnZXMsIGFuZCBpbnZhbGlkYXRpbmcgdGhlIHJhbmdlIGJlZm9yZSBwZXJmb3JtaW5nIGJsb2NrZGV2X2RpcmVjdF9JTy4gVGhpcyBtb2RpZmllcyBjb3JlIGZpbGVzeXN0ZW0gSS9PIGxvZ2ljIGFuZCBjYW4gYmUgcmVhY2hlZCB2aWEgZGlyZWN0IEkvTyB3cml0ZXMgdG8gSEZTKyBtb3VudGVkIGZpbGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozOS4wNjEyOTU2OThaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNTcwOTkwOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDM6MzkuMDYxOTQ5NzA4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI1NzAzMzAwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBoZnNwbHVzX2RpcmVjdF9JTygpYCBpbiBgZnMvaGZzcGx1cy9pbm9kZS5jYCB0byBwcm9wZXJseSBoYW5kbGUgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSBleHBhbmRpbmcgdGhlIGZpbGUgdmlhIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZSgpYCwgZmx1c2hpbmcgZGlydHkgcGFnZWNhY2hlIHBhZ2VzLCBhbmQgaW52YWxpZGF0aW5nIHRoZSByYW5nZSBiZWZvcmUgZGVsZWdhdGluZyB0byBgYmxvY2tkZXZfZGlyZWN0X0lPKClgLlxcblxcbktNU0FOIGlzIG5vdCBuZWVkZWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3M6IFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBjb3BpZXMgb2Yga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlIChlLmcuLCBgY29weV90b191c2VyYCwgaW9jdGxzLCBuZXRsaW5rIGF0dHJpYnV0ZXMpLlxcbjIuIEFsbCBsb2NhbCB2YXJpYWJsZXMgKGBpc2l6ZWAsIGBzdGFydF9vZmZgLCBgZW5kX29mZmAsIGBzdGFydF9wYWdlYCwgYGVuZF9wYWdlYCwgYHJldGApIGFyZSBkZXRlcm1pbmlzdGljYWxseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlOyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS5cXG4zLiBUaGUgZXhwYW5zaW9uIGxvZ2ljIHNwZWNpZmljYWxseSBlbnN1cmVzIHRoYXQgaG9sZXMgY3JlYXRlZCBiZWZvcmUgRU9GIGFyZSB6ZXJvZWQgdmlhIHBhZ2VjYWNoZSBvcGVyYXRpb25zIHJhdGhlciB0aGFuIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgYmxvY2tzLlxcbjQuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIERJTyBvZmZzZXRzLCBwYWdlIHJhbmdlIGNhbGN1bGF0aW9ucywgbG9ja2luZyAoc3VjaCBhcyBgaW5vZGVfZGlvX3dhaXRgKSwgb3IgYnVmZmVyIGJvdW5kcyBhcmUgY292ZXJlZCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ4YmI4MTBkOGI2MDc3ZWVmMmE0NWE3M2FlYjhiZGViNGJkZjNmOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDowMTowOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuY1xuaW5kZXggNjE1M2U1Y2M2ZWI2NS4uN2U2Y2M0ZGRlOWYyNiAxMDA2NDRcbi0tLSBhL2ZzL2hmc3BsdXMvaW5vZGUuY1xuKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jXG5AQCAtMTI1LDkgKzEyNSw0NCBAQCBzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcbiBcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cdTAwM2VraV9maWxwO1xuIFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLVx1MDAzZWZfbWFwcGluZztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLVx1MDAzZWhvc3Q7XG4rXHRsb2ZmX3QgaXNpemU7XG4gXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbitcdGxvZmZfdCBlbmQgPSBpb2NiLVx1MDAzZWtpX3BvcyArIGNvdW50O1xuIFx0c3NpemVfdCByZXQ7XG4gXG4rXHQvKlxuK1x0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cbitcdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cbitcdCAqL1xuK1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFx1MDAyNlx1MDAyNiBpb2NiLVx1MDAzZWtpX3BvcyBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKSB7XG4rXHRcdGxvZmZfdCBzdGFydF9vZmYsIGVuZF9vZmY7XG4rXHRcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcbitcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFdhaXQgZm9yIGFueSBpbi1mbGlnaHQgRElPIG9uIHRoaXMgaW5vZGUgdG8gZmluaXNoIGJlZm9yZVxuK1x0XHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXG4rXHRcdCAqL1xuK1x0XHRpbm9kZV9kaW9fd2FpdChpbm9kZSk7XG4rXG4rXHRcdHJldCA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBpb2NiLVx1MDAzZWtpX3Bvcyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0c3RhcnRfb2ZmID0gaXNpemU7XG4rXHRcdGVuZF9vZmYgPSAoZW5kIFx1MDAzZSAwKSA/IGVuZCAtIDEgOiBlbmQ7XG4rXG4rXHRcdHJldCA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgc3RhcnRfb2ZmLCBlbmRfb2ZmKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRzdGFydF9wYWdlID0gc3RhcnRfb2ZmIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuK1x0XHRlbmRfcGFnZSA9IGVuZF9vZmYgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXG4rXHRcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcbitcdH1cbitcbiBcdHJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhpb2NiLCBpbm9kZSwgaXRlciwgaGZzcGx1c19nZXRfYmxvY2spO1xuIFxuIFx0LypcbkBAIC0xMzUsOCArMTcwLDcgQEAgc3RhdGljIHNzaXplX3QgaGZzcGx1c19kaXJlY3RfSU8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIpXG4gXHQgKiBibG9ja3Mgb3V0c2lkZSBpX3NpemUuIFRyaW0gdGhlc2Ugb2ZmIGFnYWluLlxuIFx0ICovXG4gXHRpZiAodW5saWtlbHkoaW92X2l0ZXJfcncoaXRlcikgPT0gV1JJVEUgXHUwMDI2XHUwMDI2IHJldCBcdTAwM2MgMCkpIHtcbi1cdFx0bG9mZl90IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xuLVx0XHRsb2ZmX3QgZW5kID0gaW9jYi1cdTAwM2VraV9wb3MgKyBjb3VudDtcbitcdFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4gXG4gXHRcdGlmIChlbmQgXHUwMDNlIGlzaXplKVxuIFx0XHRcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowMzozOS4wNjE5NTI2MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMzNDEyODk4OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIRlMrIERpcmVjdCBJL08gUGF0Y2gqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZGlmZi4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyBjaGFuZ2VkIGhlcmUuIExvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIHRhcmdldGluZyBgZnMvaGZzcGx1cy9pbm9kZS5jYCwgd2l0aCBhIHNwZWNpZmljIGZvY3VzIG9uIHRoZSBgaGZzcGx1c19kaXJlY3RfSU9gIGZ1bmN0aW9uLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24sIEkgbmVlZCB0byBrbm93IHdoeSBzb21lb25lIGlzIGNoYW5naW5nIHRoZSBkaXJlY3QgSS9PIGZvciBIRlMrLiBMZXQgbWUgcHVsbCB1cCB0aGF0IGZpbGUgYW5kIHplcm8gaW4gb24gdGhlIGFyZWEgYXJvdW5kIGBoZnNwbHVzX2RpcmVjdF9JT2AuIEtub3dpbmcgdGhlIGNvbnRleHQgYXJvdW5kIHRoYXQgZnVuY3Rpb24gaXMgY3J1Y2lhbCB0byBzZWUgZXhhY3RseSB3aGF0J3MgYmVpbmcgbW9kaWZpZWQgYW5kIHdoeS4gSSdsbCByZWFkIHRocm91Z2ggdGhhdCBhcmVhIGNhcmVmdWxseSB0byBpZGVudGlmeSB0aGUgcmVsZXZhbnQgY29kZSBhbmQgZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjYzNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MDQ6MDIuNDAzMjQ1Njc3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9oZnNwbHVzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE1LFxuICBcIkxpbmVDb3VudFwiOiA3NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTE1OlxcdFxcdFxcdFxcdGhmc19ibm9kZV91bmhhc2gobm9kZSk7XFxuIDExNjpcXHRcXHRcXHRcXHRoZnNfYm5vZGVfZnJlZShub2RlKTtcXG4gMTE3OlxcdFxcdFxcdH0gd2hpbGUgKC0taSBcXHUwMDI2XFx1MDAyNiBuaWR4IFxcdTAwM2MgdHJlZS1cXHUwMDNlbm9kZV9jb3VudCk7XFxuIDExODpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2dHJlZS1cXHUwMDNlaGFzaF9sb2NrKTtcXG4gMTE5OlxcdFxcdH1cXG4gMTIwOlxcdFxcdHJldHVybiByZXMgPyB0cnlfdG9fZnJlZV9idWZmZXJzKGZvbGlvKSA6IGZhbHNlO1xcbiAxMjE6XFx0fVxcbiAxMjI6XFx0XFxuIDEyMzpcXHRzdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4gMTI0OlxcdHtcXG4gMTI1OlxcdFxcdHN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi1cXHUwMDNla2lfZmlscDtcXG4gMTI2OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS1cXHUwMDNlZl9tYXBwaW5nO1xcbiAxMjc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctXFx1MDAzZWhvc3Q7XFxuIDEyODpcXHRcXHRsb2ZmX3QgaXNpemU7XFxuIDEyOTpcXHRcXHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcXG4gMTMwOlxcdFxcdGxvZmZfdCBlbmQgPSBpb2NiLVxcdTAwM2VraV9wb3MgKyBjb3VudDtcXG4gMTMxOlxcdFxcdHNzaXplX3QgcmV0O1xcbiAxMzI6XFx0XFxuIDEzMzpcXHRcXHQvKlxcbiAxMzQ6XFx0XFx0ICogVGhlIGhmc3BsdXNfZ2V0X2Jsb2NrKCkgb25seSBhbGxvd3MgY3JlYXRpbmcgdGhlIG5leHQgc2VxdWVudGlhbCBibG9jay5cXG4gMTM1OlxcdFxcdCAqIEZvciBkaXJlY3Qgd3JpdGVzIGJleW9uZCBFT0YsIGV4cGFuZCB0aGUgZmlsZSBmaXJzdC5cXG4gMTM2OlxcdFxcdCAqL1xcbiAxMzc6XFx0XFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpID09IFdSSVRFIFxcdTAwMjZcXHUwMDI2IGlvY2ItXFx1MDAzZWtpX3BvcyBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSkge1xcbiAxMzg6XFx0XFx0XFx0bG9mZl90IHN0YXJ0X29mZiwgZW5kX29mZjtcXG4gMTM5OlxcdFxcdFxcdGxvZmZfdCBzdGFydF9wYWdlLCBlbmRfcGFnZTtcXG4gMTQwOlxcdFxcbiAxNDE6XFx0XFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdFxcdC8qXFxuIDE0NDpcXHRcXHRcXHQgKiBXYWl0IGZvciBhbnkgaW4tZmxpZ2h0IERJTyBvbiB0aGlzIGlub2RlIHRvIGZpbmlzaCBiZWZvcmVcXG4gMTQ1OlxcdFxcdFxcdCAqIGNhbGxpbmcgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKS5cXG4gMTQ2OlxcdFxcdFxcdCAqL1xcbiAxNDc6XFx0XFx0XFx0aW5vZGVfZGlvX3dhaXQoaW5vZGUpO1xcbiAxNDg6XFx0XFxuIDE0OTpcXHRcXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG4gMTUwOlxcdFxcdFxcdGlmIChyZXQpXFxuIDE1MTpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRcXHRzdGFydF9vZmYgPSBpc2l6ZTtcXG4gMTU0OlxcdFxcdFxcdGVuZF9vZmYgPSAoZW5kIFxcdTAwM2UgMCkgPyBlbmQgLSAxIDogZW5kO1xcbiAxNTU6XFx0XFxuIDE1NjpcXHRcXHRcXHRyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlKG1hcHBpbmcsIHN0YXJ0X29mZiwgZW5kX29mZik7XFxuIDE1NzpcXHRcXHRcXHRpZiAocmV0KVxcbiAxNTg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTU5OlxcdFxcbiAxNjA6XFx0XFx0XFx0c3RhcnRfcGFnZSA9IHN0YXJ0X29mZiBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbiAxNjE6XFx0XFx0XFx0ZW5kX3BhZ2UgPSBlbmRfb2ZmIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDE2MjpcXHRcXG4gMTYzOlxcdFxcdFxcdGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlKG1hcHBpbmcsIHN0YXJ0X3BhZ2UsIGVuZF9wYWdlKTtcXG4gMTY0OlxcdFxcdH1cXG4gMTY1OlxcdFxcbiAxNjY6XFx0XFx0cmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKGlvY2IsIGlub2RlLCBpdGVyLCBoZnNwbHVzX2dldF9ibG9jayk7XFxuIDE2NzpcXHRcXG4gMTY4OlxcdFxcdC8qXFxuIDE2OTpcXHRcXHQgKiBJbiBjYXNlIG9mIGVycm9yIGV4dGVuZGluZyB3cml0ZSBtYXkgaGF2ZSBpbnN0YW50aWF0ZWQgYSBmZXdcXG4gMTcwOlxcdFxcdCAqIGJsb2NrcyBvdXRzaWRlIGlfc2l6ZS4gVHJpbSB0aGVzZSBvZmYgYWdhaW4uXFxuIDE3MTpcXHRcXHQgKi9cXG4gMTcyOlxcdFxcdGlmICh1bmxpa2VseShpb3ZfaXRlcl9ydyhpdGVyKSA9PSBXUklURSBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAzYyAwKSkge1xcbiAxNzM6XFx0XFx0XFx0aXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XFxuIDE3NDpcXHRcXG4gMTc1OlxcdFxcdFxcdGlmIChlbmQgXFx1MDAzZSBpc2l6ZSlcXG4gMTc2OlxcdFxcdFxcdFxcdGhmc3BsdXNfd3JpdGVfZmFpbGVkKG1hcHBpbmcsIGVuZCk7XFxuIDE3NzpcXHRcXHR9XFxuIDE3ODpcXHRcXG4gMTc5OlxcdFxcdHJldHVybiByZXQ7XFxuIDE4MDpcXHR9XFxuIDE4MTpcXHRcXG4gMTgyOlxcdHN0YXRpYyBpbnQgaGZzcGx1c193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiAxODM6XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXFxuIDE4NDpcXHR7XFxuIDE4NTpcXHRcXHRyZXR1cm4gbXBhZ2Vfd3JpdGVwYWdlcyhtYXBwaW5nLCB3YmMsIGhmc3BsdXNfZ2V0X2Jsb2NrKTtcXG4gMTg2OlxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0Y29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBoZnNwbHVzX2J0cmVlX2FvcHMgPSB7XFxuIDE4OTpcXHRcXHQuZGlydHlfZm9saW9cXHQ9IGJsb2NrX2RpcnR5X2ZvbGlvLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDowMi40MDMzNzQwMDhaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU0MzM2MDM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhGUysgRGlyZWN0IEkvTyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGZvciBgaGZzcGx1c19kaXJlY3RfSU9gLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyB3ZSBoYW5kbGUgRGlyZWN0IEkvTyB3cml0ZXMgdGhhdCBnbyBiZXlvbmQgdGhlIGN1cnJlbnQgZW5kLW9mLWZpbGUuIFByZXZpb3VzbHksIHdpdGggdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgYGhmc3BsdXNfZ2V0X2Jsb2NrYCBoYWQgYSBsaW1pdGF0aW9uIG9mIG9ubHkgYWxsb2NhdGluZyBzZXF1ZW50aWFsIGJsb2Nrcywgd2hpY2ggbGVkIHRvIGZhaWx1cmVzIG9yIHByb2JsZW1zIHdoZW4gd3JpdGluZyBwYXN0IEVPRi5cblxuVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgY2xldmVyIHdvcmthcm91bmQuIFdoZW4gd2UgaGF2ZSBhIHdyaXRlIG9wZXJhdGlvbiBhbmQgdGhlIHdyaXRlIHBvc2l0aW9uIChgaW9jYi1cdTAwM2VraV9wb3NgKSBleHRlbmRzIHBhc3QgdGhlIGZpbGUgc2l6ZSAoYGlfc2l6ZV9yZWFkKGlub2RlKWApLCB0aGUgc3lzdGVtIG5vdyB3YWl0cyBmb3IgYW55IGV4aXN0aW5nIERJTyBvcGVyYXRpb25zIHRvIGZpbmlzaCB1c2luZyBgaW5vZGVfZGlvX3dhaXRgLiBUaGVuLCBpdCBjYWxscyBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGVgIHRvIGV4cGFuZCB0aGUgZmlsZSwgZWZmZWN0aXZlbHkgemVyb2luZyBvdXQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIG9sZCBzaXplIGFuZCB0aGUgd3JpdGUgcG9zaXRpb24gdmlhIHRoZSBwYWdlIGNhY2hlLiBBZnRlciB0aGF0IGV4cGFuc2lvbiwgdGhlIGRpcnR5IHBhZ2VzIGFyZSBmbHVzaGVkIHVzaW5nIGBmaWxlbWFwX3dyaXRlX2FuZF93YWl0X3JhbmdlYCwgYW5kIHRoZSBwYWdlIGNhY2hlIGlzIGludmFsaWRhdGVkIHVzaW5nIGBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMl9yYW5nZWAuIEZpbmFsbHksIGl0IHByb2NlZWRzIHdpdGggdGhlIGBibG9ja2Rldl9kaXJlY3RfSU9gIGNhbGwuXG5cblRoaXMgZXhwYW5zaW9uIGxvZ2ljIHNlZW1zIGZhbWlsaWFyLCBhbmQgSSdkIGxpa2UgdG8gc2VlIGhvdyBpdCdzIGhhbmRsZWQgaW4gb3RoZXIgZmlsZXN5c3RlbXMuIExldCBtZSBjaGVjayBob3cgb3RoZXIgZmlsZSBzeXN0ZW1zIGxpa2UgZXh0Miwgb3IgZXZlbiBGQVQsIGFyZSBoYW5kbGluZyBzaW1pbGFyIHNjZW5hcmlvcy4gSSdsbCBkbyBhIHF1aWNrIGBncmVwYCBmb3IgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlYCB0byBnZXQgYSBiZXR0ZXIgb3ZlcnZpZXcgb2Ygd2hpY2ggZmlsZXN5c3RlbXMgbWlnaHQgdXNlIHRoaXMgZnVuY3Rpb24gb3Igc2ltaWxhciBpbXBsZW1lbnRhdGlvbnMgdG8gaGFuZGxlIHNwYXJzZS1maWxlIGV4cGFuc2lvbiBmb3IgZGlyZWN0IEkvTy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjA0OjA3Ljk0NjczOTMyNVoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MDE0ODM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9idWZmZXIuYz0yNDY3PUVYUE9SVF9TWU1CT0woYmxvY2tfcmVhZF9mdWxsX2ZvbGlvKTtcXG4tLVxcbmZzL2J1ZmZlci5jLTI0NzItICovXFxuZnMvYnVmZmVyLmM6MjQ3MzppbnQgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuZnMvYnVmZmVyLmMtMjQ3NC17XFxuLS1cXG5mcy9idWZmZXIuYy0yNDk0LX1cXG5mcy9idWZmZXIuYzoyNDk1OkVYUE9SVF9TWU1CT0woZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUpO1xcbmZzL2J1ZmZlci5jLTI0OTYtXFxuLS1cXG5mcy9mYXQvZmlsZS5jPTIxNz1zdGF0aWMgaW50IGZhdF9jb250X2V4cGFuZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSlcXG4tLVxcbmZzL2ZhdC9maWxlLmMtMjIyLVxcbmZzL2ZhdC9maWxlLmM6MjIzOlxcdGVyciA9IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKGlub2RlLCBzaXplKTtcXG5mcy9mYXQvZmlsZS5jLTIyNC1cXHRpZiAoZXJyKVxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jPTEyMz1zdGF0aWMgc3NpemVfdCBoZnNwbHVzX2RpcmVjdF9JTyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcilcXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xNDQtXFx0XFx0ICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBESU8gb24gdGhpcyBpbm9kZSB0byBmaW5pc2ggYmVmb3JlXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjE0NTpcXHRcXHQgKiBjYWxsaW5nIGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKCkuXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTE0Ni1cXHRcXHQgKi9cXG4tLVxcbmZzL2hmc3BsdXMvaW5vZGUuYy0xNDgtXFxuZnMvaGZzcGx1cy9pbm9kZS5jOjE0OTpcXHRcXHRyZXQgPSBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZShpbm9kZSwgaW9jYi1cXHUwMDNla2lfcG9zKTtcXG5mcy9oZnNwbHVzL2lub2RlLmMtMTUwLVxcdFxcdGlmIChyZXQpXFxuLS1cXG5mcy9oZnNwbHVzL2lub2RlLmM9MzAwPXN0YXRpYyBpbnQgaGZzcGx1c19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMxMy1cXHRcXHRpZiAoYXR0ci1cXHUwMDNlaWFfc2l6ZSBcXHUwMDNlIGlub2RlLVxcdTAwM2VpX3NpemUpIHtcXG5mcy9oZnNwbHVzL2lub2RlLmM6MzE0OlxcdFxcdFxcdGVycm9yID0gZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsXFxuZnMvaGZzcGx1cy9pbm9kZS5jLTMxNS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBhdHRyLVxcdTAwM2VpYV9zaXplKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaD0yNzA9aW50IGNvbnRfd3JpdGVfYmVnaW4oY29uc3Qgc3RydWN0IGtpb2NiICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIGxvZmZfdCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaC0yNzItXFx0XFx0XFx0Z2V0X2Jsb2NrX3QgKiwgbG9mZl90ICopO1xcbmluY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaDoyNzM6aW50IGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgtMjc0LXZvaWQgYmxvY2tfY29tbWl0X3dyaXRlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBmcm9tLCBzaXplX3QgdG8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDoxMC4xOTY4OTUyMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDY1NDA1OTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBnZW5lcmljX2NvbnRfZXhwYW5kX3NpbXBsZWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZnMvYnVmZmVyLmNgIGFuZCBzcGVjaWZpY2FsbHkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgKndoYXQqIGl0IGRvZXMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBmaWxlc3lzdGVtIGJ1ZmZlciBsYXllci4gSXMgdGhpcyBoYW5kbGluZyBibG9jayBhbGxvY2F0aW9uLCBwYWdlIHBpbm5pbmcsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIHNjYW4gb2YgaXRzIHB1cnBvc2Ugd291bGQgYmUgZ29vZC4gSSdtIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG5hbWUgYW5kIGltcGxlbWVudGF0aW9uIHRvIGltbWVkaWF0ZWx5IHVuZGVyc3RhbmQgaXQncyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNpbXBsZSBjb250aW51YXRpb24gZXhwYW5zaW9uIGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgaXQncyBsaWtlbHkgaW52b2x2ZWQgaW4gY29udGlndW91cyBhbGxvY2F0aW9uIG9yIG1hcHBpbmcgb2YgZGF0YSB3aXRoaW4gdGhlIGJ1ZmZlciBjYWNoZSwgbGlrZWx5IGluIGEgc2NlbmFyaW8gd2hlcmUgYSBidWZmZXIgbmVlZHMgdG8gYmUgbGFyZ2VyIHRoYW4gY3VycmVudGx5IGFsbG9jYXRlZC4gSSdtIGFzc3VtaW5nIGl0IG1heSBiZSBhIGZhbGxiYWNrIG1ldGhvZCwgbWF5YmUgd2l0aG91dCBhbGwgdGhlIGJlbGxzIGFuZCB3aGlzdGxlcyBvZiBtb3JlIGFkdmFuY2VkIGV4cGFuc2lvbiBzdHJhdGVnaWVzLiBMZXQncyBzZWUgaWYgbXkgbWVudGFsIG1vZGVsIGhvbGRzIHRydWUuIFRpbWUgdG8gZ2V0IG15IGV5ZXMgb24gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0MDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDoxMi4yNjIzMDM1MDNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2J1ZmZlci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NzAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI0NzA6XFx0ICogdHJ1bmNhdGVzLiAgVXNlcyBmaWxlc3lzdGVtIHBhZ2VjYWNoZSB3cml0ZXMgdG8gYWxsb3cgdGhlIGZpbGVzeXN0ZW0gdG9cXG4yNDcxOlxcdCAqIGRlYWwgd2l0aCB0aGUgaG9sZS4gIFxcbjI0NzI6XFx0ICovXFxuMjQ3MzpcXHRpbnQgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpXFxuMjQ3NDpcXHR7XFxuMjQ3NTpcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuMjQ3NjpcXHRcXHRjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphb3BzID0gbWFwcGluZy1cXHUwMDNlYV9vcHM7XFxuMjQ3NzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjI0Nzg6XFx0XFx0dm9pZCAqZnNkYXRhID0gTlVMTDtcXG4yNDc5OlxcdFxcdGludCBlcnI7XFxuMjQ4MDpcXHRcXG4yNDgxOlxcdFxcdGVyciA9IGlub2RlX25ld3NpemVfb2soaW5vZGUsIHNpemUpO1xcbjI0ODI6XFx0XFx0aWYgKGVycilcXG4yNDgzOlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0ODQ6XFx0XFxuMjQ4NTpcXHRcXHRlcnIgPSBhb3BzLVxcdTAwM2V3cml0ZV9iZWdpbihOVUxMLCBtYXBwaW5nLCBzaXplLCAwLCBcXHUwMDI2Zm9saW8sIFxcdTAwMjZmc2RhdGEpO1xcbjI0ODY6XFx0XFx0aWYgKGVycilcXG4yNDg3OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjI0ODg6XFx0XFxuMjQ4OTpcXHRcXHRlcnIgPSBhb3BzLVxcdTAwM2V3cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgc2l6ZSwgMCwgMCwgZm9saW8sIGZzZGF0YSk7XFxuMjQ5MDpcXHRcXHRCVUdfT04oZXJyIFxcdTAwM2UgMCk7XFxuMjQ5MTpcXHRcXG4yNDkyOlxcdG91dDpcXG4yNDkzOlxcdFxcdHJldHVybiBlcnI7XFxuMjQ5NDpcXHR9XFxuMjQ5NTpcXHRFWFBPUlRfU1lNQk9MKGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKTtcXG4yNDk2OlxcdFxcbjI0OTc6XFx0c3RhdGljIGludCBjb250X2V4cGFuZF96ZXJvKGNvbnN0IHN0cnVjdCBraW9jYiAqaW9jYixcXG4yNDk4OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4yNDk5OlxcdFxcdFxcdFxcdCAgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgKmJ5dGVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDowNDoxMi4yNjI1MDA4NTRaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTM2OTczOTg2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgU2Vzc2lvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSd2ZSBhbmFseXplZCB0aGUgY2hhbmdlcyB0byBgaGZzcGx1c19kaXJlY3RfSU9gIGluIGBmcy9oZnNwbHVzL2lub2RlLmNgLCBmb2N1c2luZyBvbiBLTVNBTiBjcml0ZXJpYS5cblxuRmlyc3QsIEkgZXhhbWluZWQgd2hldGhlciBhbnkga2VybmVsIHN0cnVjdHVyZXMgYXJlIGV4cG9zZWQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIOKAkyBubyBgY29weV90b191c2VyYCwgYHB1dF91c2VyYCwgbmV0bGluayBza2IgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzIGFyZSB0b3VjaGVkIGhlcmUuIE5vIHJpc2sgdGhlcmUuXG5cbk5leHQsIEkgbG9va2VkIGZvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gVGhlIGtleSBsb2NhbCB2YXJpYWJsZXMgbGlrZSBgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGFuZCBgZW5kX3BhZ2VgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLiBUaGUgY29kZSBwYXRoIHRoYXQgdXNlcyBgaXNpemVgIGlzIGFsc28gc2FmZS4gTm8gaXNzdWVzIHRoZXJlLlxuXG5UaGlyZCwgSSBjb25zaWRlcmVkIHRoZSBhbGxvY2F0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBJIHNlZSBub3RoaW5nIGluIHRoZSBwYXRjaCB0aGF0IGludHJvZHVjZXMgb3IgbW9kaWZpZXMgc3VjaCBhIHNpdHVhdGlvbi5cblxuRmluYWxseSwgSSBjaGVja2VkIGZvciBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaGFuZGxlcyBEaXJlY3QgSS9PIHdyaXRlcyBiZXlvbmQgRU9GLiBUaGUgcGF0Y2ggKmNvcnJlY3RseSogYWRkcmVzc2VzIHRoaXMgYnkgY2FsbGluZyBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoaW5vZGUsIGlvY2ItXHUwMDNla2lfcG9zKWAuIFRoaXMgZnVuY3Rpb24gaXMga2V5LiBJdCB1dGlsaXplcyB0aGUgcGFnZSBjYWNoZSBgd3JpdGVfYmVnaW5gIGFuZCBgd3JpdGVfZW5kYCBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBleHRlbmRlZCByZWdpb24gb2YgdGhlIGZpbGUgaXMgemVyb2VkIG91dCBiZWZvcmUgd3JpdGluZywgZm9sbG93ZWQgYnkgcGFnZSBjYWNoZSBpbnZhbGlkYXRpb24sIGFuZCBmaW5hbGx5IGNhbGxpbmcgYGJsb2NrZGV2X2RpcmVjdF9JT2AuIFRoaXMgaXMgKnByZWNpc2VseSogdGhlIGNvcnJlY3QgYXBwcm9hY2guIEFueSB0aGVvcmV0aWNhbCBtZW1vcnkgZXJyb3JzIGluIERJTywgc3VjaCBhcyBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBidWZmZXIgb3ZlcmZsb3dzLCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4uXG5cblRoZXJlIGlzICpubyogY2hhbmNlIG9mIGludHJvZHVjaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLlxuXG5Ob3csIGxldCdzIGFwcGx5IHRoZSBLTVNBTiBndWlkZWxpbmU6IFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBUaGlzIGFsc28gaW5jbHVkZXMgY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBpbmZvLWxlYWtzLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIHVwZGF0ZXMgYGhmc3BsdXNfZGlyZWN0X0lPKClgIGJ5IGNhbGxpbmcgYGdlbmVyaWNfY29udF9leHBhbmRfc2ltcGxlKClgLiBUaGlzIGV4cGFuc2lvbiB1c2VzIHBhZ2VjYWNoZSBgd3JpdGVfYmVnaW5gL2B3cml0ZV9lbmRgIHRvIHplcm8gaG9sZXMgcHJvcGVybHkuXG5cbkkgYW0gY29uZmlkZW50LlxuXG4qKlRoZXJlZm9yZSwgTmVlZHNLTVNBTiA9IGZhbHNlLioqIEhlcmUncyBteSByZWFzb25pbmcsIGNsZWFybHkgc3RhdGVkOlxuXG4xLiAgVGhlIHBhdGNoIG5vdyBjb3JyZWN0bHkgc3VwcG9ydHMgZGlyZWN0IEkvTyB3cml0ZXMgYmV5b25kIEVPRiBieSB6ZXJvLWZpbGxpbmcgZmlsZSBleHRlbnNpb25zIHZpYSBwYWdlIGNhY2hlIG1lY2hhbmlzbXMuXG4yLiAgS01TQU4gaXMgbm90IG5lZWRlZCBiZWNhdXNlOlxuICAgICogICBObyBrZXJuZWwtdG8tdXNlcnNwYWNlIGRhdGEgaXMgY29waWVkIHRoYXQgY29udGFpbnMgb3IgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeS5cbiAgICAqICAgTm8gdW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZXMgYXJlIHVzZWQgaW4gYnJhbmNoZXMgb3IgYXMgcmVhZHMuXG4gICAgKiAgIFRoZSBwYXRjaCdzIGxvZ2ljIGFjdGl2ZWx5ICphdm9pZHMqIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgcG90ZW50aWFsIGluZm8tbGVha3MsIGVuc3VyaW5nIHplcm8tZmlsbGluZy5cbiAgICAqICAgUG90ZW50aWFsIGlzc3VlcyBpbiBESU8gaGFuZGxpbmcgb3IgZmlsZSBleHRlbnNpb24gKGUuZy4gYnVmZmVyIGFjY2VzcyBpc3N1ZXMpIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOLCBMT0NLREVQLCBhbmQgc3RhbmRhcmQgZGVidWdnaW5nLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTM3LCJPdXRwdXRUb2tlbnMiOjI4MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjA0OjIxLjYzMjI0NDgzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzcGx1c19kaXJlY3RfSU8oKWAgaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gcHJvcGVybHkgaGFuZGxlIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgYnkgZXhwYW5kaW5nIHRoZSBmaWxlIHZpYSBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKWAsIGZsdXNoaW5nIGRpcnR5IHBhZ2VjYWNoZSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIGRlbGVnYXRpbmcgdG8gYGJsb2NrZGV2X2RpcmVjdF9JTygpYC5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29waWVzIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoZS5nLiwgYGNvcHlfdG9fdXNlcmAsIGlvY3RscywgbmV0bGluayBhdHRyaWJ1dGVzKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cXG40LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBESU8gb2Zmc2V0cywgcGFnZSByYW5nZSBjYWxjdWxhdGlvbnMsIGxvY2tpbmcgKHN1Y2ggYXMgYGlub2RlX2Rpb193YWl0YCksIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgaGZzcGx1c19kaXJlY3RfSU8oKWAgaW4gYGZzL2hmc3BsdXMvaW5vZGUuY2AgdG8gcHJvcGVybHkgaGFuZGxlIGRpcmVjdCBJL08gd3JpdGVzIGJleW9uZCBFT0YgYnkgZXhwYW5kaW5nIHRoZSBmaWxlIHZpYSBgZ2VuZXJpY19jb250X2V4cGFuZF9zaW1wbGUoKWAsIGZsdXNoaW5nIGRpcnR5IHBhZ2VjYWNoZSBwYWdlcywgYW5kIGludmFsaWRhdGluZyB0aGUgcmFuZ2UgYmVmb3JlIGRlbGVnYXRpbmcgdG8gYGJsb2NrZGV2X2RpcmVjdF9JTygpYC5cXG5cXG5LTVNBTiBpcyBub3QgbmVlZGVkIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzOiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgY29waWVzIG9mIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZSAoZS5nLiwgYGNvcHlfdG9fdXNlcmAsIGlvY3RscywgbmV0bGluayBhdHRyaWJ1dGVzKS5cXG4yLiBBbGwgbG9jYWwgdmFyaWFibGVzIChgaXNpemVgLCBgc3RhcnRfb2ZmYCwgYGVuZF9vZmZgLCBgc3RhcnRfcGFnZWAsIGBlbmRfcGFnZWAsIGByZXRgKSBhcmUgZGV0ZXJtaW5pc3RpY2FsbHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZTsgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuXFxuMy4gVGhlIGV4cGFuc2lvbiBsb2dpYyBzcGVjaWZpY2FsbHkgZW5zdXJlcyB0aGF0IGhvbGVzIGNyZWF0ZWQgYmVmb3JlIEVPRiBhcmUgemVyb2VkIHZpYSBwYWdlY2FjaGUgb3BlcmF0aW9ucyByYXRoZXIgdGhhbiBleHBvc2luZyB1bmluaXRpYWxpemVkIGJsb2Nrcy5cXG40LiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBESU8gb2Zmc2V0cywgcGFnZSByYW5nZSBjYWxjdWxhdGlvbnMsIGxvY2tpbmcgKHN1Y2ggYXMgYGlub2RlX2Rpb193YWl0YCksIG9yIGJ1ZmZlciBib3VuZHMgYXJlIGNvdmVyZWQgYnkgS0FTQU4sIExPQ0tERVAsIGFuZCBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlhf6m[1] Phase: Succeeded StartedAt: 2026-08-31 20:04:33 +0000 UTC FinishedAt: 2026-08-31 20:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 20:04:33 +0000 UTC FinishedAt: 2026-08-31 20:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2] Phase: Succeeded StartedAt: 2026-08-31 20:04:33 +0000 UTC FinishedAt: 2026-08-31 23:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:04:33 +0000 UTC FinishedAt: 2026-08-31 23:50:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:04:33 +0000 UTC FinishedAt: 2026-08-31 20:04:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:04:33 +0000 UTC FinishedAt: 2026-08-31 20:04:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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-workflowlhf6m/series-workflowlhf6m-convert-artifact-1378961115/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:04:43 +0000 UTC FinishedAt: 2026-08-31 20:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:04:43 +0000 UTC FinishedAt: 2026-08-31 20:20:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d9ea150-9bdb-44ec-8da7-e05118262f78,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-workflowlhf6m/series-workflowlhf6m-convert-artifact-1378961115/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": "aa13ca53-bb26-4b6b-9507-990eb86d3f61", "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-workflowlhf6m/series-workflowlhf6m-build-action-2551776281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:04:43 +0000 UTC FinishedAt: 2026-08-31 20:20:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*6d9ea150-9bdb-44ec-8da7-e05118262f78,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-workflowlhf6m/series-workflowlhf6m-convert-artifact-1378961115/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": "aa13ca53-bb26-4b6b-9507-990eb86d3f61", "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-workflowlhf6m/series-workflowlhf6m-build-action-2551776281/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:20:50 +0000 UTC FinishedAt: 2026-08-31 20:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:20:50 +0000 UTC FinishedAt: 2026-08-31 20:20:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:20:50 +0000 UTC FinishedAt: 2026-08-31 20:21:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:20:50 +0000 UTC FinishedAt: 2026-08-31 20:20:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-workflowlhf6m/series-workflowlhf6m-convert-artifact-436840498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:21:01 +0000 UTC FinishedAt: 2026-08-31 20:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:21:01 +0000 UTC FinishedAt: 2026-08-31 20:22:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa13ca53-bb26-4b6b-9507-990eb86d3f61,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-workflowlhf6m/series-workflowlhf6m-build-action-2551776281/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-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:23:02 +0000 UTC FinishedAt: 2026-08-31 20:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:23:02 +0000 UTC FinishedAt: 2026-08-31 20:23:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:23:02 +0000 UTC FinishedAt: 2026-08-31 20:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:23:02 +0000 UTC FinishedAt: 2026-08-31 20:39:13 +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:*6d9ea150-9bdb-44ec-8da7-e05118262f78,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-workflowlhf6m/series-workflowlhf6m-convert-artifact-436840498/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": "5faf6649-ba6a-4e85-9767-c1c724041f35", "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-workflowlhf6m/series-workflowlhf6m-build-action-1078368710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:23:02 +0000 UTC FinishedAt: 2026-08-31 20:39:03 +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:*6d9ea150-9bdb-44ec-8da7-e05118262f78,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-workflowlhf6m/series-workflowlhf6m-convert-artifact-436840498/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": "5faf6649-ba6a-4e85-9767-c1c724041f35", "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-workflowlhf6m/series-workflowlhf6m-build-action-1078368710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:39:13 +0000 UTC FinishedAt: 2026-08-31 20:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:39:13 +0000 UTC FinishedAt: 2026-08-31 20:39:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:39:13 +0000 UTC FinishedAt: 2026-08-31 20:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:39:13 +0000 UTC FinishedAt: 2026-08-31 20:41:12 +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:*5faf6649-ba6a-4e85-9767-c1c724041f35,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-workflowlhf6m/series-workflowlhf6m-build-action-1078368710/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-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 23:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 23:50:34 +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":["hfsplus_direct_IO"],"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:*aa13ca53-bb26-4b6b-9507-990eb86d3f61,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5faf6649-ba6a-4e85-9767-c1c724041f35,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-workflowlhf6m/series-workflowlhf6m-build-action-2551776281/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-workflowlhf6m/series-workflowlhf6m-build-action-1078368710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 20:41:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 20:41:27 +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":["hfsplus_direct_IO"],"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-workflowlhf6m/series-workflowlhf6m-convert-artifact-802692231/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 20:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 20:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:21 +0000 UTC FinishedAt: 2026-08-31 20:41:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:31 +0000 UTC FinishedAt: 2026-08-31 23:50:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhf6m[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"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":["hfsplus_direct_IO"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b18c5b84fa4a3c3c41b25c9b8f52ed9471c0c98d","config_name":"upstream-apparmor-kasan.config","enable_configs":["HFSPLUS_FS"],"series_id":"8ae3ecf5-22ca-4735-b4c2-8abe6f82e20e","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-08-31 20:41:31 +0000 UTC FinishedAt: 2026-08-31 23:50:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aa13ca53-bb26-4b6b-9507-990eb86d3f61,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5faf6649-ba6a-4e85-9767-c1c724041f35,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-workflowlhf6m/series-workflowlhf6m-build-action-2551776281/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-workflowlhf6m/series-workflowlhf6m-build-action-1078368710/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-workflowlhf6m/series-workflowlhf6m-convert-artifact-802692231/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,}